Berapa kecepatan yang dapat saya harapkan dari pengkodean hardware-H264?

29

Saya menemukan artikel Wikipedia bahwa Broadcom GPU memiliki dukungan perangkat keras untuk encoding H.264 / AVC, tidak hanya de- coding.

Saya juga menemukan artikel di mana seseorang memberi contoh menggunakan ffmpeguntuk menghasilkan file video h264 / mp4. Ok, yang tujuan umum CPU dengan GPU khusus, sehingga tidak benar-benar yang mengejutkan.

Tetapi dibandingkan dengan PC desktop standar dengan Kartu Grafis rata-rata, akankah Raspberry Pi berpotensi menyandikan H.264 / AVC bahkan mungkin lebih cepat ? Jika pengguna desktop mengoptimalkannya ffmpegke Core-i5xxx dengan kartu grafis $ 150 Ati / Nvidia ... apakah kombinasi itu menawarkan sesuatu dalam cara "dukungan penyandian perangkat keras H.264"? Jika tidak, akankah Raspberry-Pi-ffmpeg yang diadopsi secara khusus menjadi lebih cepat? Jika ya, apakah sudah ada perbandingan kecepatan?

towi
sumber
Saya seharusnya tidak berpikir Raspberry Pi akan lebih cepat daripada PC desktop.
Jivings
5
Seseorang harus jelas melakukan tolok ukur dan menunjukkan beberapa hasil.
XTL
@XTL Bisakah Anda melakukannya? ;-)
towi
Ini adalah hasil yang sangat bagus..dapatkah Anda menambahkan transcoding audio ke perintah contoh?

Jawaban:

5

Saat ini, tampaknya masih belum ada perangkat lunak yang stabil untuk mengkodekan video h264 menggunakan perangkat keras, bahkan jika telah secara resmi diumumkan bahwa Raspberry Pi memang mendukung pengkodean perangkat keras h264. Jadi, kami tidak dapat melakukan tolok ukur untuk membandingkan kinerja dengan PC biasa .

Saya tidak tahu apakah seseorang sedang mengerjakan masalah ini, tetapi seorang pengembang dari libavtampaknya pesimistis mengintegrasikan modul semacam itu dalam libavproyek yang ada (lihat jawabannya pada 2 Desember, 09:23).

Saya akan senang melakukan benchmark ketika perpustakaan atau perangkat lunak mengizinkannya.

Morgan Courbet
sumber
Saya tidak tahu harus mulai dari mana, tetapi saya mungkin mau mencobanya. Saya selalu mencari alasan bagi saya untuk menggali libavcodec src, atau - tepatnya - x264.
towi
2
Pustaka GStreamer mampu menghubungkan ke chip Broadcom OpenMax API, dan yang tampaknya mampu melakukan pengkodean perangkat keras: gstreamer.freedesktop.org/releases/gst-omx/1.0.0.html
speedplane
25

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:

  1. MacBook Pro (Awal 2011) dual-core i7-2620M 2.7GHz (Sandy Bridge) - RAM 4GB
  2. 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 masih dari 720p video yang ditranskode menggunakan HandBrake (x264) pada MacBook Pro

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):

QuickTime X dari 720p video yang ditranskode menggunakan GStreamer (pengodean perangkat keras melalui OpenMAX) pada Raspberry Pi 2

Memperbarui:

Mengikuti saran ecc29 ini menggunakan Lanczos metode penskalaan saya melakukan tes menambahkan method=lanczosuntuk 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.

M. Rubio-Roy
sumber
Untuk kualitas gambar setelah transcoding GStreamer, faktor lain harus dipertimbangkan. Parameter yang berbeda untuk skala video akan mempengaruhi gambar sebelum gstreamer mengirimkannya ke omxh264enc. Videoscale menggunakan bilinear sebagai opsi default. Lanczos lebih baik tetapi terlalu lambat. Pengembang gstreamer sedang mengerjakan lebih banyak opsi untuk skala video, tetapi mereka belum dalam rilis stabil. Beberapa pola yang dihasilkan mungkin dapat membantu untuk membandingkan opsi yang berbeda:
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
Saya telah memperbarui pos dengan hasil lanczosmetode penskalaan.
M. Rubio-Roy
Berpikir untuk membeli 3 b +. Adakah pembaruan 3 setengah tahun kemudian? Pengkodean waktu-nyata mungkin sekarang?
akostadinov
1

GPU dalam RPi cukup gemuk. Saya telah membaca bahwa dalam hal penyandian, Anda dapat menyandikan 1080p @ 30fps. Pengkodean beberapa stream juga dimungkinkan. Dipercaya juga bahwa Anda dapat menyandikan video dengan cepat menggunakan RPi.

Tapi. Kartu grafis modern memiliki kemampuan untuk menjalankan seluruh penyandian pada GPU, yang merupakan keahlian GPU.

Jika saya harus mengukur pendapat pribadi. RPi tidak akan lebih cepat dari kartu grafis spec menengah. Tapi saya pikir itu akan jauh lebih cepat daripada yang Anda pikirkan. Mungkin bahkan mendekati 75% kecepatannya.

Saya tidak dapat menemukan perbandingan yang tersedia di mana pun.

Vincent P
sumber