根据缩略图快速浏览视频
成品代码在最后 硬性要求python环境,下载好的ffmpeg 程序
借助ffmpeg获取视频截图
借助图片浏览软件 将指定图片移动到指定路径
借助python完成批量化操作
具体任务
ffmpeg:将输入视频第3s的截图放入指定路径
python下使用的代码:
exe = r'C:\Users\pc\Documents\ffmpeg-4.4-full_build\bin\ffmpeg.exe'
cmd = f'{exe} -loglevel quiet -y -ss 3 -i "{video_path}" -vframes 1 "{pic_path}" '
在视频同文件夹下且ffmpeg.exe路径加入环境变量cmd命令为
cmd = ffmpeg -loglevel quiet -y -ss 3 -i a.mp4 -vframes 1 a.jpg
参数说明:
-loglevel quiet 不显示提示信息 没有会显示很多视频信息
-y 是否覆盖 有同名文件存会删除原文件再写入 没有则会弹出提示
-ss 开始操作视频的时间 3 指从3秒开始
-i 后面跟输入文件
-vframe 需要的视频帧数
提示:使用绝对路径时最好加上双引号,否则文件名中有空格时会产生错误
python :将目录下视频生成截图,放置到一级目录下
待使用者完成挑选后匹配视频与照片 将对应视频移动到一个目录下
使用者:移动图片到指定目录下
推荐使用honeyview 设置快捷键
达到效果,按快捷键翻页与移动图片到指定路径
操作提示:用honeyview打开图片右击主界面 ->配置
设置热键:-> 键盘
设置指定路径 ->杂项->照片文件夹
注意照片文件夹能选两个,热键里要对应
使用提示:
exe变量中的路径换成自己的
输入的dir目录下有视频
file目录下无jpg照片
将生成的图片一部分放到file里
程序将会将,对应的视频,file里的图片,移动到dir目录下的match目录里
from os import *
import re,shutil
exe = r'C:\Users\pc\Documents\ffmpeg-4.4-full_build\bin\ffmpeg.exe'
def hi(sep='.'):
print(sep,end=' ')
def _back(args):
while True:
k = input('back? y or continue q:')
if 'y' in k:
for i in args:
renames(args[i], i)
break
elif 'q' in k:
break
def capture_frame(dir_path):
print('获取所有视频第三秒的一张截图')
for f in walk(dir_path):
for i in f[2]:
if 'mp4' in i:
hi()
video_path=path.join(f[0],i)
pic_path=path.join(dir_path,i[:-3]+'jpg')
def fun():
cmd = f'{exe} -loglevel quiet -y -ss 3 -i "{video_path}" -vframes 1 "{pic_path}" '
r=system(cmd)
fun()
input('截图完成 请挑选后回车:')
def match_pic_video(dir_path,file_path):
back=dict()
files=listdir(file_path)
def match_video(back):
for f in walk(dir_path):
hi(' ')
for i in f[2]:
a=path.join(f[0],i)
b=path.join(dir_path,'match',i)
if 'mp4' in i:
for index in files:
try:
index_re=re.findall('(.*?)\.jpg',index)[0]
i_re=re.findall('(.*?)\.mp4',i)[0]
except:
continue
if index_re == i_re:
back[a]=b
renames(a,b)
hi()
break
return back
back=match_video(back)
a=path.join(dir_path,'match')
if not path.exists(a):
makedirs(a)
for i in listdir(file_path):
if not 'jpg' in i:
continue
a=path.join(file_path,i)
b=path.join(dir_path,'match',i)
back[a]=b
try:
shutil.move(a,b)
except:
print('移动照片失败一次')
_back(back)
if __name__=='__main__':
dir_path=input('dir_path:')
file_path=input('file_path:')
capture_frame(dir_path)
match_pic_video(dir_path,file_path)