ffmpeg:从视频中提取图像及其帧号?

ffmpeg:从视频中提取图像及其帧号?,ffmpeg,Ffmpeg,我正在从一个(可变帧率).avi文件中提取图像 ffmpeg -i movie.avi -r 25 %05d.png (-r选项应等同于过滤器-vf='fps=fps=25'),但现在希望知道每个生成图像对应的原始视频流中的帧编号。有没有一种简单的方法可以做到这一点 ffmpeg -i movie.avi -vsync 0 %05d.png 不会复制或删除任何帧,因此每个帧序列号都应该与视频中的索引相对应。我找到了一些方法来实现我想要的,这不是一个简单的方法。使用“showinfo”过滤器,

我正在从一个(可变帧率).avi文件中提取图像

ffmpeg -i movie.avi -r 25 %05d.png
-r
选项应等同于过滤器
-vf='fps=fps=25'
),但现在希望知道每个生成图像对应的原始视频流中的帧编号。有没有一种简单的方法可以做到这一点

ffmpeg -i movie.avi -vsync 0 %05d.png
不会复制或删除任何帧,因此每个帧序列号都应该与视频中的索引相对应。

我找到了一些方法来实现我想要的,这不是一个简单的方法。使用“showinfo”过滤器,可以获取帧相对于源文件的位置,即运行

ffmpeg -i movie.avi -filter:v 'showinfo' output.avi
我会举个例子

[Parsed_showinfo_1@0x7ffaebd01bc0]n:0 pts:0 pts_time:0 pos:630548 fmt:yuv420p sar:1/1 s:1280x720 i:p iskey:0 type:p校验和:B4E5E664平面校验和:[6B3569DD 72B2AE10 31F8CE68]平均值:[76 111 155]stdev:[13.1 3.8.7]

其中“pos:630548”是源文件中第一帧的位置。给定源文件中哪个位置对应于哪个帧的信息,就可以这样做

ffmpeg -i movie.avi -filter:v "fps=fps=25, showinfo" %05d.png > output.txt 2>&1
它像以前一样提取图像,但也给出了提取帧在输入文件中的位置,并且可以从这两个信息中拼凑出从提取帧到输入文件中帧的映射

然而,我认为这个解决方案不能称为“简单”(或漂亮)

编辑:按照@Mulvya的建议,如果您改为运行
ffmpeg-i movie.avi-filter:v'showinfo'output.avi
提取原始视频中帧的位置,您可以节省额外的步骤

ffmpeg -i movie.avi -filter:v "showinfo, fps=fps=25, showinfo" %05d.png > output.txt 2>&1
这将同时发出原始视频流和过滤视频流的showinfo,例如(原始视频流对应于以
Parsed\u showinfo\u 0
开头的行,过滤视频流对应于以
Parsed\u showinfo\u 2
开头的行)


是的,但是如果我指定“-r 25”选项,我需要提取的帧的帧号。您可能还需要在fps筛选器之前插入showinfo。如果fps删除了一些帧,那么它们的信息将永远不会在fps后显示。然后必须检查数据包大小,以查看位置序列中是否存在间隙。如果执行两次提取(您的和我的),则可以按顺序比较文件大小序列,以识别丢弃和重复。fps的目的是丢弃帧,以达到给定的帧速率。我不明白你在说什么。现在我明白你在说什么了(我想):使用
-filter:v“showinfo,fps=fps=25,showinfo
在使用fps过滤器之前和之后发出showinfo输出,相互交错。这样你就节省了一次ffmpeg的执行。
[Parsed_showinfo_0 @ 00a38820] n:   0 pts:      0 pts_time:0       pos:      508 fmt:pal8 sar:0/1 s:320x200 i:P iskey:1 type:I checksum:CF3AE73F plane_checksum:[CF3AE73F] mean:[117] stdev:[48.3]
[Parsed_showinfo_0 @ 00a38820] n:   1 pts:      1 pts_time:0.0285362 pos:    26710 fmt:pal8 sar:0/1 s:320x200 i:P iskey:0 type:P checksum:CF3AE73F plane_checksum:[CF3AE73F] mean:[117] stdev:[48.3]
[Parsed_showinfo_2 @ 00a38ca0] n:   0 pts:      0 pts_time:0       pos:      508 fmt:pal8 sar:0/1 s:320x200 i:P iskey:1 type:I checksum:CF3AE73F plane_checksum:[CF3AE73F] mean:[117] stdev:[48.3]
[Parsed_showinfo_0 @ 00a38820] n:   2 pts:      2 pts_time:0.0570725 pos:    31680 fmt:pal8 sar:0/1 s:320x200 i:P iskey:0 type:P checksum:512EEB5E plane_checksum:[512EEB5E] mean:[117] stdev:[48.2]