ffmpegは一度に2passエンコーディングを実行します。

ffmpegは一度に2passエンコーディングを実行します。

以下のように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

関連情報