Kể từ tháng 4 năm 2015, GStreamer 1.2 có trong Raspbian hỗ trợ phần cứng OpenMAX tăng tốc mã hóa H.264 thông qua omxh264enc.
Tôi đã thực hiện một số so sánh điểm chuẩn:
- MacBook Pro (đầu năm 2011) lõi kép i7-2620M 2.7GHz (Sandy Bridge) - RAM 4GB
- Rasp BlackBerry Pi 2 Model B CPU lõi tứ ARM Cortex-A7 900 MHz - RAM 1GB
Tệp mẫu: mẫu 60s từ bộ phim Alatriste (2006). Tệp gốc là 1080p và mất 30 MB. Tôi đã chuyển mã tập tin thành 720p. Tất cả các bản âm thanh đã bị bỏ qua để tập trung nghiên cứu về chuyển mã video.
Các kết quả:
Trên (1), sử dụng Handbrake (codec x264) tôi đã chuyển mã với các cài đặt x264 rất chậm và tốc độ bit trung bình 1145kbps (1-pass) dẫn đến tệp 7,7 MB. Hồ sơ cao, cấp 4.0. Việc mã hóa mất 3 phút 36 giây bằng 4 luồng. Tổng phí CPU tích lũy của phanh tay ~ 380%. Chất lượng video rất tốt. Các hiện vật nhỏ có thể được quan sát và mất chi tiết không dễ quan sát. Xem vẫn dưới đây.
Vào ngày Việc mã hóa mất 7 phút 4s sử dụng 1 luồng. Tổng phí CPU tích lũy của gst-launch-1.0 ~ 100%. Chất lượng video bị suy giảm rõ rệt với các vật phẩm có thể nhìn thấy rõ và dễ bị mất chi tiết. Xem vẫn dưới đây.
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
Khi sử dụng GStreamer với x264enc làm bộ mã hóa, tổng phí CPU tích lũy của gst-launch-1.0 lên tới khoảng 380%, điều này hỗ trợ thực tế là omxh264enc thực sự sử dụng GPU. Ngoài ra, với x264enc trong (2), thời gian vượt quá 15 phút.
Phần kết luận:
Đối với kích thước tệp khá giống nhau, thời gian dành cho bộ mã hóa GPU Rasp BlackBerry Pi 2 được tăng tốc phần cứng gần gấp đôi so với bộ mã hóa phần mềm x264 trên lõi kép i7-2620M. Việc thêm chuyển mã âm thanh và ghép kênh có thể thu hẹp một chút khoảng cách này do CPU không được sử dụng nhiều trên Rasp Blackberry Pi trong quá trình thử nghiệm này. Chất lượng video rõ ràng là vượt trội trên tệp được mã hóa phần mềm. Xem ảnh tĩnh bên dưới.
Các tùy chọn cấu hình có sẵn cho omxh264enc (được hiển thị bởi gst-tests-1.0) bị giới hạn so với bộ mã hóa x264 nhưng thử nghiệm thêm có thể cung cấp chất lượng tốt hơn.
Phụ lục:
Cài đặt GStreamer và OpenMax từ kho lưu trữ của 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
Phần mềm chuyển mã video 720p vẫn được chuyển mã bằng HandBrake (x264) trên MacBook Pro (mở hoặc tải xuống hình ảnh để biết chi tiết đầy đủ):
QuickTime X vẫn được chuyển mã video 720p bằng GStreamer (mã hóa phần cứng thông qua OpenMAX) trên Raspberry Pi 2 (mở hoặc tải xuống hình ảnh để biết chi tiết đầy đủ):
Cập nhật:
Theo đề nghị của ecc29 về việc sử dụng phương pháp chia tỷ lệ lanczos, tôi đã thực hiện một thử nghiệm thêm method=lanczos
vào videoscale
. Quá trình mã hóa tăng gấp đôi thời gian, nhảy từ khoảng 7 phút đến 14 phút 37 giây. Kết quả gần như tương đương với chất lượng mà không có phương pháp (song tuyến mặc định). Thật vậy, các khiếm khuyết chủ yếu đến từ quá trình mã hóa trong phần cứng. Chúng rõ ràng là các tạo tác nén.