2

Я пытаюсь добиться транскодирования видео 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 ответ1

0

Вы можете попробовать использовать кодек 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

(Параметр -bsf:v необходим для потоковой передачи)

Вы также можете попробовать поиграть с параметром -cbr , он контролирует распределение битов и, следовательно, визуальное качество / битрейт. Значением по умолчанию является 23; 0 - без потерь, а 51 - худшее качество / самый низкий битрейт.

Разрешение играет большую роль в скорости кодирования, и я обнаружил, что видео h264 с более низким разрешением, которое было увеличено, выглядит сопоставимым с mpeg2, которое не было понижено (с гораздо более низкой скоростью передачи битов и, надеюсь, более высокой скоростью кодирования, не цитируйте меня на что:3).

Так что вы можете попробовать поиграть и с этим:

-filter:v scale=-1:480

Это изменит масштаб вашего видео до 480 строк в высоту и сохранит такое же соотношение сторон.

(Я просто сам настраиваю транскодирование в H264, здесь: транскодирование в реальном времени в H264+AAC в контейнере Matroska, если хотите посмотреть.)

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