繁体   English   中英

使用FFMPEG提取帧?

[英]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
  • 此示例仅从第一个视频流中获取所需的信息; 否则,它还会显示音频条目等。

  • 如示例所示,不需要其他进程,例如grepsedawk或类似的东西。

  • 如果要删除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.pngoutput_002.pngoutput_003.png等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM