Python 使用FFMPEG提取帧?
我正试图使用ffmpeg(或openCV-open to suggestions)和python编写代码,从视频文件中提取16帧,但我在想如何开始时遇到了很多困难。Python 使用FFMPEG提取帧?,python,opencv,video,ffmpeg,frame,Python,Opencv,Video,Ffmpeg,Frame,我正试图使用ffmpeg(或openCV-open to suggestions)和python编写代码,从视频文件中提取16帧,但我在想如何开始时遇到了很多困难。 我可以直接在python中使用ffmpeg命令行吗?如果有,是否有命令获取剪辑长度和帧速率?如何以相等的间隔拉动框架 任何帮助都将不胜感激!谢谢大家! 我可以使用ffmpeg附带的ffprobe获取元数据信息 模块子流程是一种在python之外使用工具并返回退出状态或检查输出的方法,如下面的示例所示。然后可以将python变量分配给
我可以直接在python中使用ffmpeg命令行吗?如果有,是否有命令获取剪辑长度和帧速率?如何以相等的间隔拉动框架
任何帮助都将不胜感激!谢谢大家! 我可以使用ffmpeg附带的ffprobe获取元数据信息 模块子流程是一种在python之外使用工具并返回退出状态或检查输出的方法,如下面的示例所示。然后可以将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'
我可以使用ffmpeg附带的ffprobe获取元数据信息 模块子流程是一种在python之外使用工具并返回退出状态或检查输出的方法,如下面的示例所示。然后可以将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方面的经验,但在我看来,它就像一个例子
如果有,是否有命令获取剪辑长度和帧速率?
对。使用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\u frame\u rate=
键,请将duration=
更改为nk=0
nk=1
- Python的人喜欢JSON格式,对吗?如果是这种情况,那么您可以将默认值的
-of=nw=1:nk=0更改为json的
-of
- 有关更多示例,请参见
ffmpeg -i -vf "select='not(mod(t\,10))'" -vsync vfr output_%03d.png
这将导致输出\u 001.png
,输出\u 002.png
,输出\u 003.png
,等等
我可以直接在python中使用ffmpeg命令行吗?
对。我没有Python方面的经验,但在我看来,它就像一个例子
如果有,是否有命令获取剪辑长度和帧速率?
对。使用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\u frame\u rate=
键,请将duration=
更改为nk=0
nk=1
- Python的人喜欢JSON格式,对吗?如果是这种情况,那么您可以将默认值的
-of=nw=1:nk=0更改为json的
-of
- 有关更多示例,请参见
ffmpeg -i -vf "select='not(mod(t\,10))'" -vsync vfr output_%03d.png
这将导致
output\u 001.png
,output\u 002.png
,output\u 003.png
,等等。谢谢!我在想类似的事情。。例如,我必须遵循我希望在循环中执行的命令行:“cmdline=“ffmpeg-I”+file+”-ss 00:00:%d-vframes 1 BPout%d.png“(frametimestamps[I],I)”我可以类似地调用“subprocess.check_output(cmdline)”来输出帧吗?您可以使用“check_output”或“call”。呼叫将返回退出状态以确定是否成功。谢谢!我在想类似的事情。。例如,我必须遵循我希望在循环中执行的命令行:“cmdline=“ffmpeg-I”+file+”-ss 00:00:%d-vframes 1 BPout%d.png“(frametimestamps[I],I)”我可以类似地调用“subprocess.check_output(cmdline)”来输出帧吗?您可以使用“check_output”或“call”。呼叫将返回退出状态以确定是否成功。非常感谢您的帮助!设法把一切都弄明白了!:)非常感谢您的回复!设法把一切都弄明白了!:)