使用ffmpeg编码高质量的video
我有一组video帧保存为一个目录中的图像,我试图编码这些质量好的video,但是每一个设置和每一个格式,我尝试产生非常明显的工件。
基本的命令是这样的:
ffmpeg -r 25 -i %4d.png myvideo.mpg
我试过最小和最大的标志。 {mpg,avi,mov,flv}格式都可以。
任何build议的设置? 最终的文件大小不是问题。
几件事情:
-
您需要设置video比特率。 我从来没有使用minrate和maxrate,所以我不知道他们是如何工作,但通过使用
-b
开关设置比特率,我能够获得高品质的video。 您需要提供一个在压缩和video质量之间提供良好平衡的比特率。 您可能不得不尝试一下,因为这一切都取决于video内容的帧大小,帧率和运动量。 请记住,720×480的DVD平均约为4-5 Mbit / s,所以我通常从那里开始,决定是否需要更多或更less,然后只是试验。 例如,您可以在命令行中添加-b 5000k
以获得更多或更less的DVDvideo比特率。 -
您需要指定一个video编解码器。 如果你不这样做,ffmpeg会默认为MPEG-1,这是相当古老的,不会像MPEG-4或H.264那样提供接近的压缩量。 如果您的ffmpeg版本是使用libx264支持构build的,则可以将
-vcodec libx264
指定为命令行的一部分。 否则-vcodec mpeg4
也将比MPEG-1做得更好,但不如x264。 -
还有很多其他的高级选项可以帮助您以最低的比特率压缩最好的质量。 看看这里的一些例子。
您需要指定-vb选项来增加video比特率,否则您将获得默认值,该值会生成较小的video,但具有更多的人为因素。
尝试这样的事情:
ffmpeg -r 25 -i %4d.png -vb 20M myvideo.mpg
确保在创buildvideo之前,PNG是完全不透明的
例如imagemagick,给他们一个黑色的背景:
convert 0.png -background black -flatten +matte 0_opaque.png
在我的testing中,如果您为ffmpeg PNG提供透明度,则无需使用比特率或编解码器就可以使video看起来不错
除非你做了一些后期处理工作,否则video永远不会比原来的帧更好。 也就像翻书一样,如果你在关键帧之间有一个很大的“跳跃”,它会看起来很有趣。 通常在关键帧之间需要足够的“补间”,以提供平滑的animation。 HTH