ffmpeg wandelt Bilder mit PHP nicht in Video um

ffmpeg wandelt Bilder mit PHP nicht in Video um

Hierfür kann es zahlreiche Gründe geben, angefangen von falschen Dateirechten über falsche Pfadangaben bis hin zu fehlerhaften Bilddateien.

Um zumindest die Bilddaten auf Integrität zu überprüfen kann das Paket „feh“ verwendet werden:

feh -ur /var/bilder

ffmpeg wird über PHP per shell_exec ausgeführt, also habe ich im nächsten Schritt versucht die Ausgabe

Befehl > /Pfad/Ausgabedatei

in eine Logdatei umzuleiten, was jedoch leider nicht funktioniert hat. Die entsprechende Logdatei war trotz passender Dateirechte vollkommen leer.

Demnach musste ich den von PHP gewünschten Befehl manuell in der Shell ausführen, dabei erhielt ich folgende Fehlermeldung:

[libx264 @ 0x5ec6d00] height not divisible by 2 (1200x675)
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height

In meinem Fall lag das Problem an einer Höhe von 675 Pixel welche nicht durch 2 teilbar ist. Dieses Problem lässt sich durch eine Erweitertung des Befehls um

-vf "pad=ceil(iw/2)*2:ceil(ih/2)*2"

beheben.

Der vollständige Befehl sah somit wie folgt aus:

-vf "pad=ceil(iw/2)*2:ceil(ih/2)*2"

/var/bin/ffmpeg -framerate 24 -i /var/CAM/video/image%010d.jpg -c:v libx264 -crf 30 -vf "pad=ceil(iw/2)*2:ceil(ih/2)*2" /var/CAM/video/test.mp4

Die Dateien in diesem Beispiel entsprechen dem Dateinamen „image000000001.jpg“

Da PHP den zusätzlichen Teil nicht richtig übergeben wollte, musste ich den neuen Teil zunächst in eine eigene Variable schreiben:

$command1 = '-c:v libx264 -crf 30 -vf "pad=ceil(iw/2)*2:ceil(ih/2)*2"';
$command2 = "$ffmpeg_path -framerate $frames $bild $command1 $output_name";

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert