ffmpegによる2パスエンコードを一気に

ffmpegによる2パスエンコードを一気に

私は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

関連情報