我正在使用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%是不可能的。)
发布于 2015-10-27 22:33:25
根据您使用的视频编解码器(x264是一个很好的选择),一个编码应该能够饱和多个CPU核心。我通常直接使用ffmpeg,因为mencoder是基于一些类似AVI的假设而设计的。
有关如何执行此操作的信息,请参阅ffmpeg's wiki page。
同样,我强烈建议在mkv或mp4容器中使用h.264,而不是使用avi容器中的任何内容。avi中的h.264是一个黑客,而avi通常的编解码器是divx (h.263)。h.264是一个很大的进步。
h.264适用于视频,就像mp3适用于音频:第一个足够好的编解码器出现时,CPU的速度已经足够快,并且磁盘和网络能够处理产生高质量的文件大小。将其与ffmpeg as a frontend for libx264一起使用。
h.265 (和vp9)都是比h.264更好的编解码器(就压缩效率而言),但它们的支持范围要小得多,而且需要更多的中央处理器时间。如果你想使用它们,可以使用ffmpeg作为libx265或libvpx的前端。x265正在进行大量的开发,所以它可能会有所改进,但在几个月前,考虑到同样的编码CPU时间,x265在每比特率的质量上没有击败x264。然而,考虑到更多的CPU时间,x265可以做得很好,并以比x264低得多的比特率制作出同样好看的编码。
所有3个编解码器都是多线程的,即使在快速设置下也可以饱和4个核心。在更高的设置下(每个块花费更多的CPU时间),我想你至少可以饱和16个内核。我不确定,但我认为你可以有效地利用64个核心,也许更多,在一个HD x265编码。
在快速设置和高比特率下,gzip风格的熵编码最终阶段(例如,用于x264的CABAC )限制了您可以保持忙碌的CPU数量。这是一个串行任务,所以整个编码速度只能与一个CPU压缩最终比特流的速度一样快。
https://stackoverflow.com/questions/33369454
复制相似问题