Czy możliwe jest przyspieszanie sprzętowe kodowania h264?

12

Raspberry Pi wykona sprzętowo przyspieszone kodowanie h264 podczas nagrywania wideo z płyty kamery. Jak mogę zakodować h264 (przy użyciu akceleracji sprzętowej), gdy obrazy źródłowe nie pochodzą bezpośrednio z aparatu?

Czy są dostępne jakieś narzędzia wiersza poleceń?

Jeśli nie, na jakie interfejsy API powinienem patrzeć, aby było to możliwe?

Szabolcs
źródło
Co kodujesz i jak obecnie? - czy konwertujesz pliki wideo, renderujesz je z obrazów i dźwięku itp.
Wilf
@ Wilf Jestem tym ogólnie zainteresowany, jednak mam obecną aplikację: kodowanie upływu czasu bezpośrednio do wideo. Nie mogę używać raspivid, ponieważ potrzebuję niskiej liczby klatek na sekundę między 1/5 a 2 fps. Również malownicze automatyczne naświetlanie wpada w oscylacje w moich warunkach oświetleniowych (słabe światło). Chcę więc użyć raspistill, ale koduję bezpośrednio do wideo, aby wynik nie zajmował zbyt dużo miejsca (tak jak JPEG). Jako druga aplikacja chcę zaksięgować każdą ramkę w czasie rzeczywistym za pomocą Mathematica (zajmie to dużo czasu procesora), a następnie wysłać je do zakodowania w h264.
Szabolcs
1
@Wilf mam częściowe rozwiązanie, które myślę, że powinno być możliwe, aby uczynić pracę: pomysł jest coś raspiyuv -o - | rpi-encode-yuv(w przybliżeniu) w przypadku gdy rpi-encode-yuvnarzędzie jest od tutaj . Rozmiar ramki jest zakodowany na stałe w tym narzędziu, więc musisz go zmienić na początku pliku C i ponownie skompilować. Niestety nie udało mi się uzyskać odpowiednio wyrównanego wyjścia, ponieważ raspiyuvwydaje się , że nie koduje rozmiaru ramki w jego wyniku. Dostaję stopniowo zmieniające się zdjęcie, które ostatecznie zmienia się w śmieci. Nadal nad tym pracuję.
Szabolcs

Odpowiedzi:

8

GStreamer jest dołączony do Raspbian, a dzięki wtyczce OpenMAX będzie korzystać z możliwości sprzętowego kodowania Raspberry Pi.

Ten link zawiera samouczek dotyczący robienia tego, czego szukasz: https://www.raspberrypi.org/forums/viewtopic.php?t=72435

Jeśli jesteś zainteresowany transkodowaniem, właśnie opublikowałem odpowiedź na inne pytanie, które może Cię zainteresować: Jakiej prędkości mogę się spodziewać po sprzętowym kodowaniu H264?

M. Rubio-Roy
źródło
Dzięki! Nie mogę teraz tego przetestować, ale z góry zaakceptuję go na podstawie Twojego samouczka.
Szabolcs
1

Wygląda na to, że sam skompilujesz ffmpeg, na RPi3B + możesz dostać

KODOWANIE WYSOKIEJ KOMPLEKSOWOŚCI WIDEO 30 FPS Z SEKWENCJI OBRAZÓW JPEG 1920 X 1080 - ISTOTNY RUCH I SZCZEGÓŁY INTRAFRAMU - USTAWIENIA WYSOKIEJ JAKOŚCI:

Programowe kodowanie H.264 (CPU): 2,6 FPS (11,5 razy wolniej niż w czasie rzeczywistym)

Sprzętowe kodowanie H.264 (GPU): 6,3 FPS (4,8 razy wolniej niż w czasie rzeczywistym)

KODOWANIE WYSOKIEJ KOMPLEKSOWOŚCI WIDEO 30 FPS Z SEKWENCJI OBRAZÓW JPEG 640 X 480 - ISTOTNY RUCH I SZCZEGÓŁY INTRAFRAMU - USTAWIENIA WYSOKIEJ JAKOŚCI:

Programowe kodowanie H.264 (CPU): 18 FPS (1,7 razy wolniej niż w czasie rzeczywistym)

Sprzętowe kodowanie H.264 (GPU): 38 FPS (1,3 razy SZYBCIEJ niż w czasie rzeczywistym)

Skrypt ułatwiający osiągnięcie tego wszystkiego znajduje się w wątku na forum .

akostadinov
źródło