私は php に exec() を使用して ffmpeg にシェルするスクリプトを持っています - それは画像と mp3 から mp4 を作成します。
これは私が実行しているコマンドです:
"C:\\Program Files\\ffmpeg\\bin\\ffmpeg.exe" -loop 1 -r 0.1 -i image.jpg -i mp3.mp3 -c:v libx264 -preset ultrafast -crf 18 -tune stillimage -c:a copy -filter:v "[in] scale=-1:720, pad=1280:720:640-iw/2 [out]" -shortest out.mp4 -report
ほとんどの場合、問題なく動作し、約 5 秒かかってから終了します。ただし、100% の CPU を使用して ffmpeg.exe プロセスが「ハング」し、手動で「強制終了」されるまでそこにとどまることがあります。
ffmpeg.exe は何もしていないようです。作成した .mp4 は不完全で大きくなっていません。ログ ファイルは変更されておらず、すべてのファイルの変更時間も変更されていません。100% の CPU を使用している理由がわかりません。
同じ画像と mp3 を取得してもう一度実行すると、問題なく動作します。
スイッチを-report
オンにしましたが、ログ ファイルには、失敗して終了しなかった理由を示すものは何もないようです。以下はログ ファイルの最後の行 (934 行) です。何らかの理由でフレーム 10 の後に停止したようです。
[libx264 @ 0000000001E37D10] frame= 6 QP=18.00 NAL=2 Slice:P Poc:12 I:0 P:0 SKIP:3600 size=11 bytes
[libx264 @ 0000000001E37D10] frame= 7 QP=18.00 NAL=2 Slice:P Poc:14 I:0 P:0 SKIP:3600 size=11 bytes`
[libx264 @ 0000000001E37D10] frame= 8 QP=18.00 NAL=2 Slice:P Poc:16 I:0 P:0 SKIP:3600 size=11 bytes
[libx264 @ 0000000001E37D10] frame= 9 QP=18.00 NAL=2 Slice:P Poc:18 I:0 P:0 SKIP:3600 size=11 bytes
[libx264 @ 0000000001E37D10] frame= 10 QP=18.00 NAL=2 Slice:P Poc:20 I:0 P:0 SKIP:3600 size=11 bytes`
Process Explorerを使用してハングしたffmpeg.exeを調べてみましたが、バックグラウンドプロセスであるため、意味のあるものを見つけることができないようですが、ここに何かが欠けている可能性があります-バックグラウンドプロセスをフォアグラウンドに?
どんなアイデアでも大歓迎です:-)