Pada April 2015 GStreamer 1.2 yang termasuk dalam Raspbian mendukung perangkat keras OpenMAX yang mempercepat pengkodean H.264 melalui omxh264enc.
Saya telah melakukan beberapa pembandingan pembandingan:
- MacBook Pro (Awal 2011) dual-core i7-2620M 2.7GHz (Sandy Bridge) - RAM 4GB
- RaspBerry Pi 2 Model B 900MHz quad-core ARM Cortex-A7 CPU - RAM 1GB
File sampel: Sampel 60-an dari film Alatriste (2006). File asli adalah 1080p dan membutuhkan 30MB. Saya mentranskodekan file ke 720p. Semua trek audio diabaikan untuk memusatkan studi pada transcoding video.
Hasil:
Pada (1), menggunakan Handbrake (x264 codec) saya ditranskode dengan x264-settings veryslow dan bitrate 1145kbps (1-pass) rata-rata yang menghasilkan file 7,7MB. Profil Tinggi, level 4.0. Pengkodean berlangsung 3 menit 36 menggunakan 4 utas. Total akumulasi biaya CPU dari rem tangan ~ 380%. Kualitas video sangat bagus. Artefak kecil bisa diamati dan hilangnya detail tidak mudah diamati. Lihat masih di bawah.
Pada (2), menggunakan GStreamer dan omxh264enc (akselerasi perangkat keras) Saya mentranskodekan dengan target-bitrate = 1145000 (1145kbps), kontrol-rate = 1 (metode kontrol bitrate variabel) yang menghasilkan file 6,9MB. Pengkodean mengambil 7 menit 4s menggunakan 1 utas. Total biaya CPU terakumulasi dari gst-launch-1.0 ~ 100%. Kualitas video terasa menurun dengan artefak yang terlihat jelas dan kehilangan detail yang mudah diamati. Lihat masih di bawah.
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
Ketika menggunakan GStreamer dengan x264enc sebagai encoder, total biaya CPU terakumulasi dari gst-launch-1.0 mencapai sekitar 380%, yang mendukung fakta bahwa omxh264enc benar-benar menggunakan GPU. Juga, dengan x264enc di (2), waktu melampaui 15 menit.
Kesimpulan:
Untuk ukuran file yang hampir sama, waktu yang dihabiskan oleh RaspBerry Pi 2 GPU encoder hardware-akselerasi hampir dua kali lipat dari perangkat lunak x264 encoder pada dual core i7-2620M. Menambahkan transcoding audio dan multiplexing dapat menutup sedikit celah ini karena sebagian besar CPU yang tidak terpakai pada RaspBerry Pi selama pengujian ini. Kualitas video jelas lebih unggul pada file yang disandikan perangkat lunak. Lihat gambar di bawah.
Opsi konfigurasi yang tersedia untuk omxh264enc (diekspos oleh gst-inspect-1.0) terbatas dibandingkan dengan encoder x264 tetapi percobaan lebih lanjut dapat memberikan kualitas yang lebih baik.
Mencaplok:
Instalasi GStreamer dan OpenMax dari repositori 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 masih dari 720p video yang ditranskode menggunakan HandBrake (x264) pada MacBook Pro (buka atau unduh gambar untuk detail lengkap):
QuickTime X dari 720p video yang ditranskode menggunakan GStreamer (pengodean perangkat keras melalui OpenMAX) pada Raspberry Pi 2 (buka atau unduh gambar untuk detail lengkap):
Memperbarui:
Mengikuti saran ecc29 ini menggunakan Lanczos metode penskalaan saya melakukan tes menambahkan method=lanczos
untuk videoscale
. Proses penyandian berlipat ganda dalam waktu, melompat dari sekitar 7 menit ke 14 menit 37s. Hasilnya hampir sama dalam kualitas dengan yang tanpa metode (bilinear default). Memang, cacat terutama berasal dari proses pengkodean dalam perangkat keras. Mereka jelas artefak kompresi.