web-dev-qa-db-ja.com

単一ラインのffmpeg loudnorm 2pass

TL; DR ffpmpegを使用した単一行のloudnorm 2passの例(ffmpeg-normalizeは単一のスレッド/プロセスであり、他のffmpegオプションを組み合わせることはできません)

Ffmpegは比較的新しいので、ラウドノルムの例はそれほど多くはありません。ffmpegを10年ほど使用しています。ラウドノルムは初めてです

もう読んだ:

http://k.ylo.ph/2016/04/04/loudnorm.html

ffmpegを使用してオーディオを正規化するにはどうすればよいですか?

これは役に立ちます。ただし、複数のffmpegエントリを1に統合しようとしています。ffmpeg-normalize(python)ライブラリを使用すると、単一のスレッド/プロセスにも制限されます。遅い

ffmpeg x264の2パスの場合、次のように簡単に実行できます。

ffmpeg -y -i $FILE -c:v libx264 -b:v 4000k -pass 1 -c:a aac -b:a 256k -f mkv /dev/null && \
ffmpeg -i $FILE -c:v libx264 -b:v 4000k -pass 2 -c:a aac -b:a 256k $FILE.mkv

しかし、loudnormには存在しないようです。シングルパスと2パスでそれを行う方法がまったくわかりませんか?

現在、私はビデオをエンコードしてからオーディオを正規化し、最後にメタデータとチャプターデータが存在する場合はファイルから削除しています(存在するかどうかに関係なく)

これにより、3つの使い捨てファイルが作成されます(元のファイルを含む)

1行でloudnormを実行できると、他のものを追加するのに役立ちます。また、x264の2パスとloudnormの2パスを同時に実行することもできますか? 2つを処理してから、2番目のパスでそれらを結合する場合と同様です。

可能であれば、物事へのリンクではなく、これらの例が必要です。私は自分でリンクをグーグルで検索でき、数週間持っています。ありがとう

2
user1654164

Ffmpegだけで2パスラウドノルムフィルターを自動的に実行する方法はありませんが、 ffmpeg-normalize あなたのためにそれを行うプログラム。私はあなたがそれを言及したことを知っていますが、同時にビデオをエンコードしたい場合、特に2つのパスを使用したい場合は、1つの中間ファイル、つまり

  • ファーストラン: ffmpeg-normalize元の動画で、元の動画ストリームをコピーします。
  • 2回目の実行:正規化されたオーディオファイルまたは元のファイルのビデオストリームのx264エンコーディング(マルチスレッド)。

達成したいことは、ffmpegだけでは実現できません。特に複数のファイルを並行して処理する場合は、独自のソリューションをプログラムする必要があります。これにより、1回のffmpeg実行で1つのスレッドしか使用されていない場合でも、プロセスが確実に高速化されます。

開始点として、FFmpegリポジトリに simpler Ruby script )もあります。これは2つのラウドノルムパスを実行し、最初の実行の統計を読み取ります。マルチスレッドで2パスx264エンコーディングを追加で実行するように変更するには、つまり、最初の実行で最初のx264パスを実行し、2番目の実行で2番目のパスを実行します。

最初のパス:

ffmpeg -y -i $FILE -c:v libx264 -b:v 4000k -pass 1 -filter:a loudnorm=print_format=json -f mkv /dev/null

loudnorm出力からJSON統計を読み取り(たとえば、PythonのJSONパーサー、またはgrepawkなどの他のツールを使用)、2番目のパスを実行します。

ffmpeg -i $FILE -c:v libx264 -b:v 4000k -pass 2 -filter:a loudnorm=linear=true:measured_I=$input_i:measured_LRA=$input_lra:measured_tp=$input_tp:measured_thresh=$input_thresh -c:a aac -b:a 256k $FILE.mkv

どこ $input_i$input_lra$input_tp$input_threshは、最初のパスから読み取られた値です。

3
slhck