私は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 つのコマンド ラインを実行できるようになります。
また、この方法には、1 回目のパスが完了するとすぐに 2 回目のパスを実行できるという利点もありますが、現在の方法では、基本的に 1 回目のパスが終了するまで待ってから 2 回目のパスを開始する必要があります。
答え2
私は mencoder を使用していますが、fifo デバイスを使用して ffmpeg/avconv でも同様のことが実行できるはずです。
$ mkfifo passlog
$ mencoder infile.flv -passlogfile passlog ........... pass=1 &
$ mencoder infile.flv -passlogfile passlog ........... pass=2