使用ffmpeg编码高质量视频

Cak*_*ter 90 video ffmpeg video-encoding

我有一组视频帧保存为目录中的图像,我正在尝试将这些视频帧编码为高质量的视频,但是我尝试的每个设置和每种格式都会产生非常明显的伪像.

基本命令是这样的:

ffmpeg -r 25 -i %4d.png myvideo.mpg
Run Code Online (Sandbox Code Playgroud)

我已经尝试了minrate和maxrate标志.任何{mpg,avi,mov,flv}格式都可以.

有关设置的建议吗?最终文件大小不是问题.

Jas*_*n B 62

有几件事:

  • 您需要设置视频比特率.我从未使用过minrate和maxrate所以我不知道它们是如何工作的,但是通过使用-b开关设置比特率,我能够获得高质量的视频.你需要提出一个比特率,在压缩和视频质量之间提供良好的权衡.您可能需要对此进行试验,因为这完全取决于视频内容中的帧大小,帧速率和运动量.请记住,对于720x480,DVD平均大约为4-5 Mbit/s,因此我通常从那里开始并决定是否需要更多或更少,然后进行实验.例如,您可以添加-b 5000k到命令行以获得更多或更少的DVD视频比特率.

  • 您需要指定视频编解码器.如果不这样做,ffmpeg将默认为MPEG-1,这是一个相当老的MPEG-1并不能提供接近MPEG-4或H.264的压缩量.如果您的ffmpeg版本是使用libx264支持构建的,则可以指定-vcodec libx264为命令行的一部分.否则-vcodec mpeg4也会比MPEG-1做得更好,但不如x264好.

  • 还有许多其他高级选项可帮助您以最低比特率挤出最佳质量.看看这里的一些例子.

  • 恒定比特率对质量不利.使用恒定速率因子是优越的(它是x264操作模式之一).例如:`ffmpeg -i ... -c:a copy -c:v libx264 -crf 18 -preset veryslow ...`.18是CRF,质量损失很小,但比特率可能很低.如果您需要较小的文件大小,可以尝试更大的CRF值.如你所见,这很简单. (5认同)

jef*_*ff7 40

您需要指定-vb选项以增加视频比特率,否则您将获得产生较小视频但具有更多工件的默认值.

尝试这样的事情:

ffmpeg -r 25 -i %4d.png -vb 20M myvideo.mpg


小智 15

在创建视频之前,请确保PNG完全不透明

例如,使用imagemagick,给他们一个黑色的背景:

convert 0.png -background black -flatten +matte 0_opaque.png
Run Code Online (Sandbox Code Playgroud)

从我的测试来看,如果你用透明度提供ffmpeg PNG,那么没有比特率或编解码器足以使视频看起来很好


Jus*_*Boo 0

除非您进行某种后期处理工作,否则视频永远不会比原始帧更好。也就像翻书一样,如果关键帧之间有很大的“跳跃”,它会看起来很有趣。通常,关键帧之间需要足够的“补间”才能提供流畅的动画。华泰