Возможно ли аппаратное ускорение кодирования h264?

12

Raspberry Pi будет выполнять аппаратное ускорение кодирования h264 при записи видео с платы камеры. Как я могу кодировать h264 (используя аппаратное ускорение), когда исходные изображения не поступают непосредственно с камеры?

Есть ли инструменты командной строки, которые поддерживают это?

Если нет, на какие API мне следует обратить внимание, чтобы сделать это возможным?

Сабольч
источник
Что ты кодируешь и как сейчас? - конвертируете ли вы видеофайлы, визуализируете ли они из изображений, звука и т. д.
Уилф
@Wilf Мне это вообще интересно, однако у меня есть настоящее приложение: кодирование промежутка времени прямо в видео. Я не могу использовать raspivid, потому что мне нужны низкие частоты кадров от 1/5 до 2 кадров в секунду. Кроме того, распиная автоэкспозиция переходит в колебания при моих условиях освещения (при слабом освещении). Поэтому я хочу использовать raspistill, но кодировать непосредственно в видео, чтобы результат не занимал слишком много места (как это было бы в формате JPEG). В качестве второго приложения я хочу опубликовать обработку каждого кадра в режиме реального времени с использованием Mathematica (это займет много времени процессора), а затем отправить их для кодирования в h264.
Сабольч
1
@ У меня есть частичное решение, которое, я думаю, должно быть возможным, чтобы сделать работу: идея примерно такая raspiyuv -o - | rpi-encode-yuv(примерно), где rpi-encode-yuvинструмент отсюда . Размер кадра жестко запрограммирован в этом инструменте, поэтому вам нужно изменить его в начале файла C и перекомпилировать. К сожалению, мне пока не удалось получить правильно выровненный вывод, так как raspiyuv, похоже, не кодируется размер кадра в вывод. Я получаю постепенно меняющуюся картину, которая в конечном итоге превращается в мусор. Все еще работаю над этим.
Сабольч

Ответы:

8

GStreamer включен в Raspbian и вместе со своим плагином OpenMAX будет использовать возможности аппаратного кодирования Raspberry Pi.

Смотрите эту ссылку для учебника о том, что вы ищете: https://www.raspberrypi.org/forums/viewtopic.php?t=72435

Если вы заинтересованы в транскодировании, я только что опубликовал ответ на другой вопрос, который может вас заинтересовать: какую скорость можно ожидать от аппаратного кодирования H264?

М. Рубио-Рой
источник
Спасибо! Я не могу проверить это прямо сейчас, но приму заранее, основываясь на вашем уроке.
Сабольч
1

Похоже, компилируя ffmpeg самостоятельно, на RPi3B + вы можете получить

КОДИРОВАНИЕ ВЫСОКО-КОМПЛЕКСНОЙ ВИДЕО 30 ФПС ИЗ 1920 x 1080 JPEG ПОСЛЕДОВАТЕЛЬНОСТЬ ИЗОБРАЖЕНИЯ - ЗНАЧИТЕЛЬНАЯ ДЕТАЛЯ И ДЕТАЛИ ВНУТРЕННЕГО КАДРА - НАСТРОЙКИ ВЫСОКОГО КАЧЕСТВА:

Программная кодировка H.264 (CPU): 2,6 FPS (в 11,5 раз медленнее, чем в реальном времени)

Аппаратное кодирование H.264 (GPU): 6,3 FPS (в 4,8 раза медленнее, чем в реальном времени)

КОДИРОВАНИЕ ВЫСОКО-КОМПЛЕКСНОЙ ВИДЕО 30 К / С ИЗ 640 X 480 JPEG ПОСЛЕДОВАТЕЛЬНОСТЬ ИЗОБРАЖЕНИЯ - ДЕТАЛИ ДВИЖЕНИЯ И ВНУТРЕННЯЯ ЧАСТЬ - НАСТРОЙКИ ВЫСОКОГО КАЧЕСТВА:

Программная кодировка H.264 (ЦП): 18 кадров в секунду (в 1,7 раза медленнее, чем в реальном времени)

Аппаратное кодирование H.264 (GPU): 38 кадров в секунду (в 1,3 раза быстрее, чем в режиме реального времени)

Сценарий, помогающий добиться всего этого, находится в ветке форума .

akostadinov
источник