使用FFmpeg丢弃每个偶数或奇数帧?


14

有没有一种准确的方法来拍摄原始视频并从中提取一个只包含奇数帧甚至帧(按选择)的新视频?

例如:

我有400帧(0-399)的“blah.yuv”。我想创建包含1-399(1,3,5,7 ... 399)帧的“blahOdd.yuv”和包含0-398帧(0,2,4,6 ... 398)的“blahEven” )。

任何想法如何只使用FFmpeg?

Answers:


11

要准确工作,首先将视频转换为RAW YUV比特流(如果尚未):

ffmpeg -i input.mp4 -an -vcodec rawvideo -pix_fmt yuv420p rawbitstream.yuv

下一步:select过滤器采用表达式,其中n是帧编号。

ffmpeg -r 2 -s WxH -i rawbitstream.yuv -filter:v select="mod(n-1\,2)" \
-c:v rawvideo -r 1 -format rawvideo -pix_fmt yuv420p -an odd.yuv

ffmpeg -r 2 -s WxH -i rawbitstream.yuv -filter:v select="not(mod(n-1\,2))" \
-c:v rawvideo -r 1 -format rawvideo -pix_fmt yuv420p -an even.yuv

ffmpeg没有重复帧,您必须强制输入的帧速率的一半 - 因此您将“2”设置为输入,将“1”设置为输出。不要忘记将WxH替换为剪辑的实际尺寸,因为原始比特流没有包含此信息的标题。

除了上述内容,另一种可能性是添加setpts过滤器以设置输出的新时间戳。但要小心,因为它不准确地丢帧。这里,25是你想要的实际输出帧速率:

ffmpeg -i input.mp4 -filter:v select="mod(n-1\,2)",setpts="N/(25*TB)" \
-c:v rawvideo -r 12.5 -format rawvideo -pix_fmt yuv420p -an odd.yuv

ffmpeg -i input.mp4 -filter:v select="not(mod(n-1\,2))",setpts="N/(25*TB)" \
-c:v rawvideo -r 12.5 -format rawvideo -pix_fmt yuv420p -an even.yuv

您当然可以选择其他像素格式(任何一种ffmpeg -pix_fmts)。确保在读取文件时您知道像素大小和像素格式:

ffmpeg -f rawvideo -s:v 1280x720 -pix_fmt yuv420p input.yuv …

谢谢,对于新版本的FFMPEG,它应该是-vf而不是-filter:v。另外它应该是mod(n-1 \,2),因为n计数似乎从1开始,而帧计数从0开始(否则第一帧重复3次)。但是仍然存在一个问题,它会重复帧,而我想摆脱它们 - 例如,最后的剪辑只包含一半的帧。
马克

-vf是别的-filter:v。我现在无法可靠地测试它,但是当我回到我的机器上时会看到它。也许tinterlace过滤器可以做同样的事情?
slhck

我试过'-r 2 -i blah.yuv -r 1',但它显示错误选项帧率未找到。
马克

对不起..抓一点,这不起作用(不再?),仅适用于图像。
slhck 2013年

1
@AnmolSinghJaggi不,这只是丢帧,但我不确定它是如此确定(即,丢弃每个奇数帧)。它将基于时间码,这可能不准确。
slhck 2016年

2

如果您的ffmpeg是使用AviSynth标志构建的,那么我相信您可以传递一个.avs文件。

您可以通过在配置数据中运行ffmpeg和查找来--enable-avisynth进行检查。 --enable-AviSynth的

如果它在那里你就可以这样使用它:ffmpeg -i blahEven.avs blahEven.yuv

其中blahEven.avs无非是:

ffvideosource( “blah.yuv”)。SelectEven()

对于奇数帧,请使用SelectOdd()

有关更多优先用途,请参阅SelectEvery文档。


这是一个很好的选择,但正如我所提到的 - 我只能使用ffmpeg。原因是它是自动系统的一部分,只能创建.bat文件,不可能添加AVS。
马克

@Mark我在想,如果--enable-avisynth在那里,那就意味着AviSynth被内置到ffmpeg中,但我不确定。
路易斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.