我正在使用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%。)
答案 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一起使用。
所有这3个编解码器都是多线程的,即使在快速设置下也可以使4个内核饱和。在较高的设置(每个块花费更多的CPU时间),你可以使至少16个核心饱和,我猜。我不确定,但我认为你可以在HD x265编码上有效利用64核,甚至更多核心。
在快速设置和高比特率下,gzip风格的熵编码最后阶段(即x264的CABAC)限制了您可以保持忙碌的CPU数量。它是一个串行任务,所以整个编码只能像一个CPU压缩最终比特流一样快。