以下のようにffmpegを使ってビデオファイルをエンコードしています。
$ ffmpeg -i input.avi -pass 1 -an output.mp4
$ ffmpeg -i input.avi -pass 2 -ab 128k -y output.mp4
それで、常に2回入力しますが、一度に2パスで映像をエンコードする方法はないでしょうか?
オプションは頻繁に変更されますが、もちろん入出力ファイル名も毎回異なります。
答え1
2つの個別のコマンドで実行するのではなく、次のように1つのコマンドラインで実行できます。
$ ffmpeg -i input.avi -pass 1 -an output.mp4 && \
ffmpeg -i input.avi -pass 2 -ab 128k -y output.mp4
違いは、&&
最初のコマンドが成功した場合にのみ2番目のコマンド(2番目のパス)が実行されることです。これはまだ2つの別々の操作ですが、これにより、以前に実行する必要があった2つのコマンドラインの代わりに1つのコマンドラインを実行できます。
また、最初のパスを完了した直後に2番目のパスを実行するという利点もあります。これを行う方法では、2番目のパスを開始する前に1番目のパスが完了するのを待つ必要があります。
答え2
私はmencoderを使用していますが、fifoデバイスを使用してffmpeg / avconvで同様のことができると確信しています。
$ mkfifo passlog
$ mencoder infile.flv -passlogfile passlog ........... pass=1 &
$ mencoder infile.flv -passlogfile passlog ........... pass=2