Выбор кодека для транскодирования видео без интенсивной загрузки процессора
Я пытаюсь добиться транскодирования видео MKV / H264 в режиме реального времени на платформе низкого уровня (медленный процессор).
Используя следующую командную строку в качестве проводки для тестирования:
avconv -i test.mkv -c:v mjpeg -q:v 3 -c:a libmp3lame -f (codec) -y /dev/null
Я получаю следующие результаты: 37fps, используя rawvideo
кодек, 21fps с использованием mpeg4
кодек.
Поэтому я ищу "промежуточный" кодек, который обеспечил бы более быстрое сжатие. Мне не нужно слишком много степени сжатия, так как результирующие данные не будут храниться, а будут напрямую передаваться сервером UPnP (но, очевидно, не нужно насыщать мою сеть необработанным видео).
Любой совет?
С уважением.
1 ответ
Вы можете попробовать использовать кодек MPEG2
MPEG2 довольно быстро кодируется. Это должно работать -c:v mpeg2video -r 25 -b:v 8192k
увеличение битрейта должно дать более низкое управление скоростью и повысить скорость кодирования. Вы также можете попробовать -intra
опция, которая отключает оценку движения за счет значительно более высокого битрейта. Если этого недостаточно, должен быть параметр шага квантования, который вы можете использовать для ускорения кодирования за счет визуального качества.
Вы также можете попробовать более низкое разрешение H264 со сверхбыстрой предустановкой
Я не уверен, какой низкий уровень вы имеете в виду, когда говорите "низкий уровень", я успешно транскодирую в 720p H264 в режиме реального времени на процессоре Core 2 Duo 2 ГГц... так что я предоставлю это, если ваша идея низкого уровня конец похож на мою идею low-end:)
libx264
Кодек принимает предустановки для кодера, которые обменивают скорость кодирования на битрейт с постоянным визуальным качеством.
Вы можете попробовать самый быстрый пресет:
-c:v libx264 -preset ultrafast -tune zerolatency -profile high10 \
-bsf:v h264_mp4toannexb
(The -bsf:v
параметр необходим если вы собираетесь в стрим)
Вы также можете попробовать поиграть с -cbr
Параметр, он контролирует распределение битов и, следовательно, визуальное качество / битрейт. Значением по умолчанию является 23; 0 - без потерь, а 51 - худшее качество / самый низкий битрейт.
Разрешение играет большую роль в скорости кодирования, и я обнаружил, что видео h264 с более низким разрешением, которое было увеличено, выглядит сопоставимым с mpeg2, которое не было понижено (с гораздо более низкой скоростью передачи битов и, надеюсь, более высокой скоростью кодирования, не цитируйте меня на что:3).
Так что вы можете попробовать поиграть и с этим:
-filter:v scale=-1:480
Это изменит масштаб вашего видео до 480 строк в высоту и сохранит такое же соотношение сторон.
(Я просто сам настраиваю транскодирование в H264, здесь: транскодирование в реальном времени в H264+AAC в контейнере Matroska, если хотите посмотреть.)