Hardwarebeschleunigte h264-Codierung möglich?

11

Der Raspberry Pi führt eine hardwarebeschleunigte h264-Codierung durch, wenn Videos von der Kamerakarte aufgenommen werden. Wie kann ich h264 (mit Hardwarebeschleunigung) codieren, wenn die Quellbilder nicht direkt von der Kamera kommen?

Gibt es Befehlszeilentools, die dies unterstützen?

Wenn nein, auf welche APIs sollte ich achten, um dies zu ermöglichen?

Szabolcs
quelle
Was codieren Sie und wie derzeit? - Konvertieren Sie Videodateien, rendern Sie sie aus Bildern und Ton usw.
Wilf
@Wilf Das interessiert mich im Allgemeinen, aber ich habe eine aktuelle Anwendung: Codierung eines Zeitraffers direkt in Video. Ich kann raspivid nicht verwenden, da ich niedrige Frameraten zwischen 1/5 und 2 fps benötige. Außerdem schwankt die scharfe automatische Belichtung unter meinen Lichtbedingungen (schwaches Licht). Ich möchte also Raspistill verwenden, aber direkt in Video codieren, damit das Ergebnis nicht zu viel Platz beansprucht (wie JPEGs). Als zweite Anwendung möchte ich jeden Frame in Echtzeit mit Mathematica nachbearbeiten (was viel CPU-Zeit in Anspruch nimmt ) und sie dann zur Codierung in h264 senden.
Szabolcs
1
@Wilf Ich habe eine Teillösung, die meiner Meinung nach möglich sein sollte, um Arbeit zu machen: Die Idee ist so etwas wie raspiyuv -o - | rpi-encode-yuv(ungefähr), wo das rpi-encode-yuvWerkzeug von hier ist . Die Frame-Größe ist in diesem Tool fest codiert, daher müssen Sie sie am Anfang der C-Datei ändern und neu kompilieren. Leider habe ich es noch nicht geschafft, eine richtig ausgerichtete Ausgabe zu erhalten, da raspiyuvdie Frame-Größe nicht in die Ausgabe zu kodieren scheint. Ich bekomme ein sich allmählich veränderndes Bild, das sich schließlich in Müll verwandelt. Ich arbeite immer noch daran.
Szabolcs

Antworten:

8

GStreamer ist in Raspbian enthalten und nutzt mit seinem OpenMAX-Plugin die Hardware-Codierungsfunktionen des Raspberry Pi.

Unter diesem Link finden Sie ein Tutorial, wie Sie das tun, wonach Sie suchen: https://www.raspberrypi.org/forums/viewtopic.php?t=72435

Wenn Sie an Transcodierung interessiert sind, habe ich gerade eine Antwort auf eine andere Frage veröffentlicht, die Sie interessieren könnte: Welche Geschwindigkeit kann ich von der Hardware-H264-Codierung erwarten?

M. Rubio-Roy
quelle
Vielen Dank! Ich kann dies momentan nicht testen, werde es aber aufgrund Ihres Tutorials im Voraus akzeptieren.
Szabolcs
1

Sieht so aus, als ob Sie ffmpeg selbst kompilieren, auf RPi3B + können Sie bekommen

ENCODIERUNG EINES HOCHKOMPLEXITÄTS-30-FPS-VIDEOS AUS EINER 1920 x 1080 JPEG-BILDFOLGE - WESENTLICHE BEWEGUNGS- UND INTRAFRAME-DETAILS - HOCHWERTIGE EINSTELLUNGEN:

Softwarebasierte H.264-Codierung (CPU): 2,6 FPS (11,5-mal langsamer als in Echtzeit)

Hardwarebasierte H.264-Codierung (GPU): 6,3 FPS (4,8-mal langsamer als in Echtzeit)

ENCODIERUNG EINES HOCHKOMPLEXITÄTS-30-FPS-VIDEOS AUS EINER 640 x 480 JPEG-BILDFOLGE - WESENTLICHE BEWEGUNGS- UND INTRAFRAME-DETAILS - HOCHWERTIGE EINSTELLUNGEN:

Softwarebasierte H.264-Codierung (CPU): 18 FPS (1,7-mal langsamer als in Echtzeit)

Hardwarebasierte H.264-Codierung (GPU): 38 FPS (1,3-mal SCHNELLER als in Echtzeit)

Das Skript, mit dem all dies erreicht werden kann, befindet sich in einem Forenthread .

akostadinov
quelle