avconv в нескольких потоках

9

Можно ли запускать задания на нескольких процессорах или потоках, чтобы ускорить avconv?
Есть ли функция в процессе, если не интересно, почему?

Шубхам Чаудхари
источник

Ответы:

11

Вы выбрали опцию -threads в avconv. Самая безопасная настройка будет:

 -threads auto

но вы также можете установить целое число, если хотите немного поэкспериментировать. Современный FFmpeg (теперь стандарт в Ubuntu) устанавливает это auto по умолчанию, как показано в этом разделе справочных страниц ffmpeg-all:

threads integer (decoding/encoding,video)

Set the number of threads to be used, in case the selected
codec implementation supports multi-threading.

  Possible values:

     auto, 0
     automatically select the number of threads to set

 Default value is auto.

Обратите внимание на 2 важных момента:

  1. Этот параметр будет действовать только в том случае, если выбранный кодек поддерживает многопоточность
  2. Можно установить количество потоков для отдельных потоков, а не просто пытаться выполнить глобальную настройку потока
andrew.46
источник
1
Поправьте меня, если у вас есть источник обратного, но у меня сложилось впечатление, что Avconv и avplay по-прежнему используют -threads по умолчанию, если не указано иное. Системный монитор, кажется, поддерживает это.
Старейшина Гик
1
Я считаю, что это зависит от кодека, используемого для транскодирования. Это может быть формально проверено, что, безусловно, будет интересным испытанием. Информация, которую я мог найти по этому вопросу в Интернете, не особенно полезна. Другой проблемой может стать используемая версия FFmpeg, параметры потоков использовались по-разному в старых версиях ...
andrew.46
1
Да. Начиная с форка FFmpeg и avconv пошли в разных направлениях. Дальнейшие исследования показывают, что -threads auto используется по умолчанию в avconv, если вы используете один из предустановок в командной строке.
Старейшина Гик
3

Если вы выполняете транскодирование аудио для большого количества файлов, посмотрите на использование GNU Parallel. Он будет принимать список файлов в качестве входных данных и обрабатывать их параллельно в зависимости от количества ядер в вашей системе. Например, вот пример bash, который будет конвертировать музыку в аудиоформат opus параллельно, используя ffmpeg.

find ./* -depth -type f -name \*.ogg -o -name \*.flac -o -name \*.m4a -o -name \*.mp3 -o -name \*.ogg | parallel -j+0 --gnu nice -n 19 ffmpeg -i "{}" -acodec libopus "{.}.opus" -loglevel quiet
mmstick
источник