2016-01-03 2 views
2

У меня есть кусок кода обработки видео в C, который кажется узким местом по скорости, с которой я могу читать байты из трубы ffmpeg.Быстрее ли с помощью libavformat над вызовом ffmpeg с popen?

Мне нужно декодирование в рамки rawvideo, предоставленные ffmpeg или потенциально libav *.

Есть ли большие накладные расходы в вызовах fread на добавленный подпроцесс ffmpeg по сравнению с использованием библиотек libav?

ответ

2

Здесь есть несколько аспектов. Во-первых, почему кажется, что ваше приложение является узким местом ввода данных из канала ffmpeg? Ответ, вероятно, довольно прост: поскольку ffmpeg занимает гораздо больше CPU (и, таким образом, является узким местом комбинации двух приложений). Если вы запустите | b, а a занимает намного больше ЦП, а затем с точки зрения b, вход от канала медленный. Это логично, потому что требуется больше времени. Нет никакого решения для этого, ffmpeg предположил, что взять больше CPU, потому что (в зависимости от того, какой кодек/разрешение и т. Д.), Обработка мультимедиа - это очень сложная задача.

Во-вторых, будет ли использовать API C вместо помощи на трубе? Это зависит от того, что вы делаете. Если вы используете ffmpeg для довольно простой задачи, например, чтение файла с диска без декомпрессии (например, несжатого видео/аудио), то да, накладные расходы на трубу довольно существенны. Если ffmpeg распакует видео H264/HEVC или VP9, ​​вы вряд ли увидите выигрыш от этого хода, или они, по крайней мере, будут небольшими (диапазон 1%), так как большинство времени тратится на декодирование видео. Копирование/передача данных почти ничтожно. Поэтому в этом случае вопрос: стоит ли 1%? Это вам решать.

Смежные вопросы