Natknąłem się na Wikipedii-artykuł, że Broadcom GPU wsparcie sprzętowe dla kodowania H.264 / AVC, nie tylko de -coding.
Znalazłem również artykuł, w którym ktoś podał przykład ffmpeg
generowania plików wideo h264 / mp4. Ok, jego CPU ogólnego przeznaczenia z wyspecjalizowanego procesora graficznego, tak, że naprawdę nie jest niespodzianka.
Ale czy w porównaniu ze standardowym komputerem stacjonarnym ze średnią kartą graficzną, Raspberry Pi potencjalnie koduje H.264 / AVC, może nawet szybciej ? Jeśli użytkownik pulpit było optymalizować ffmpeg
jego podstawowej-i5xxx z $ 150 Ati / Nvidia karta graficzna ... robi to kombinacja oferta cokolwiek drogami „wsparcia sprzętowego kodowania H.264”? Jeśli nie, czy specjalnie przyjęty Raspberry-Pi-ffmpeg będzie jeszcze szybszy? Jeśli tak, czy istnieje już porównanie prędkości?
źródło
Odpowiedzi:
W tej chwili wydaje się, że wciąż nie ma stabilnego oprogramowania do kodowania wideo h264 przy użyciu sprzętu, nawet jeśli oficjalnie ogłoszono, że Raspberry Pi obsługuje sprzętowe kodowanie h264. Dlatego nie możemy zrobić testu porównawczego, aby porównać wydajność ze zwykłym komputerem .
Nie wiem, czy ktoś pracuje nad tym tematem, ale programista
libav
wydaje się pesymistyczny, jeśli chodzi o włączenie takiego modułu do istniejącegolibav
projektu (patrz jego odpowiedź 2 grudnia, 09:23).Z przyjemnością przeprowadzę test porównawczy, jeśli pozwoli na to biblioteka lub oprogramowanie.
źródło
Od kwietnia 2015 r. GStreamer 1.2 zawarty w Raspbian obsługuje sprzętowo przyspieszane kodowanie H.264 OpenMAX przez omxh264enc.
Przeprowadziłem kilka testów porównawczych:
Przykładowy plik: próbka z lat 60. z filmu Alatriste (2006). Oryginalny plik ma rozdzielczość 1080p i zajmuje 30 MB. Transkodowałem plik do 720p. Wszystkie ścieżki audio zostały zignorowane, aby skoncentrować badanie na transkodowaniu wideo.
Wyniki:
Na (1), używając Handbrake (kodek x264) transkodowałem przy ustawieniach x264 bardzo powolny i średni przepływność 1145 kb / s (1 przebieg), co dało plik 7,7 MB. Profil wysoki, poziom 4.0. Kodowanie zajęło 3 minuty 36 sekund przy użyciu 4 wątków. Łączne łączne obciążenie procesora hamulca ręcznego ~ 380%. Jakość wideo była bardzo dobra. Można było zaobserwować małe artefakty, a utratę szczegółów nie było łatwo zaobserwować. Zobacz poniżej.
Na (2), używając GStreamer i omxh264enc (sprzętowo przyspieszony) transkodowałem z docelową przepływnością = 1145000 (1145 kb / s), kontrola szybkości = 1 (metoda kontroli zmiennej przepływności), co dało plik 6,9 MB. Kodowanie trwało 7 minut 4s przy użyciu 1 wątku. Łączne łączne obciążenie procesora gst-launch-1,0 ~ 100%. Jakość wideo została zauważalnie obniżona, a artefakty były wyraźnie widoczne i łatwo zauważalna utrata szczegółów. Zobacz poniżej.
Gdy używasz GStreamer z x264enc jako koderem, łączna skumulowana opłata procesora gst-launch-1.0 wynosi około 380%, co potwierdza fakt, że omxh264enc faktycznie korzysta z GPU. Ponadto przy x264enc w (2) czas przekracza 15 minut.
Wniosek:
W przypadku dość podobnego rozmiaru pliku czas spędzony przez przyspieszany sprzętowo koder GPU RaspBerry Pi 2 był prawie dwukrotnie dłuższy niż w przypadku programowego kodera x264 na dwurdzeniowym procesorze i7-2620M. Dodanie transkodowania i multipleksowania dźwięku może nieco zlikwidować tę lukę z powodu w dużej mierze nieużywanego procesora na RaspBerry Pi podczas tego testu. Jakość wideo była wyraźnie lepsza w przypadku pliku zakodowanego programowo. Zobacz zdjęcia poniżej.
Dostępne opcje konfiguracji omxh264enc (ujawnione przez gst-inspect-1.0) są ograniczone w porównaniu do kodera x264, ale dalsze eksperymenty mogłyby zapewnić lepszą jakość.
Załącznik:
Instalacja GStreamer i OpenMax z repozytoriów Raspbian:
QuickTime X wciąż z wideo 720p transkodowanego przy użyciu HandBrake (x264) na MacBooku Pro (otwórz lub pobierz obraz, aby uzyskać szczegółowe informacje):
QuickTime X wciąż z 720p wideo transkodowanego przy użyciu GStreamer (kodowanie sprzętowe przez OpenMAX) na Raspberry Pi 2 (otwórz lub pobierz obraz, aby uzyskać szczegółowe informacje):
Aktualizacja:
Zgodnie z sugestią ecc29 dotyczącą zastosowania metody skalowania lanczos wykonałem test dodawania
method=lanczos
dovideoscale
. Proces kodowania podwoił się w czasie, skacząc z około 7 minut do 14 minut 37 sekund. Wynik jest prawie równy jakościowo bez metody (domyślnie dwuliniowy). W rzeczywistości defekty pochodzą głównie z procesu kodowania sprzętowego. Są to wyraźnie artefakty kompresji.źródło
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
lanczos
metody skalowania.Procesor graficzny w RPi jest dość mocny. Przeczytałem, że w zakresie kodowania możesz zakodować 1080p @ 30 fps. Możliwe jest również kodowanie wielu strumieni. Uważa się również, że można zakodować wideo w locie za pomocą RPi.
Ale. Współczesne karty graficzne mogą obsługiwać cały kodowanie na GPU, w czym GPU jest naprawdę dobra.
Gdybym musiał ocenić osobistą opinię. Byłoby tak, że RPi nie byłby szybszy niż karta graficzna o średniej specyfikacji. Myślę jednak, że byłoby to o wiele szybsze niż myślisz. Może nawet blisko 75% prędkości.
Nigdzie nie mogłem znaleźć porównania.
źródło