2

Я использую FFmpeg для преобразования ряда файлов из MP4(H264 и AC3) в MP4(H264 и AAC) с помощью команды ffmpeg -i in.mp4 -c:v copy -c:a aac out.mp4

У меня 4-х ядерный процессор с гиперпоточностью, который показывает около 15% использования при конвертации. Файлы расположены на SSD, а активность диска составляет около 3 МБ / с, поэтому диск не является узким местом.

Когда кодирование начинается, процессор достигает максимальной частоты, но я не заметил, чтобы нагрузка на какое-либо из ядер превышала 50%.

FFmpeg плохо использует несколько ядер? Есть ли способ сделать кодирование быстрее?

2 ответа2

1

Единственное, что вы кодируете, это аудио, и большинство существующих библиотек аудио кодирования являются однопоточными. Это, скорее всего, потому, что аудиокодирование уже быстро работает как однопоточное приложение (по сравнению с кодированием видео в любом случае), и оно не использует слишком много памяти, поэтому на самом деле можно кодировать каждый файл с помощью одного потока и просто запустить до столько отдельных процессов, сколько необходимо для полного насыщения процессора. Факт в том, что многопоточность также не обязательно приводит к линейному улучшению производительности, и у вас, вероятно, есть причина, по которой разработчики большинства аудиокодеров не считают многопоточность высоким приоритетом. Мне известны только два аудиокодера, которые реализуют многопоточность - LAME MT для MP3 и pflac для FLAC - и оба являются отдельными модификациями, которые не являются частью основных кодовых баз проектов, из которых они получены.

Что касается использования вашего ЦП, с гиперпоточностью у вас есть 8 логических ядер, и одна восьмая из 100% составляет 12,5%, что не слишком далеко от вашего показателя использования 15%. Я не совсем уверен, почему ваша система не показывает 100% -ную нагрузку ни на одно из ядер, возможно, ОС перемещает процесс между ядрами для выравнивания нагрузки или что-то в этом роде.

Если вам нужно кодировать большое количество файлов, вы можете написать скрипт, который запускает несколько процессов FFmpeg для одновременного кодирования нескольких файлов. У меня очень мало опыта написания сценариев / программирования, но я знаю инструмент с открытым исходным кодом, который применяет ту же логику для оптимизации изображений: picopt. Поэтому, если вам нужен указатель на то, как это сделать в Python, вы можете взглянуть на исходный код picopt.

0

проверьте ffmpeg -hwaccels

с https://ffmpeg.org/ffmpeg.html

-hwaccels Список всех методов аппаратного ускорения, поддерживаемых в этой сборке ffmpeg.

-hwaccel_device[:stream_specifier] hwaccel_device (input,per-stream)
Select a device to use for hardware acceleration.

This option only makes sense when the -hwaccel option is also specified. Its exact meaning depends on the specific hardware

выбран метод ускорения.

vdpau
For VDPAU, this option specifies the X11 display/screen to use. If this option is not specified, the value of the DISPLAY environment

переменная используется

dxva2
For DXVA2, this option should contain the number of the display adapter to use. If this option is not specified, the default adapter

используется.

qsv
For QSV, this option corresponds to the values of MFX_IMPL_* . Allowed values are:

auto
sw
hw
auto_any
hw_any
hw2
hw3
hw4

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .