FFmpeg met PHP veroorzaakt interne serverfout

Ik heb een PHP-script dat exec() aanroept om videobestanden te converteren met ffmpeg. Het script werkt prima met kleinere bestanden, maar grotere bestanden, meestal rond 20 MB, produceren een 500 Internal Server Error nadat de conversie ongeveer 45 seconden heeft gedraaid.

De max_execution_time is ingesteld op 600 seconden (10 minuten) en de max. Post- en uploadgroottes zijn ingesteld op 1000 MB. De server is gebaseerd op Unix en wordt niet uitgevoerd in de veilige modus.

Hoewel het probleem alleen bij grotere formaten optreedt, weet ik niet eens zeker of het een probleem met de bestandsgrootte is. Het script wordt doorgegeven met een 12,6 MB MOV-bestand, maar mislukt met een 11 MB MP4-bestand.

Hieronder staat de exec() regel van mijn script:

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);

Bedankt!

1
Langlopende taak moet op de achtergrond worden uitgevoerd. Oudere ffmpeg bevat bugs, zorg ervoor dat u de nieuwste versie gebruikt. Probeer dezelfde opdracht binnen de terminal uit te voeren, zonder php.
toegevoegd de auteur Petr, de bron
Het werkt prima in Terminal. De conversie werkt, zelfs wanneer de interne fout wordt gegenereerd; het roept eenvoudigweg geen van de regels na de exec (). Ik kan de FTP controleren nadat de fout is gegenereerd en er zal een werkend videobestand in de map staan.
toegevoegd de auteur Scott Heath, de bron

1 antwoord

Ik heb soortgelijke problemen ondervonden met PHP en time-outs met mod_fcgid en Apache. mod_fcgid lijkt een probleem te hebben met scripts die lang meegaan, en ongeacht de hoeveelheid time-outwaarden die ik nog steeds niet kon krijgen om de hele tijd aardig te spelen.

Enkele opties die ik heb gevonden om dit op te lossen:

  1. Gebruik geen PHP-script - gebruik PHP CLI en een cron-job
  2. Gebruik mod_fcgid niet op de site die u gebruikt om te coderen, gebruik een CGI wrapper of zelfs mod_php

Ik bewerk dit omdat ik een zeer nuttige reeks links heb gevonden die mijn probleem hebben opgelost:

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

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

Ik voegde toe:


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

in mijn fcgid.conf bestand en

IPCConnectTimeout 10800
IdleTimeout 10800
ProcessLifeTime 10800
BusyTimeout 10800

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

1
toegevoegd