Video 使用FFMPEG选择视频滤波器,输入为-ss
我目前正在使用一个ffmpeg命令,比如说,我想在视频中选择(比如)6到8秒之间的非常特殊的视频帧:Video 使用FFMPEG选择视频滤波器,输入为-ss,video,ffmpeg,Video,Ffmpeg,我目前正在使用一个ffmpeg命令,比如说,我想在视频中选择(比如)6到8秒之间的非常特殊的视频帧: ffmpeg -t 10 -i test/timer.mp4 -ss 6 -vf "select=eq(ceil(n * 1 / 29.97) + 1\, ceil((n+1) * 1 / 29.97)) * lt(n\, 8 * 29.97)" tmp/%07d.png 但是,由于-ss位于-i之后,这使得ffmpeg对整个视频的解码时间长达6秒。如何更改此命令,使其仍然
ffmpeg
-t 10
-i test/timer.mp4
-ss 6
-vf "select=eq(ceil(n * 1 / 29.97) + 1\, ceil((n+1) * 1 / 29.97)) * lt(n\, 8 * 29.97)"
tmp/%07d.png
但是,由于-ss
位于-i
之后,这使得ffmpeg对整个视频的解码时间长达6秒。如何更改此命令,使其仍然基于绝对时间戳对视频进行视频过滤?比如说,
ffmpeg
-ss 6
-t 4
-i test/timer.mp4
-vf "select=eq(ceil(n * 1 / 29.97) + 1\, ceil((n+1) * 1 / 29.97)) * lt(n\, 8 * 29.97)"
tmp/%07d.png
不等效,因为n
现在指的是视频中6s后开始的帧编号。这最终会选择不同的帧
当在输入视频上使用
-ss
时,是否可以引用输入视频的绝对时间戳或帧号?也许您可以使用其他变量,如t
(PTS-time)。您可能需要使用start\t
等进行减法,以获得从零开始的时间。有关选择过滤器可用的所有变量,请参见
如果您选择了一个连续的帧范围,那么过滤器可能更容易使用。您可以添加
-copyts
来传递源时间戳,但您将无法使用n
来引用馈送到过滤器的帧索引
假设恒定速率为29.97视频流,则使用
ffmpeg
-ss 6 -to 10
-copyts
-i test/timer.mp4
-vf "select='trunc(t+1001/30000+TB)-trunc(t)'" -vsync 0
tmp/%07d.png
我使用了29.97的精确有理值。您是否试图选择其表示不跨越秒边界的帧?@Gyan close-在本例中,我想要绝对表示不跨越秒边界的帧。更一般地说,我想以一种非常具体的方式将样本减少到某个fps。我尝试了
start\u t
和t
,但在-I
之前使用-ss
时,似乎start\u t
总是0。我并不是想选择一个连续的帧范围,更像是以一种非常特殊的方式在某个fps上选择帧。@mwlon我明白了,如果使用-copyts,有什么区别吗?关于fps,fps、帧速率或帧步过滤器是否有用?