允许MEncoder使用更多的CPU

时间:2015-10-27 13:34:42

标签: bash mencoder

我正在使用MEncoder将大量的jpg图片组合成一个延时视频。我有两个主文件夹,每个文件夹大约有10个子文件夹,以便自动执行我正在运行的过程:

find . -type d -name img -exec sh -c '(cd {} && /Volumes/SAMSUNG/PedestrianBehaviour/BreakableBonds/jpg2avi.sh t*)' ';'

其中jpg2avi是MEncoder的设置。

mencoder 'mf://t00*.jpg' -mf fps=10 -o raw.avi -ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=2000 -o out.avi

为了并行化它,我在两个文件夹BreakableBonds和UnBreakableBonds中启动了这个命令。然而,每个过程仅使用约27%,因此总共略高于50%。有什么方法可以加速这个吗?这样每个过程占用约50%。 (我知道每个过程都不​​可能达到50%。)

1 个答案:

答案 0 :(得分:1)

根据您使用的视频编解码器(x264是一个不错的选择),一个编码应该能够使几个CPU内核饱和。我通常直接使用ffmpeg,因为mencoder的设计具有一些类似AVI的假设。

有关如何执行此操作,请参阅ffmpeg's wiki page

同样,我强烈建议在mkv或mp4容器中使用h.264,而不是avi容器中的任何东西。 avi中的h.264是一个hack,avi的常用编解码器是divx(h.263)。 h.264是向前迈出的一大步。

h.264用于视频mp3是什么用于音频:第一个编解码器“足够好”,而且就像CPU正在变得足够快以实时完成它,并且磁盘和网络能够处理产生高质量的文件大小。与ffmpeg as a frontend for libx264一起使用。

h.265(和vp9)都是比h.264更好的编解码器(就压缩效率而言),但是支持的范围要小得多,并且需要更多的CPU时间。如果要使用它们,请使用ffmpeg作为libx265或libvpx的前端。 x265正在大力发展,所以它可能有所改进,但几个月前,在相同的编码CPU时间内,x265在每比特率的质量上并没有超过x264。鉴于多的CPU时间,x265可以做得很好,并且以比x264更低的比特率制作外观漂亮的编码。

所有这3个编解码器都是多线程的,即使在快速设置下也可以使4个内核饱和。在较高的设置(每个块花费更多的CPU时间),你可以使至少16个核心饱和,我猜。我不确定,但我认为你可以在HD x265编码上有效利用64核,甚至更多核心。

在快速设置和高比特率下,gzip风格的熵编码最后阶段(即x264的CABAC)限制了您可以保持忙碌的CPU数量。它是一个串行任务,所以整个编码只能像一个CPU压缩最终比特流一样快。