我提取(可变帧率)图像的.avi文件与ffmpeg:从视频中提取图像及其帧数?
ffmpeg -i movie.avi -r 25 %05d.png
(该-r
选项应该是相当于过滤-vf='fps=fps=25'
),但现在想知道的原始视频帧数流每个生成的图像对应。有没有简单的方法来做到这一点?
我提取(可变帧率)图像的.avi文件与ffmpeg:从视频中提取图像及其帧数?
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 checksum:B4E5E664 plane_checksum:[6B3569DD 72B2AE10 31F8CE68] mean:[76 111 155] stdev:[ 13.1 3.8 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_showinfo_0
线,经过滤的流对应于开始Parsed_showinfo_2
线)
[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]
您也可以在fps过滤器之前插入showinfo。如果fps下降一些帧,那么他们的信息将永远不会显示在后fps。然后将不得不检查数据包大小,以查看位置系列中是否存在空白。 – Mulvya
如果您执行两次提取 - 您的和我的 - 然后您可以按顺序比较一系列文件大小以识别丢弃和重复。 – Mulvya
fps *的目的是*丢帧,达到给定的帧率。我不明白你在说什么。 – BlenderBender
是,但我想被提取的那些帧的帧号码,如果我指定“-r 25 “ 选项。 – BlenderBender