ffmpeg-normalizeを使用して100個のmp4ビデオファイルの音量を正規化したい

ffmpeg-normalizeを使用して100個のmp4ビデオファイルの音量を正規化したい

ffmpeg-normalize を使用して 100 個の mp4 ビデオ ファイルの音量を正規化したいと考えています。プログラムがすべてのファイルを実行して適切なレベルを決定する方法はありますか。それとも、入力として 1 つのファイルを与える必要がありますか。100 個のファイル名をリストせずにフォルダー全体を変換できますか。ffmpeg-normalize *.mp4 (コマンド ライン プロンプトがビデオのディレクトリにあるとき) を使用しようとしましたが、「ファイル *.mp4 が存在しません」というエラーが発生しました。Windows システムで ffmpeg を使用していますが、nVidia Shield の KODI プレーヤーでファイルを再生します。音量が大きく変動することなくビデオを再生できるようにしたいだけです。

答え1

このffmpeg-normalizeツールは複数のファイルを入力として使用できます。ワイルドカードは Linux 固有です。Windows では、ffmpeg-normalize の*.mp4説明にあるように、単純なループを使用できます。README

for %%f in ("*.mp4") do ffmpeg-normalize "%%f" -c:a aac -b:a 192k -ext mp4

これにより、拡張子と AAC エンコード (正規化) されたオーディオ ストリームをnormalized持つ出力ファイルがフォルダー に作成されます。mp4

デフォルト設定では、指定されたターゲットボリュームで EBU R 128 ラウドネス正規化が使用されるため、複数のファイルを「調整」する必要はありません。すべてのファイルに対して実行するだけです。

使用方法に関する質問については、まず README を参照してください。それ以外の場合は、GitHub に問題を投稿してください。

答え2

ここで作成したような Windows ソリューションを、何年も前に誰かが作成したのを見たことがありますが、それが何と呼ばれていたか、どこで入手できるかはわかりません。また、AVI ファイル専用だったと思います。MP4 を扱うために、私はゼロから自分で作成することにしました。このサイトは、私がここまで到達するのに大いに役立ったので、興味のある方全員とこれを共有したいと思います。

私は Windows 10 で、複数の *mp4 ファイル (名前にスペースを含む) を受け取り、mp3gain を使用して音量を正規化できる DOS バッチ スクリプトを作成しました。(MP4GAIN を試しましたが、試用期間は 1 時間ほどで終了しました)。この方法の方が MP4GAIN よりはるかに高速に処理できることが分かりました。これを行うのは、ffmpeg と mp3gain をすべてのステップで具体的に制御し、mp4gain や ffmpeg-normalize ではできないことができるためです。

絶対に万能というわけではありませんし、最適化もされていません。むしろ、誰かが自分の目的に合わせて調整/微調整するための足掛かりになるかもしれません。私はオーディオを mp3 VBR として抽出し、mp3gain で魔法をかけ、元に戻します。5 つの同時正規化を処理できることがわかりましたが、一度にそれ以上試したい場合は、使用可能なハード ディスク領域に依存します。

フォルダーを作成します - C:\Vids はどこにでも構いませんが、その中に元のフォルダー、作業中のフォルダー、完了したフォルダーを入れます。

C:\Vids
C:\Vids\original
C:\Vids\working
C:\Vids\completed

最新版をダウンロードしてください。私が確認したところ、2020 年 9 月 1 日時点では無料です。私は以下を使用しています。

C:\Vids\ffmpeg.exe  ( ffmpeg version git-2020-08-28-ccc7120 )
C:\Vids\mp3gain.exe ( mp3gain version 1.4.6 )

を作成しC:\Vids\normalize.bat、そこに以下を入力します:

echo off
setlocal enableextensions enabledelayedexpansion

for %%I in (original\*.mp4) DO (

  echo Creating working\%%~nI.bat
  echo echo off > "working\%%~nI.bat"
  echo echo Unpacking audio and video from %%I . >> "working\%%~nI.bat"
  echo echo ..\ffmpeg.exe -v 0 -i "..\%%I" -q:a 0 -map a ".\%%~nI_audio_only.mp3" -vcodec copy -map 0:v ".\%%~nI_video_only.mp4" >> "working\%%~nI.bat"
  echo ..\ffmpeg.exe -v 0 -i "..\%%I" -q:a 0 -map a ".\%%~nI_audio_only.mp3" -vcodec copy -map 0:v ".\%%~nI_video_only.mp4" >> "working\%%~nI.bat"
  echo echo . >> "working\%%~nI.bat"
  echo echo Normalizing extracted audio with Mp3Gain. >> "working\%%~nI.bat"
  echo echo ..\mp3gain.exe ".\%%~nI_audio_only.mp3" >> "working\%%~nI.bat"
  echo ..\mp3gain.exe ".\%%~nI_audio_only.mp3" >> "working\%%~nI.bat"
  echo echo Reconstructing normalized video from component parts. >> "working\%%~nI.bat"
  echo echo .\ffmpeg.exe -v 0 -i ".\%%~nI_video_only.mp4" -i ".\%%~nI_audio_only.mp3" -codec copy "..\completed\%%~nI%%~xI" >> "working\%%~nI.bat"
  echo ..\ffmpeg.exe -v 0 -i ".\%%~nI_video_only.mp4" -i ".\%%~nI_audio_only.mp3" -codec copy "..\completed\%%~nI%%~xI" >> "working\%%~nI.bat"
  echo echo Post-process clean up. >> "working\%%~nI.bat"
  echo del ".\%%~nI_audio_only.mp3" >> "working\%%~nI.bat"
  echo del ".\%%~nI_video_only.mp4" >> "working\%%~nI.bat"
  echo echo Done. >> "working\%%~nI.bat"
  echo echo on >> "working\%%~nI.bat"
  
)
pause
echo on

元の mp4 をC:\Vids\originalフォルダーに配置し、normalize.bat を実行します。私は cmd.exe DOS プロンプトから実行しますが、Windows エクスプローラーでバッチ ファイルをダブルクリックすることもできます。元のフォルダーで mp4 が検索され、 に個別のバッチ ファイルが作成されます。 でこれらのバッチ ファイルを 1 つ、2 つ、または 4 つ同時にC:\Vids\working起動できます。C:\Vids\working

それぞれの元の mp4 は、オーディオなしの mp4 とビデオなしの mp3 VBR に解凍されます。
ビデオとオーディオの抽出は同時に行われます。これにより、ビデオまたはオーディオが一方より短くならずに、後で再び結合できる 2 つのファイルが生成されると考えられます。ビデオとオーディオの抽出は に入りますC:\Vids\working

次に、抽出された mp3 に対して mp3gain.exe が実行され、オーディオ ストリームとビデオ ストリームが ffmpeg で再度結合され、C:\Vids\completedフォルダーに配置されます。

プロセスが完了すると、一時的に解凍された mp4 および mp3 は削除されます。

=======

制限事項:

mp4 のファイル名には、特定の特殊文字 (! や ♫ など) を含めることはできませんが、スペース ( ) [ ] # ' @ - _ などの文字は使用できます。生成されたスクリプトが失敗したり、すぐに終了したりしてビデオ ファイルが処理されない場合は、元のファイルの名前を変更してみてください。

埋め込まれたオーディオがすでに MP3 であるかどうかを確認するための ffprobe のチェックがありません。また、すべての AAC オーディオが aacgain.exe で正規化できるわけではないことがわかりました。そのため、すべてを最高品質で MP3 VBR として出力するように強制しています。元のオーディオの品質が十分であれば、これを実行してもかまいません。

リクエスト

このスクリプトをさらに拡張して、さまざまなオーディオ タイプを認識し、すでに mp3 の場合はオーディオのコピーを実行できるようにしていただければ、便利です。または、AAC オーディオを mp3 に変換するか、AAC のままにしておく必要があることを認識します。

他のビデオ ファイル タイプ (Avi、mkv、wmv など) も処理できるようにします。

各ステップの後に障害が発生したかどうかを確認し、スクリプトを終了し、再抽出を行う必要がないように再開機能を許可します。

有効にするためのフラグを追加する圧縮するビデオ ファイルは、スペースを節約するために libx264 -crf 18 -preset veryslow を使用しますが、これにより動作が非常に遅くなります。

他に考えられる機能強化。

ありがとう。

〜ラム

関連情報