プログレス
変換の進行状況を、別途ファイルにする場合、-progress
の後に出力ファイルを指定します。
ffmpeg -progress prog.txt -i town.flac town.mp3
以下のように、変換の進行情報が、約1秒毎に書き出されます。
ログレベル
FFmpegのログは、標準出力ではなく標準エラー出力に書き出されるため、それをエラー情報のみ出力するには、-loglevel
で指定します。
ffmpeg -loglevel error -i town.flac town.mp3
このオプションは指示された値で、ログ情報の出力を制御するので、ここではerror
を指定してます。
バックグラウンド処理
PHPでFFmpegをバックグランドで処理するには、
ffmpeg -i town.flac town.mp3 </dev/null >/dev/null 2>/dev/null &
/dev/null
はデータの破棄を指示し、その手前の、<
、>
、2>
、はそれぞれ、標準入力、標準出力、標準エラー出力を意味します。</dev/null
で、変換時のコマンド入力待ちを制御し、>/dev/null
、2>/dev/null
で、それぞれの出力を破棄して、最後に、末尾に&
を付けてバックグラウンド処理を明示します。
FFmpegのログは、前述のように標準エラー出力に書き出されるので、それをファイルに、ここではerror.logに書き出すとすると、
ffmpeg -i town.flac town.mp3 </dev/null >/dev/null 2>error.log &
以上は、主に公式のwikiを参考にしました。
これに加えて、コマンド実行したタスクのプロセスIDを取得したかったので、末尾に、echo $!
を付けます。
ffmpeg -i town.flac town.mp3 </dev/null >/dev/null 2>error.log & echo $!
PHPはコマンド実行の関数が数種類ありますが、このecho $!
で出力されるプロセスIDを取得するのに、サイトの方ではexec()
を用いました。上記のコマンドを$command
と置くと、
exec($command,$processID);
第2引数の形式は配列であり、コマンド実行の出力が1行毎に格納されますが、ここではプロセスIDのみ出力されるので、$processID[0]
として、これを取り出します。
URL: sac.ringil-music.com
環境: さくらのVPS・Centos7・Nginx・PHP-FPM