Tốc độ nào tôi có thể mong đợi từ mã hóa phần cứng H264?


29

Tôi loạng choạng trên Wikipedia-article rằng Broadcom GPU có hỗ trợ phần cứng cho mã hóa H.264 / AVC, không chỉ de -coding.

Tôi cũng tìm thấy một bài viết trong đó ai đó đã đưa ra một ví dụ sử dụng ffmpegđể tạo tệp video h264 / mp4. Ok, một CPU có mục đích chung của nó với một GPU chuyên dụng, vì vậy đó là không thực sự bất ngờ.

Nhưng so với một máy tính để bàn tiêu chuẩn có Card đồ họa trung bình, Raspberry Pi có khả năng mã hóa H.264 / AVC thậm chí có thể nhanh hơn không? Nếu một người dùng máy tính để bàn là để tối ưu hóa của ông ffmpegđể ông Core-i5xxx với $ 150 Ati / Nvidia card đồ họa ... nào đó kết hợp lời đề nghị bất cứ điều gì trong đường lối của "phần cứng hỗ trợ mã hóa H.264"? Nếu không, một Raspberry-Pi-ffmpeg được thông qua đặc biệt sẽ còn nhanh hơn? Nếu có, đã có một so sánh tốc độ chưa?


Tôi không nên nghĩ rằng Raspberry Pi sẽ nhanh hơn một máy tính để bàn.
Jivings

5
Ai đó nên làm một điểm chuẩn rõ ràng và hiển thị một số kết quả.
XtL

@XTL Cần bạn làm điều đó? ;-)
Towi

Đây là kết quả rất tốt..có thể bạn vui lòng thêm chuyển mã âm thanh vào lệnh ví dụ?

Câu trả lời:


5

Hiện tại, có vẻ như vẫn chưa có phần mềm ổn định để mã hóa video h264 bằng phần cứng, ngay cả khi đã được thông báo chính thức rằng Raspberry Pi không hỗ trợ mã hóa phần cứng h264. Vì vậy, chúng tôi không thể làm điểm chuẩn để so sánh hiệu suất với PC thông thường .

Tôi không biết ai đó đang làm việc về chủ đề này, nhưng một nhà phát triển libavdường như bi quan về việc tích hợp một mô-đun như vậy trong libavdự án hiện tại (xem trả lời của anh ấy vào ngày 2 tháng 12, 09:23).

Tôi sẽ rất vui khi làm điểm chuẩn khi thư viện hoặc phần mềm cho phép.


Tôi không biết bắt đầu từ đâu, nhưng tôi có thể sẵn sàng thử. Tôi luôn tìm kiếm một lý do để tôi đào sâu vào libavcodec src, hoặc - chính xác là - x264.
Towi

2
Thư viện GStreamer có khả năng hooking vào API Broadcom chip OpenMax, và đó dường như là một thể làm mã hóa phần cứng: gstreamer.freedesktop.org/releases/gst-omx/1.0.0.html
speedplane

25

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:

  1. MacBook Pro (đầu năm 2011) lõi kép i7-2620M 2.7GHz (Sandy Bridge) - RAM 4GB
  2. 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 đủ):

Phần mềm chuyển mã video 720p vẫn được chuyển mã bằng HandBrake (x264) trên MacBook Pro

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

Phần còn lại của video X được chuyển mã bằng video 720p bằng GStreamer (mã hóa phần cứng thông qua OpenMAX) trên Raspberry Pi 2

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=lanczosvà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.


Đối với chất lượng hình ảnh sau khi chuyển mã GStreamer, cần xem xét một yếu tố khác. Các tham số khác nhau cho videocale sẽ có ảnh hưởng đến hình ảnh trước khi người truyền phát gửi nó đến omxh264enc. Videocale sử dụng song tuyến làm tùy chọn mặc định. Lanczos tốt hơn nhưng quá chậm. Các nhà phát triển của guxer đang làm việc với nhiều tùy chọn hơn cho video, nhưng chúng chưa được phát hành ổn định. Một số mẫu được tạo có thể hữu ích để so sánh các tùy chọn khác nhau:
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

Tôi đã cập nhật bài viết với kết quả của lanczosphương pháp chia tỷ lệ.
M. Rubio-Roy

Suy nghĩ về việc mua 3 b +. Bất kỳ cập nhật 3 năm rưỡi sau? Mã hóa thời gian thực có thể bây giờ?
akostadinov

1

GPU trong RPi khá mạnh mẽ. Tôi đã đọc rằng về mặt mã hóa, bạn có thể mã hóa 1080p @ 30 khung hình / giây. Ngoài ra mã hóa nhiều luồng cũng có thể. Người ta cũng tin rằng bạn có thể mã hóa các vidoes khi đang sử dụng RPi.

Nhưng. Các card đồ họa hiện đại có khả năng chạy toàn bộ mã hóa trên GPU, đây là điều mà GPU thực sự giỏi.

Nếu tôi phải đánh giá một ý kiến ​​cá nhân. Nó sẽ là RPi sẽ không nhanh hơn một card đồ họa thông số trung bình. Nhưng tôi nghĩ rằng nó sẽ nhanh hơn rất nhiều so với bạn nghĩ. Thậm chí có thể gần 75% tốc độ.

Tôi không thể tìm thấy một so sánh có sẵn ở bất cứ đâu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.