我正在使用ffmpeg libx264 对从x11实时捕获的720p屏幕进行编码,帧率为30。当我使用-tune zerolatency参数时,使用基本配置文件时每帧的平均编码时间可以长达12毫秒。
经过对ffmpeg x264源代码的研究,我发现导致这种长时间编码的关键参数是启用了的sliced-threads,而这是由-tune zerolatency启用的。通过使用-x264-params sliced-threads=0禁用后,编码时间可以降至2毫秒。
而且,在禁用sliced-threads的情况下,CPU使用率将为40%,而启用时仅为20%。
有人能详细解释一下这个sliced-thread吗?特别是在实时编码中(假设没有缓冲帧要编码,只有在捕获到画面时才进行编码)。
经过对ffmpeg x264源代码的研究,我发现导致这种长时间编码的关键参数是启用了的sliced-threads,而这是由-tune zerolatency启用的。通过使用-x264-params sliced-threads=0禁用后,编码时间可以降至2毫秒。
而且,在禁用sliced-threads的情况下,CPU使用率将为40%,而启用时仅为20%。
有人能详细解释一下这个sliced-thread吗?特别是在实时编码中(假设没有缓冲帧要编码,只有在捕获到画面时才进行编码)。
preset
吗?如果你使用-preset ultrafast
会发生什么? - aergistalffmpeg
和libx264
,以及在哪个操作系统/ CPU 上?另外,您如何进行测量? - aergistalx264/doc/threads.txt
表示编码器的某些部分是串行的,基于切片的线程不会很好地扩展。由于您有 8 个核心,我认为它会生成 8 个切片线程。您可以覆盖--threads 4
或--slices
/--slices-max
,然后查看发生了什么。这类似于您的问题:https://mailman.videolan.org/pipermail/x264-devel/2010-April/007115.html 我不认为这是调度程序的问题,您的内核是最新的。 - aergistal