FFmpeg mit PHP verursacht internen Serverfehler

Ich habe ein PHP-Skript, das exec() aufruft, um Videodateien mit ffmpeg zu konvertieren. Das Skript funktioniert gut mit kleineren Dateien, aber größere Dateien, normalerweise ca. 20 MB, erzeugen einen internen Serverfehler von 500, nachdem die Konvertierung für ca. 45 Sekunden ausgeführt wurde.

Die max_execution_time ist auf 600 Sekunden (10 Minuten) eingestellt, und die maximalen Post- und Upload-Größen sind auf 1000 MB eingestellt. Der Server ist Unix-basiert und läuft nicht im abgesicherten Modus.

Obwohl das Problem nur bei größeren Größen auftritt, bin ich mir nicht einmal sicher, ob es sich um ein Problem mit der Dateigröße handelt. Das Skript wird mit einer 12,6 MB MOV-Datei übertragen, schlägt jedoch mit einer 11 MB MP4-Datei fehl.

Unten ist die exec() Zeile von meinem Skript:

exec('ffmpeg -y -i '.escapeshellarg($uploadFile).' -vcodec libx264 -ab 128k -ac 2 -b 640k -g 300 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -maxrate 10M -bufsize 10M -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -level 30 '.$convertFile);

Vielen Dank!

1
Ein langlaufender Job sollte im Hintergrund ausgeführt werden. Ältere ffmpeg hat Bugs, stellen Sie sicher, dass Sie die neueste Version ausführen. Versuchen Sie, denselben Befehl im Terminal ohne PHP auszuführen.
hinzugefügt der Autor Petr, Quelle
Es läuft gut im Terminal. Die Konvertierung funktioniert auch dann, wenn der interne Fehler ausgelöst wird. Es ruft einfach keine der Zeilen nach der exec() auf. Ich kann das FTP nach dem Fehler überprüfen und es wird eine funktionierende Videodatei im Verzeichnis sein.
hinzugefügt der Autor Scott Heath, Quelle

1 Antworten

Ich habe ähnliche Probleme mit PHP und Timeouts mit mod_fcgid und Apache erlebt. mod_fcgid scheint ein Problem mit Skripten zu haben, die lange laufen und unabhängig davon, wie stark die Timeout-Werte geändert wurden, konnte ich immer noch nicht feststellen, dass es immer schön spielt.

Einige Optionen, die ich gefunden habe, um das zu lösen:

  1. Verwenden Sie kein PHP-Skript - verwenden Sie PHP CLI und einen Cron-Job
  2. Verwenden Sie nicht mod_fcgid auf der Website, die Sie zum Verschlüsseln verwenden, verwenden Sie ein CGI Wrapper oder sogar mod_php

Ich bearbeite dies, da ich eine sehr nützliche Reihe von Links gefunden habe, die mein Problem gelöst haben:

http://profiles.ysn.com/supportforum/viewtopic.php?f=7&t=283&start=15#p1300

http://www.virtualmin.com/node/19879

Ich fügte hinzu:


    AddHandler fcgid-script fcg fcgi fpl
    IdleScanInterval 10800
    BusyScanInterval 10800
    ZombieScanInterval 60

in meine fcgid.conf Datei und

IPCConnectTimeout 10800
IdleTimeout 10800
ProcessLifeTime 10800
BusyTimeout 10800

into my httpd.conf in the relevant , restarted apache and the timeouts have stopped.

1
hinzugefügt
PHP - Deutsche Gemeinschaft
PHP - Deutsche Gemeinschaft
5 der Teilnehmer

In dieser Gruppe sprechen wir über PHP. Partner: de.switch-case.com