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番目のパスでそれらを結合する場合と同様です。
可能であれば、物事へのリンクではなく、これらの例が必要です。私は自分でリンクをグーグルで検索でき、数週間持っています。ありがとう
Ffmpegだけで2パスラウドノルムフィルターを自動的に実行する方法はありませんが、 ffmpeg-normalize
あなたのためにそれを行うプログラム。私はあなたがそれを言及したことを知っていますが、同時にビデオをエンコードしたい場合、特に2つのパスを使用したい場合は、1つの中間ファイル、つまり
ffmpeg-normalize
元の動画で、元の動画ストリームをコピーします。達成したいことは、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パーサー、またはgrep
やawk
などの他のツールを使用)、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
は、最初のパスから読み取られた値です。