2012-07-20 55 views
3

我正在使用ffmpeg将一组带有音轨的图像(bmp)转换为Web就绪视频。目标格式是h.264 mp4,webm和flv。 这是使用预建的zeranoe静态版本(http://ffmpeg.zeranoe.com/builds/)的Windows Azure特大型实例(8 proc)。ffmpeg:需要速度

假设我愿意牺牲原始速度的质量和尺寸。每种格式有哪些选项会产生最快的结果?

我的“基线”的命令看起来像这样(交换扩展的其他格式):

ffmpeg -y -i frames%5d.bmp -i audio.mp3 -r 23.97 out.mp4 

,如果需要,我可以改变输入到其他格式(JPG图像,AAC音频等)。

+0

这是更普遍的FFMPEG问题,而不是Azure问题。一个提示,但使用32位ffmpeg可执行文件。我遇到了64bit的问题,发现32bit的工作非常稳定。 – astaykov 2012-07-20 07:35:09

+0

你看过媒体服务吗? THese不会在一次请求中为您提供原始吞吐量,但会允许一些相当大规模的工作。 – BrentDaCodeMonkey 2012-07-20 12:35:38

+0

@bdcm我正在为每个用户构建一个自定义视频。我需要个人请求快速加速 – roufamatic 2012-07-20 14:09:32

回答

4

您改变任何格式的质量/编码速度平衡的主要“旋钮”是bitrate。在刚刚进行的测试中,使用默认设置(比特率〜900k)进行编码需要97秒的视频花费的时间少于将比特率调低至100k时的一半。输出视频要小得多,质量明显更差。

在你的情况下,从图像的到来,您也许可以从作为FFmpeg's encoding tips提到的关闭运动估计得到大大提高速度:

如果你的电脑不够快,可以加快在压缩压缩比的代价。您可以使用'-me zero'加速运动估计,'-g 0'完全禁用运动估计(您只有I帧,这意味着它与JPEG压缩差不多)。 [注意,更近的FFmpeg版本代替-me使用-me_method。]

在测试中,97秒的编码在秒完成了-g 0。压缩率较低,原始尺寸为63%,而默认设置为25%,但质量保持不变,与低比特率编码不同。

下面是我的快速测试的完整结果,时间是用于编码实时:
基线,27M MOV到MP4,码率〜900K:97S
-me_method zero:84S
-flags2 fast:84S
-b 500k:75S
-b 100k:43S
-g 0:20

-flags2 fast-b 100k-g 0:12S(输出看起来可怕

可能有其他特定格式的调整,但我不会从那些比上面列出的方法需要显著的加速..

1

这些图像的分辨率是多少?尽可能使用尽可能低的分辨率会使您获得更好的性能。还可以使用ffmpeg中的-threads选项以最佳方式使用8个内核。

+0

我无法控制分辨率(760x442)。 Ffmpeg默认添加了-threads 0,导致它在8 proc框中使用12个线程。我实际上通过使用-threads 8节省了第二次渲染时间。这是一个开始! – roufamatic 2012-07-20 16:40:25