複数のmp3ファイルを無音除去しつつクロスフェード結合する方法

まとめ

ffmpeg とバッチファイル(bat)で、複数のmp3ファイルをまとめてドラッグ・アンド・ドロップ(DnD)で無音部分を除去しつつクロスフェードでの結合まで全部行う

HowTo:

以下のコードをBatファイルとして保存します。

@echo off
setlocal enabledelayedexpansion

set silenceremove=silenceremove=stop_periods=-1:stop_threshold=-50dB:detection=peak
set fade=3
pushd %~dp0
set ffmpeg=ffmpeg

set i=0
for %%f in (%*) do (
set /a i+=1
if "!i!"=="1" (
echo 無音除去中: %%~f
%ffmpeg% -hide_banner -y -i "%%~f" -af "!silenceremove!" merged.wav
) else (
echo 無音除去中: %%~f
%ffmpeg% -hide_banner -y -i "%%~f" -af "!silenceremove!" next.wav

echo クロスフェード中: merged.wav + next.wav
%ffmpeg% -hide_banner -y -i merged.wav -i next.wav -filter_complex "[0][1]acrossfade=d=!fade!" merged_new.wav

REM 出力が成功していればmerged_new.wavをmerged.wavに置き換える
if exist merged_new.wav (
move /y merged_new.wav merged.wav > nul
) else (
echo エラー: merged_new.wavが作成されていません。処理を中断します。
pause
exit /b
)
del next.wav
)
)

:: 日付を取得
for /f "tokens=2 delims==" %%i in ('wmic OS Get localdatetime /value') do set datetime=%%i

:: 整形(例:2025-06-08_0120)
set "YYYY=!datetime:~0,4!"
set "MM=!datetime:~4,2!"
set "DD=!datetime:~6,2!"
set "hh=!datetime:~8,2!"
set "nn=!datetime:~10,2!"

set "datetime=!YYYY!-!MM!-!DD!_!hh!!nn!"

echo 最終出力をmp3に変換中...
%ffmpeg% -hide_banner -y -i merged.wav -codec:a libmp3lame -qscale:a 2 output_%datetime%.mp3

echo wavファイルを削除中...
del merged.wav

echo 完了!結果は output_%datetime%.mp3 です。
pause


– – – – – –

ffmpegのファイルパスや、時間などは各自調整してください。
あとはこれを ffmpeg.exeと同じフォルダにbatとして保存して、ドラッグ・アンド・ドロップでmp3ファイル群を渡せばOKです。自動で処理が走ります。

※ffmpegのDL方法などは↓を参考に。

https://qiita.com/Tadataka_Takahashi/items/9dcb0cf308db6f5dc31b

https://ffmpeg.org/download.html#build-windows

Appendix | 補足:

バッチファイルの書き方:
メモ帳に↑のコードを貼り付け、拡張子.batでWin10の場合は文字エンコーディングを「ANSI」で保存します。 (Win11はUTF8でOKだったはず)
保存時に.txtにならないようにプルダウンメニューから変更しましょう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です