Какую скорость можно ожидать от аппаратного кодирования H264?

29

Я споткнулся в Википедии статью о том , что Broadcom GPU имеет аппаратную поддержку для кодирующей H.264 / AVC, не только де -coding.

Я также нашел статью, в которой кто-то привел пример использования ffmpegвидеофайлов h264 / mp4. Хорошо, его общее назначение процессор со специализированным GPU, так что это на самом деле не сюрприз.

Но по сравнению со стандартным настольным ПК со средней видеокартой, Raspberry Pi потенциально может кодировать H.264 / AVC, может быть, даже быстрее ? Если пользователь настольного компьютера должен был оптимизировать свой компьютер ffmpegпод свою Core-i5xxx с графической картой Ati / Nvidia за 150 долларов ... предлагает ли эта комбинация что-либо в виде "аппаратной поддержки кодирования H.264"? Если нет, то будет ли специально принятый Raspberry-Pi-ffmpeg еще быстрее? Если да, сравнение скорости уже есть?

towi
источник
Я не должен думать, что Raspberry Pi будет быстрее, чем настольный ПК.
Jivings
5
Кто-то должен четко сделать тест и показать некоторые результаты.
XTL
@XTL Ты можешь сделать это? ;-)
towi
Это очень хороший результат. Не могли бы вы добавить транскодирование звука в пример команды?

Ответы:

5

На данный момент, похоже, еще нет стабильного программного обеспечения для кодирования видео h264 с использованием аппаратного обеспечения, даже если официально было объявлено, что Raspberry Pi поддерживает аппаратное кодирование h264. Таким образом, мы не можем сделать тест для сравнения производительности с обычным ПК .

Я не знаю, работает ли кто-то над этой темой, но разработчик, libavкажется, пессимистично настроен по поводу интеграции такого модуля в существующий libavпроект (см. Его ответ 2 декабря, 09:23).

Я буду рад сделать тест, когда библиотека или программное обеспечение позволяет это.

Морган Курбе
источник
Я понятия не имею, с чего начать, но, возможно, захочу попробовать. Я всегда искал причину, по которой мне нужно копаться в libavcodec src или, если быть точным - x264.
Towi
2
Библиотека GStreamer может подключаться к API-интерфейсу OpenMax для микросхем Broadcom, и, похоже, она способна выполнять аппаратное кодирование: gstreamer.freedesktop.org/releases/gst-omx/1.0.0.html
speedplane
25

По состоянию на апрель 2015 года GStreamer 1.2, входящий в состав Raspbian, поддерживает OpenMAX с аппаратным ускорением кодирования H.264 через omxh264enc.

Я сделал несколько сравнительных сравнений:

  1. MacBook Pro (начало 2011 г.), двухъядерный процессор i7-2620M, 2,7 ГГц (Sandy Bridge) - 4 ГБ ОЗУ
  2. RaspBerry Pi 2 Model B 900 МГц четырехъядерный процессор ARM Cortex-A7 - 1 ГБ ОЗУ

Образец файла: образец 60-х из фильма Алатристе (2006). Исходный файл 1080p и занимает 30 МБ. Я перекодировал файл в 720p. Все аудиодорожки были проигнорированы, чтобы сконцентрировать исследование на транскодировании видео.

Полученные результаты:

На (1), используя Handbrake (кодек x264), я транскодировал с настройками x264 veryslow и средней скоростью передачи 1145 кбит / с (1 проход), что привело к 7,7 МБ файла. Высокий профиль, уровень 4.0. Кодирование заняло 3 минуты 36 с использованием 4 потоков. Общий накопленный заряд процессора ручника ~ 380%. Качество видео было очень хорошим. Небольшие артефакты можно было наблюдать, а потерю деталей трудно заметить. Смотрите еще ниже.

В (2), используя GStreamer и omxh264enc (с аппаратным ускорением), я транскодировал с target-bitrate = 1145000 (1145kbps), control-rate = 1 (метод управления переменной скоростью передачи битов), что привело к файлу 6,9 МБ. Кодирование заняло 7 минут 4 с использованием 1 потока. Общая накопленная загрузка процессора gst-launch-1.0 ~ 100%. Качество видео заметно ухудшилось с хорошо видимыми артефактами и заметной потерей деталей. Смотрите еще ниже.

gst-launch-1.0 -v filesrc location=sample-1080p.mp4 ! decodebin ! videoconvert ! \
videoscale ! video/x-raw,width=1280,height=688 ! omxh264enc control-rate=1 \
target-bitrate=1145000 ! h264parse ! mp4mux ! \
filesink location=sample-720p-OMX-1145kbps.mp4

При использовании GStreamer с x264enc в качестве кодировщика общая суммарная загрузка ЦП gst-launch-1.0 достигает примерно 380%, что подтверждает тот факт, что omxh264enc фактически использует графический процессор. Кроме того, при x264enc в (2) время превышает 15 минут.

Вывод:

При довольно схожем размере файла время, затрачиваемое аппаратно-ускоренным кодером RaspBerry Pi 2 GPU, было почти в два раза больше, чем у программного кодера x264 на двухъядерном i7-2620M. Добавление транскодирования звука и мультиплексирования может немного сократить этот разрыв из-за практически неиспользуемого ЦП на RaspBerry Pi во время этого теста. Качество видео явно превосходило программный кодированный файл. Смотрите фото ниже.

Доступные параметры конфигурации для omxh264enc (предоставляемые gst-inspect-1.0) ограничены по сравнению с кодером x264, но дальнейшие эксперименты могут обеспечить лучшее качество.

Приложение:

Установка GStreamer и OpenMax из репозиториев Raspbian:

$ apt-get install libgstreamer1.0-0 libgstreamer1.0-0-dbg libgstreamer1.0-dev liborc-0.4-0 liborc-0.4-0-dbg liborc-0.4-dev liborc-0.4-doc gir1.2-gst-plugins-base-1.0 gir1.2-gstreamer-1.0 gstreamer1.0-alsa gstreamer1.0-doc gstreamer1.0-omx gstreamer1.0-plugins-bad gstreamer1.0-plugins-bad-dbg gstreamer1.0-plugins-bad-doc gstreamer1.0-plugins-base gstreamer1.0-plugins-base-apps gstreamer1.0-plugins-base-dbg gstreamer1.0-plugins-base-doc gstreamer1.0-plugins-good gstreamer1.0-plugins-good-dbg gstreamer1.0-plugins-good-doc gstreamer1.0-plugins-ugly gstreamer1.0-plugins-ugly-dbg gstreamer1.0-plugins-ugly-doc gstreamer1.0-pulseaudio gstreamer1.0-tools gstreamer1.0-x libgstreamer-plugins-bad1.0-0 libgstreamer-plugins-bad1.0-dev libgstreamer-plugins-base1.0-0 libgstreamer-plugins-base1.0-dev
$ gst-launch-1.0 --version
gst-launch-1.0 version 1.2.0
GStreamer 1.2.0

QuickTime X по-прежнему транслируется в формате 720p с помощью HandBrake (x264) на MacBook Pro (откройте или загрузите изображение для полной информации):

QuickTime X по-прежнему транслируется в формате 720p с помощью HandBrake (x264) на MacBook Pro

QuickTime X по-прежнему транслируется в видео 720p с использованием GStreamer (аппаратное кодирование через OpenMAX) на Raspberry Pi 2 (откройте или загрузите изображение для полной информации):

QuickTime X по-прежнему транслируется в видео 720p с помощью GStreamer (аппаратное кодирование через OpenMAX) на Raspberry Pi 2

Обновить:

Следуя предложению ecc29 об использовании метода масштабирования Ланцоша, я выполнил тест, добавив method=lanczosк videoscale. Процесс кодирования удвоился во времени, прыгнув примерно с 7 минут до 14 минут 37 секунд. Результат практически равен по качеству результату без метода (билинейный по умолчанию). Действительно, дефекты в основном происходят из-за аппаратного кодирования. Это явно артефакты сжатия.

М. Рубио-Рой
источник
Для качества изображения после транскодирования GStreamer следует учитывать еще один фактор. Различные параметры для видеомасштабов будут влиять на изображение, прежде чем gstreamer отправит его на omxh264enc. Videocale использует билинейный в качестве опции по умолчанию. Ланцос лучше, но он слишком медленный. Разработчики gstreamer работают над дополнительными опциями для видеомасштабов, но они еще не находятся в стабильной версии. Некоторые сгенерированные шаблоны могут быть полезны для сравнения различных вариантов:
ecc29
gst-launch-1.0 -e videotestsrc pattern=zone-plate kx2=80 ky2=45 num-buffers=1 ! video/x-raw, width=1920, height=1080 ! videoconvert ! videoscale method=lanczos ! video/x-raw, width=1280, height=720 ! avimux ! filesink location=lanczos_1280.avi
ecc29
Я обновил пост с результатами lanczosметода масштабирования.
М. Рубио-Рой
Думаю о покупке 3 б +. Любое обновление через 3 с половиной года? Возможно ли кодирование в реальном времени?
Акостадинов
1

Графический процессор в RPi довольно крутой. Я читал, что с точки зрения кодирования вы можете кодировать 1080p @ 30fps. Также возможно кодирование нескольких потоков. Также считается, что вы можете кодировать видео на лету, используя RPi.

Но. Современные видеокарты имеют возможность запускать весь код на графическом процессоре, в чем действительно хорош графический процессор.

Если бы я должен был оценить личное мнение. Было бы, что RPi не будет быстрее, чем видеокарта средней спецификации. Но я думаю, что это будет намного быстрее, чем вы думаете. Может быть, даже около 75% скорости.

Я не мог найти сравнение нигде.

Винсент П
источник