网站首页 > 开源技术 正文
这次更新主要是更新文件自动入库时,同时也向数据库写入文件的时长。例如一个视频长度为01:25:30:02,需要将该数据从视频中提取出来并保存至数据库,同时在查看视频详情时可以展示。
修改数据表,新增durtaion字段
models.py
#媒体信息列表
class content_media(models.Model):
id = models.AutoField(primary_key=True)
create_time=models.DateTimeField()
name=models.CharField(max_length=40)
size=models.CharField(max_length=15)
path=models.CharField(max_length=200)
duration=models.CharField(max_length=12,default='00:00:00:00')
在命令行中执行:
python manage.py makemigrations
python manage.py migrate
数据表更新完成
修改主程序代码如下:
import os
import pymysql
import time
import copy
import os
import cv2
def scan_files(directory):
files_list = []
for root, sub_dirs, files in os.walk(directory):
for special_file in files:
tmp = []
if (special_file.split('_')[0] != 'aizou0629'):
#判断文件完全写入才进行后续操作
if (isFinished(os.path.join(root, special_file))):
#判断文件是否出现重名
if ('aizou0629_' + special_file in files):
tmpname = copy.deepcopy(special_file)
flag=1
while 1:
if('aizou0629_' +special_file.replace('.', '('+str(flag)+').') not in files):
special_file=special_file.replace('.', '('+str(flag)+').')
os.rename(os.path.join(root, tmpname), os.path.join(root, special_file))
break
else:
flag+=1
#开始搜集需入库的文件列表
tmp.append(special_file)
tmp.append(cal_size(os.path.join(root, special_file)))
timearray = time.localtime(os.path.getctime(os.path.join(root, special_file)))
tmp.append(time.strftime("%Y-%m-%d %H:%M:%S", timearray))
tmp.append(getMediaInfo(os.path.join(root, special_file)))
files_list.append(tmp)
if (len(files_list) == 0):
return 0
conn = pymysql.connect(host='localhost',
user='root',
password='ChenzroyI.*?',
database='test')
cursor = conn.cursor()
for each in files_list:
path = str(os.path.join(root, 'aizou0629_' + each[0]))
NewPath = ""
for each_1 in path.split("\\"):
NewPath += each_1 + "\\\\"
NewPath = NewPath[:len(NewPath) - 2]
sql="insert into myapp_content_media (create_time,name,size,path,duration) values ('{}','{}','{}','{}','{}')".format(each[2],each[0],each[1],NewPath,each[3])
cursor.execute(sql)
file_rename(root, each[0])
conn.commit()
cursor.close()
conn.close()
return files_list
# 修改文件大小格式,使其更符合阅读习惯
def cal_size(path):
flag = 1
unit_dict = {1: 'B', 2: 'KB', 3: 'MB', 4: 'GB', 5: 'TB'}
size = os.path.getsize(path)
while 1:
if (size > 1024):
size = size / 1024
flag += 1
else:
return str(round(size, 2)) + unit_dict[flag]
# 判断外来文件是否已完全拷贝到存储中
def isFinished(path):
tmp = []
while 1:
size = os.path.getsize(path)
if (size in tmp):
tmp.append(size)
else:
del tmp
tmp = [size]
if (len(tmp) == 3):
return True
time.sleep(10)
def file_rename(root, filename):
filename_new = 'aizou0629_' + filename
os.rename(os.path.join(root, filename), os.path.join(root, filename_new))
#获取视频的时长
def getMediaInfo(path):
cap = cv2.VideoCapture(path) #打开视频文件
n_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) #视频的帧数
fps = cap.get(cv2.CAP_PROP_FPS) #视频的帧率
media_f = int(n_frames % fps) #视频时长的帧部分
media_s = int(n_frames // fps % 60) #视频时长的秒部分
media_m = int(n_frames // fps // 60 % 60) #视频时长的分钟部分
media_h = int(n_frames // fps // 60 // 60) #视频时长的小时部分
def int2str(media_x):
media_x=str(media_x)
if(len(media_x)==1):
return '0'+media_x
else:
return media_x
media_f=int2str(media_f)
media_s=int2str(media_s)
media_m=int2str(media_m)
media_h=int2str(media_h)
return media_h+':'+media_m+':'+media_s+':'+media_f
if __name__ == "__main__":
path = r'D:\PythonWorkspace\MyFirstDjango\mysite\content_media\origin'
while 1:
scan_files(path)
time.sleep(5)
本次更新中新增加了一个getMediaInfo的方法,该方法主要用来提取视频的时长。
如果直接通过cv2来提取视频时长的话只能获得视频的帧数,比如一个3分钟FPS为25帧的视频,我们想要的是这种格式:'00:03:00:00',但是用cv2提取出来的则是:'4500',也就是视频的总帧数。
通过getMediaInfo方法可以直接将其转换为我们想要的格式。
如果文章帮助到了您,可否给一个点赞关注收藏呢~
如果遇到编程上的问题,欢迎留言哦~
关注作者回复:aiweb,获取源码下载地址哦~
猜你喜欢
- 2024-09-30 「导入问题」大疆或苹果拍摄的 mov 视频无法导入Pr (Premiere)
- 2024-09-30 FLV、MP4、TS合成音视频实战(1)(ts文件合成视频)
- 2024-09-30 视频封装格式:MP4格式详解(视频文件封装格式有哪些)
- 2024-09-30 视频太大没法上传?视频压缩神器——小丸工具箱!
- 2024-09-30 深入剖析MediaCodec解码器的基本原理及使用「建议新手收藏」
- 2024-09-30 Excel催化剂开源-音视频文件元数据提取-分辨率,时长,采样率等
- 2024-09-30 推荐!Universal Media Server - 连接你的世界,畅享无限媒体
- 2024-09-30 Premiere技巧|视频文件的故障排除
- 2024-09-30 Qt/C++音视频开发59-使用mdk-sdk组件/原qtav作者/性能凶残跨平台
- 2024-09-30 Qt音视频开发14-mpv读取和控制(疾病预防控制综合治理平台)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)