FFmpeg низьке використання процесора


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 не використовує багато ядер? Чи є спосіб зробити кодування швидше?


Запустити кілька ffmpeg процеси одночасно.
llogan

Відповіді:


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

Це прискорювачі декодування відео. OP копіює відео, тому ніяка операція декодування не задіяна.
Gyan

Я думав, що він кодує аудіо з AC3 до AAC
Michael D.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.