Donanım-H264 kodlamasından ne kadar hız alabilirim?


29

Ben Broadcom GPU için donanım desteği olduğunu Vikipedi-makaleye üzerinde tökezledi kodlayan sadece H.264 / AVC de -kodlama.

Ayrıca, birinin ffmpegh264 / mp4 video dosyaları oluşturmak için kullandığı bir örnek verdiği bir makale buldum . Tamam, özel bir GPU ile onun bir genel amaçlı işlemci, yani gerçekten olmadığını sürpriz.

Ancak, ortalama bir Grafik Kartı olan standart bir masaüstü PC ile karşılaştırıldığında, Raspberry Pi H.264 / AVC'yi daha da hızlı bir şekilde kodlayabilir mi? Bir masaüstü kullanıcı onun optimize etmek idiyse ffmpegonun için Çekirdek-i5xxx 150 $ ile Ati / Nvidia grafik kartı ... yok "donanım H.264 kodlama destek" yollarla bu kombinasyon teklif şey var mı? Olmazsa, özel olarak kabul edilmiş bir Ahududu-Pi-ffmpeg daha hızlı olacak mı? Eğer evet ise, zaten bir hız karşılaştırması var mı?


Raspberry Pi'nin masaüstü bilgisayarlardan daha hızlı olacağını düşünmemeliydim.
Jivings,

5
Birileri açıkça bir kıyaslama yapmalı ve bazı sonuçlar göstermelidir.
XTL

@ XTL Bunu yapabilir misin ? ;-)
towi

Bu çok iyi bir sonuçtur. Lütfen örnek komutuna ses kodlamasını ekleyebilir misiniz?

Yanıtlar:


5

Şu anda, ahududu Pi'nin h264 donanım kodlamasını desteklediğini resmen açıklamış olmasına rağmen, donanım kullanarak h264 videoyu kodlamak için hala kararlı bir yazılım yok gibi görünüyor . Dolayısıyla, performansları normal bir PC ile karşılaştırmak için bir kıyaslama yapamayız .

Birisi konu üzerinde çalışıp çalışmadığını bilmiyorum, ancak bir geliştirici, böyle bir modülü mevcut projeye dahil etme konusunda karamsarlibav görünüyor (2 Aralık 09: 23'teki cevabına bakınız).libav

Bir kütüphane veya yazılım izin verdiği zaman bir kıyaslama yapmaktan memnuniyet duyarım.


Nereden başlayacağım hakkında hiçbir fikrim yok, ancak denemeye istekli olabilirim. Her zaman bir neden için libavcodec src'i kazmamı veya - kesin olarak - x264'i aramamı aradım.
towi,

2
GStreamer kütüphanesi Broadcom yongaları OpenMax API'sine bağlanabiliyor ve donanım kodlaması yapabiliyor gibi görünüyor: gstreamer.freedesktop.org/releases/gst-omx/1.0.0.html
speedplane

25

Nisan 2015 itibariyle, Raspbian'da bulunan GStreamer 1.2, omxh264enc ile kodlanmış OpenMAX donanım hızlandırmalı H.264'ü destekliyor.

Karşılaştırma yaparken bazı kıyaslamalar yaptım:

  1. MacBook Pro (2011 başında) çift çekirdekli i7-2620M 2.7GHz (Sandy Bridge) - 4GB RAM
  2. Ahududu Pi 2 Model B 900 MHz dört çekirdekli ARM Cortex-A7 CPU - 1GB RAM

Örnek dosya: Alatriste (2006) filminden 60'lar örneği. Orijinal dosya 1080p'dir ve 30 MB alır. Dosyayı 720p'ye dönüştürdüm. Çalışmayı video kodlamaya yoğunlaştırmak için tüm ses parçaları göz ardı edildi.

Sonuçlar:

Açık (1), El Freni (x264 codec) kullanarak x264 ayarları veryslow ve ortalama bit hızı 1145kbps (1-pass) ile şifrelenerek 7.7MB bir dosya elde ettim. Profil Yüksek, seviye 4.0. Kodlama 4 iplik kullanarak 3 dakika 36 saniye sürmüştür. El freni toplam kümülatif CPU şarjı ~% 380. Video kalitesi çok iyiydi. Küçük eserler gözlemlenebilir ve detay kaybı kolay gözlemlenemez. Hala aşağıya bakınız.

Açık (2), GStreamer ve omxh264enc (donanım hızlandırmalı) kullanarak hedef-bit oranı = 1145000 (1145kbps), kontrol oranı = 1 (değişken bit hızı kontrol yöntemi) ile kodlandı, bu da 6.9 MB'lık bir dosya verdi. Kodlama 1 iş parçacığı kullanarak 7dk 4s aldı. Gst-launch-1.0 ~ 100% toplam kümülatif CPU şarjı. Video kalitesi net bir şekilde görülebilen ve kolayca gözlenebilen detay kaybıyla artefaktlarla belirgin şekilde düşürüldü. Hala aşağıya bakınız.

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

Enkoder olarak x264enc ile GStreamer kullanıldığında, gst-launch-1.0'ın toplam kümülatif CPU ücreti, yaklaşık% 380'e ulaşır, bu, omxh264enc'in GPU'yu kullandığı gerçeğini destekler. Ayrıca, (2) 'deki x264enc ile süre 15dk.

Sonuç:

Oldukça benzer bir dosya boyutu için, donanım hızlandırmalı RaspBerry Pi 2 GPU kodlayıcı tarafından harcanan zaman, çift çekirdekli i7-2620M'deki x264 kodlayıcısının neredeyse iki katıydı. Ses kodlama ve çoğullama ekleme, bu test sırasında RaspBerry Pi üzerindeki büyük ölçüde kullanılmayan CPU nedeniyle bu açığı biraz kapatabilir. Yazılım kalitesi ile kodlanmış dosyada video kalitesi açıkça üstündür. Aşağıdaki fotoğraflara bakın.

Omxh264enc için mevcut yapılandırma seçenekleri (gst-inspect-1.0 tarafından açık olan) x264 kodlayıcıya kıyasla sınırlıdır, ancak daha fazla deneme daha iyi kalite sağlayabilir.

Ek:

Raspbian depolarından GStreamer ve OpenMax kurulumu:

$ 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

MacBook Pro'da HandBrake (x264) kullanılarak kodlanmış, hala 720p videodan QuickTime X (tam detay için görüntüyü açın veya indirin):

MacBook Pro'da HandBrake (x264) kullanarak hala kodlanmış 720p video hala QuickTime X

Raspberry Pi 2'de GStreamer (OpenMAX aracılığıyla donanım kodlaması) kullanılarak kodlanmış 720p video hala QuickTime X (tam ayrıntı için görüntüyü aç veya indir):

QuickTime X, Raspberry Pi 2'de GStreamer (OpenMAX ile kodlanan donanım) kullanılarak kodlanan 720p video hala

Güncelleştirme:

Aşağıdaki ecc29 önerisi yöntemi ölçekleme Lanczos kullanmanın ben ekleyerek bir test uygulandı method=lanczosiçin videoscale. Kodlama işlemi zamanla iki katına çıktı, yaklaşık 7 dakika ila 14 dakika 37s arasında atladı. Sonuç, kaliteden neredeyse metodsuz olanla aynıdır (varsayılan bilinear). Aslında, kusurlar esas olarak donanımdaki kodlama işleminden kaynaklanmaktadır. Onlar açıkça sıkıştırma eserlerdir.


GStreamer kodlamasının ardından görüntü kalitesi için başka bir faktör göz önünde bulundurulmalıdır. Video ölçeği için farklı parametrelerin gstreamer omxh264enc'e göndermeden önce görüntü üzerinde etkisi olacaktır. Videoscale varsayılan seçenek olarak bilinear kullanır. Lanczos daha iyi ama çok yavaş. Gstreamer geliştiricileri, video ölçeklendirme için daha fazla seçenek üzerinde çalışıyorlar, ancak henüz kararlı sürümde değiller. Üretilen bazı desenler, farklı seçenekleri karşılaştırmak için faydalı olabilir:
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

lanczosGönderiyi ölçeklendirme yönteminin sonuçlarıyla güncelledim .
M. Rubio-Roy,

3 b + almayı düşünüyorum. Herhangi bir güncelleme 3 buçuk yıl sonra? Şimdi gerçek zamanlı kodlama mümkün mü?
akostadinov

1

RPI’daki GPU oldukça etli. Kodlama açısından 1080p @ 30fps kodlayabildiğinizi okudum. Ayrıca birden fazla akışı kodlamak da mümkündür. RPI kullanarak anında vido kodlayabildiğinize inanılıyor.

Fakat. Günümüz grafik kartları GPU'daki kodlamanın tamamını çalıştırma yeteneğine sahiptir, bu GPU'nun gerçekten iyi olduğu şeydir.

Kişisel bir görüşü ölçmem gerekirse. RPI orta seviye bir grafik kartından daha hızlı olmazdı. Ama bence düşündüğünden çok daha hızlı olacağını düşünüyorum. Belki hızın% 75'ine yakın.

Hiçbir yerde bir karşılaştırma bulamadım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.