如何在ffmpeg中混合减少帧数

use*_*418 10 blending ffmpeg frame-rate frames reducing

我试图将一些文件转换为ProRes.转换的一个相当重要的部分是:

  • 将帧数从60减少到30
  • 将每2帧混合成一个,实现更流畅的运动.(一种简单的运动模糊)

我已经尝试过该-blend命令,但它没有被识别为命令.

-i source.mp4 -r 30 -vcodec prores_ks -profile:v 0 Output.mov
Run Code Online (Sandbox Code Playgroud)

如何在ffmpeg中混合减少帧?

llo*_*gan 6

简单的丢帧:

ffmpeg -i input.mov -r 30 output.mov
Run Code Online (Sandbox Code Playgroud)

使用过滤器对帧进行插值minterpolate

ffmpeg -i input.mov -vf minterpolate=fps=30 output.mov
Run Code Online (Sandbox Code Playgroud)
  • 请参阅上面的链接,因为还有许多其他选项。

使用过滤器对帧进行插值framerate

ffmpeg -i input.mov -vf framerate=fps=30 output.mov
Run Code Online (Sandbox Code Playgroud)
  • 请参阅上面的链接,因为还有许多其他选项。


小智 5

尝试

\n\n
ffmpeg -h\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者

\n\n
ffmpeg --help\n
Run Code Online (Sandbox Code Playgroud)\n\n

您将得到短暂的帮助。请阅读它。:)

\n\n

尝试

\n\n
ffmpeg -filters\n
Run Code Online (Sandbox Code Playgroud)\n\n

您将获得可用过滤器的列表

\n\n

尝试

\n\n
ffmpeg -help filter=name\n
Run Code Online (Sandbox Code Playgroud)\n\n

您将获得此过滤器的语法和参数

\n\n
\n\n

我已经需要做这样的事情,降低帧速率。\n如果你这样做

\n\n
ffmpeg -i "input" -r outputframerate [video encoding options...] [-y] "output"\n
Run Code Online (Sandbox Code Playgroud)\n\n

注意:括号[]中的内容是可选的。

\n\n

您将进行简单的帧速率更改,但可能会丢失输入帧。而且,这尤其是你不想得到的。

\n\n
\n\n

要在不丢失输入帧的情况下更改帧速率,您必须使用视频过滤器

\n\n

tblend过滤器混合连续的帧。如果源帧速率是目标帧速率的整数倍,则使用它的过滤器(例如:60\xe2\x86\x9230、75\xe2\x86\x9215、75\xe2\x86\x9225,...)

\n\n
ffmpeg -i "input" -vf tblend=all_mode=average [video encoding options...] -r outputframerate\xe2\x81\xbd\xc2\xb9\xe2\x81\xbe [-y] "output"\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x81\xbd\xc2\xb9\xe2\x81\xbe 如果我自己没有测试过这个过滤器,并且我确信输出帧速率必须在某个地方设置。tblend 过滤器没有 fps 参数。也许它只是混合了 2 个连续的帧?您应该检查这一点,并进行一些尝试?

\n\n
\n\n

还有另一个帧速率更改器,更适合与任何 I/O 帧速率一起使用:

\n\n

minterpolate使用运动插值进行帧速率转换。

\n\n

所以,输入:

\n\n
ffmpeg -i "input" -vf minterpolate=fps=outputframerate [video encoding options...] [-y] "output"\n
Run Code Online (Sandbox Code Playgroud)\n\n

其他插值参数具有足够好的默认值,以确保良好的混合。检查它们

\n\n
ffmpeg -help filter=minterpolate\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果您想在插值链中添加一些参数,则必须使用 \':\' 作为参数分隔符。\n假设您想使用运动插值模式= 混合,而不是默认运动补偿插值(mci),类型:

\n\n
ffmpeg -i "input" -vf minterpolate=fps=outputframerate:mi_mode=blend [video encoding options...] [-y] "output"\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果您想使用许多视频过滤器,则不得链接 -vf 选项。最后一个将覆盖之前的。您必须(如过滤器参数的“:”)使用“,”作为过滤器分隔符。前任 :

\n\n
ffmpeg -i "input" -vf minterpolate=fps=outputframerate:mi_mode=blend,filter2=param1=value1:param2=value2[...] [video encoding options...] [-y] "output"\n
Run Code Online (Sandbox Code Playgroud)\n\n

给定过滤器的顺序很重要。

\n\n
\n\n

事情已经完成了

\n\n

ffmpeg 版本 3.2.14-1~deb9u1 版权所有 (c) 2000-2019 FFmpeg 开发人员

\n