Я использую ffmpeg libx264 для кодирования экрана 720p, снятого с x11, в реальном времени с частотой кадров 30. Когда я использую параметр -tune zerolatency, среднее время кодирования на кадр может достигать 12 мс. с базовой линией профиля.
Изучив исходный код ffmpeg x264, я обнаружил, что ключевым параметром, приводящим к такому длительному времени кодирования, является нарезанные потоки, которые включаются с помощью -tune с нулевой задержкой. После отключения с помощью -x264-params sliced-threads=0 время кодирования может составлять всего 2 мс.
А при отключенных нарезанных потоках загрузка ЦП будет составлять 40%, а при включении — только 20%.
Может ли кто-нибудь объяснить подробности об этой нарезанной нитью? Особенно при кодировании в реальном времени (предположим, что кадры не буферизуются для кодирования. Кодируйте только при захвате кадра).
preset
по умолчанию? Что произойдет, если вы используете-preset ultrafast
? - person aergistal   schedule 10.11.2015ffmpeg
иlibx264
и на какой ОС/ЦП. Кроме того, как вы измеряете? - person aergistal   schedule 10.11.2015x264/doc/threads.txt
говорит, что части кодировщика являются последовательными, а многопоточность на основе срезов плохо масштабируется. Поскольку у вас 8 ядер, я думаю, что он порождает 8 потоков срезов. Вы можете переопределить--threads 4
или--slices
/--slices-max
и посмотреть, что произойдет. Это похоже на вашу проблему: mailman.videolan.org/pipermail /x264-devel/2010-April/ Я не думаю, что дело в планировщике, у вас новое ядро. - person aergistal   schedule 11.11.2015