まとめ
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にならないようにプルダウンメニューから変更しましょう。