PHPでFFmpegが内部サーバエラーを引き起こす

私はffmpegを使用してビデオファイルを変換するexec()を呼び出すPHPスクリプトを持っています。このスクリプトは小さなファイルでは正常に動作しますが、通常は約20MBの大きなファイルでは、変換が約45秒間実行された後に500内部サーバーエラーが発生します。

max_execution_timeは600秒(10分)に設定され、ポストおよびアップロードの最大サイズは1000 MBに設定されています。サーバーはUnixベースであり、セーフモードで実行されていません。

この問題は大きなサイズでのみ発生しますが、ファイルサイズの問題であるかどうかはわかりません。スクリプトは12.6MBのMOVファイルを渡しますが、11MBのMP4ファイルで失敗します。

以下は私のスクリプトのexec()行です:

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

ありがとう!

1
長時間実行されているジョブはバックグラウンドで実行されている必要古いffmpegにはバグがあり、最新バージョンを確実に実行していることを確認してください。同じコマンドをターミナル内でphpなしで実行してみてください。
追加された 著者 Petr,
ターミナルで正常に動作します。内部エラーがスローされた場合でも変換は機能します。単にexec()の後の行を呼び出すことはありません。エラーがスローされ、ディレクトリに作業中のビデオファイルがあると、FTPを確認できます。
追加された 著者 Scott Heath,

1 答え

mod_fcgidとApacheを使用して、PHPとタイムアウトに関する同様の問題を経験しました。 mod_fcgidには長い時間がかかるスクリプトの問題があるようですが、タイムアウト値を変更しても、それでも時間の都合が良いとは言えません。

私はこれを解決するために見つけたいくつかのオプション:

  1. PHPスクリプトを使用しない - PHP CLIとcronジョブを使用する
  2. エンコードに使用しているサイトでmod_fcgidを使用しないでください。CGIを使用してください ラッパーまたはmod_php

私は私の問題を解決したリンクの非常に有用なセットを見つけたので、これを編集しています:

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

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

追加した:


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

私のfcgid.confファイルに

IPCConnectTimeout 10800
IdleTimeout 10800
ProcessLifeTime 10800
BusyTimeout 10800

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

1
追加された
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com