Python基于FFMPEG自动截图上传至imgbox(一)
本文最后更新于:2 年前
前言
玩PT的大概都知道发布的时候要上传mediainfo和截图,无论内外站都支持的图床之一就是imgbox。而无论是盒子还是本地,mediainfo或者截图上传都是比较繁琐枯燥的一件事情。那么,基于此,工具就来了。
这是一个比较系统的工具了,会用到一系列基础知识,所以打算做成一个系列。
本篇文章为第一篇:如何自动截取视频截图?
FFMPEG
FFMPEG是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。
FFMPEG在windows下安装教程链接。https://blog.csdn.net/Fish_cyy/article/details/105797337
总之FFMPEG的功能十分强大,无论是windows还是linux都可以使用。而今天我们主要说明如何使用该工具进行截图。废话不多说,直接上代码。
ffmpeg -ss {timestring} -y -i "{file}" "-f" "image2" "-frames:v" "1" "-c:v" "png" "-loglevel" "8" "{img_path}"
# 参数说明
# -ss................指定视频文件中截图的时间,01:00:00表示从视频文件的第一个小时截图
# -y.................表示覆盖,如果存在同名文件直接覆盖
# -i.................指定输入文件,使用双引号避免文件路径存在空格
# -f.................指定输出格式,image2表示输出图片
# -frames............指定截取几帧,这里指定为1
# -c.................编码格式,指定输出为png
# -loglevel..........日志等级相关参数,这里设置为8
# 最后img_path代表输出文件路径,包含文件名。
# 更多细节可以直接调用"ffmpeg -h"进行学习。
很显然的一个问题,ffmpeg需要指定截图时间,那么视频有多长,什么时候开始截取呢?我们需要知道这个视频的长度。mediainfo便是一个很好的工具,而且ffmpeg直接就封装了mediainfo,可以直接使用指令获取视频信息:
ffmpeg -i test.mkv
忽略中文乱码我们其实可以获取到视频得长度的。其实我们还有一个python模块可以干这件事。pymediainfo使用代码示范:
from pprint import pprint
from pymediainfo import MediaInfo
media_info = MediaInfo.parse("my_video_file.mp4")
for track in media_info.tracks:
if track.track_type == "Video":
print("Bit rate: {t.bit_rate}, Frame rate: {t.frame_rate}, "
"Format: {t.format}".format(t=track)
)
print("Duration (raw value):", track.duration)
print("Duration (other values:")
pprint(track.other_duration)
elif track.track_type == "Audio":
print("Track data:")
pprint(track.to_data())
得到的结果如下:
Bit rate: 3117597, Frame rate: 23.976, Format: AVC
Duration (raw value): 958
Duration (other values):
['958 ms',
'958 ms',
'958 ms',
'00:00:00.958',
'00:00:00;23',
'00:00:00.958 (00:00:00;23)']
Track data:
{'bit_rate': 236392,
'bit_rate_mode': 'VBR',
'channel_layout': 'L R',
'channel_positions': 'Front: L R',
'channel_s': 2,
'codec_id': 'mp4a-40-2',
'commercial_name': 'AAC',
'compression_mode': 'Lossy',
…
}
总结
我们现在知道了ffmpeg的截图命令,也知道了怎么获取一个视频文件的时长,可能形式需要转换一下。那么在已知视频文件路径的前提下,如何用python进行截图操作呢?预知后事,请听下回分解。