ffmpegで音量調整
最大ピークを0dBにノーマライズ(リスト一括)
フォルダ構成
# 実行ファイル
volume.sh
# 入力ファイルリスト
list.txt
# MP3ファイルがあるディレクトリ
org
# 出力を保存するディレクトリ
result
list.txt
aaaa.mp3
bbbb.mp3
...
zzzz.mp3
aaaa.mp3
bbbb.mp3
...
zzzz.mp3
volume.sh
# 入力ファイルリスト LIST_FILE="./list.txt" # MP3ファイルがあるディレクトリ INPUT_DIR="org" # 出力を保存するディレクトリ OUTPUT_DIR="result" # 出力フォルダが存在しない場合は作成する #mkdir -p "$OUTPUT_DIR" # ログファイルを初期化 echo "Starting processing..." > process_log.txt # ファイルリストを配列に読み込む mapfile -t filelist < "$LIST_FILE" # 配列でファイルリストをループ処理 for filename in "${filelist[@]}"; do # 入力ファイルのパス input_file="$INPUT_DIR/$filename" output_file="$OUTPUT_DIR/$filename" # MP3ファイルが存在するか確認 if [ -f "$input_file" ]; then echo "Processing: $filename" >> process_log.txt # 最大音量を調べる max_volume=$(ffmpeg -i "$input_file" -af "volumedetect" -f null /dev/null 2>&1 | grep "max_volume" | awk '{print $5}') # 増幅するためのゲインを計算 (max_volumeの逆数を取る) gain=$(echo "$max_volume" | awk '{print -1 * $1}') echo "Max volume of $filename is $max_volume dB, adjusting by $gain dB" >> process_log.txt # ピークノーマライズのために音量を調整 ffmpeg -i "$input_file" -af "volume=${gain}dB" "$output_file" 2>&1 | tee -a process_log.txt else echo "File not found: $input_file" >> process_log.txt fi done echo "All files processed." >> process_log.txt
実行例
nohup sh volume.sh &
実行ログ
process_log.txt