По состоянию на апрель 2015 года GStreamer 1.2, входящий в состав Raspbian, поддерживает OpenMAX с аппаратным ускорением кодирования H.264 через omxh264enc.
Я сделал несколько сравнительных сравнений:
- MacBook Pro (начало 2011 г.), двухъядерный процессор i7-2620M, 2,7 ГГц (Sandy Bridge) - 4 ГБ ОЗУ
- 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 с использованием GStreamer (аппаратное кодирование через OpenMAX) на Raspberry Pi 2 (откройте или загрузите изображение для полной информации):
Обновить:
Следуя предложению ecc29 об использовании метода масштабирования Ланцоша, я выполнил тест, добавив method=lanczos
к videoscale
. Процесс кодирования удвоился во времени, прыгнув примерно с 7 минут до 14 минут 37 секунд. Результат практически равен по качеству результату без метода (билинейный по умолчанию). Действительно, дефекты в основном происходят из-за аппаратного кодирования. Это явно артефакты сжатия.