[英]extracting frames using FFMPEG?
我正在尝试使用ffmpeg(或openCV-可以接受建议)和python编写代码从视频文件中提取16帧图像,但是在弄清楚如何入门时遇到了很多麻烦。
我可以直接在python中使用ffmpeg命令行吗? 如果是这样,是否有命令获取片段的长度和帧速率? 如何以相等的间隔拉框架?
任何帮助,将不胜感激! 谢谢!
我可以使用ffmpeg附带的ffprobe获取元数据信息。
Module Subprocess是一种使用python外部工具并返回退出状态或检查Output的方式,如下面的示例所示。 然后,您可以将python变量分配给ffprobe的解析输出。 使用shell = True存在安全问题。 这至少可以帮助您入门,并且您可以找出避免以后使用它的方法。
import subprocess
dur_check = subprocess.check_output('ffprobe -v error -show_format We\ Code\ Hard.mp4 | grep duration')
duration = dur_check.split('=')[1]
哪个将返回:
'192.631667'
然后,fps有所不同。
fps_check = subprocess.check_output('ffprobe We\ Code\ Hard.mp4 2>&1 | grep fps',shell=True)
fps = fps_check.split(' ')[4].strip()
哪个返回:
'29.97 fps'
我可以直接在python中使用ffmpeg命令行吗?
是。 我没有使用Python的经验,但是tink3r的答案对我来说就像一个例子。
如果是这样,是否有命令获取片段的长度和帧速率?
是。 使用ffprobe
。
$ ffprobe -v error -select_streams v:0 -show_entries stream=duration,avg_frame_rate -of default=nw=1:nk=0 input.mp4
avg_frame_rate=24/1
duration=888.000000
此示例仅从第一个视频流中获取所需的信息; 否则,它还会显示音频条目等。
如示例所示,不需要其他进程,例如grep
, sed
, awk
或类似的东西。
如果要删除avg_frame_rate=
和duration=
键,则将nk=0
更改为nk=1
。
Python人喜欢JSON格式,对吗? 如果是这种情况,则可以将-of default=nw=1:nk=0
更改为-of json
。
有关更多示例,请参见FFmpeg Wiki:FFprobe技巧 。
如何以相等的间隔拉框架?
您可以使用选择过滤器 。 每十秒钟选择一帧的示例:
ffmpeg -i -vf "select='not(mod(t\,10))'" -vsync vfr output_%03d.png
这将导致output_001.png
, output_002.png
, output_003.png
等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.