複数の MIDI ファイルを MP3 ファイルに一括変換する Shell Script


お正月ドラマを観ながら、昔作った MIDI ファイルを MP3 にして整理するためにシェルスクリプトを作りました。

MIDI ファイルは 2020 年現在、デフォルトで QuickLook できないので、MP3 の方が取り回しが楽ですね。

ツールのインストール

Homebrew を使えるようにしておき、 Fluid Synthffmpeg をインストールします。

$ brew install fluid-synth
$ brew install ffmpeg

Sound Font を入れる

S. Christian Collins--Pianist, Composer, Virtual Instrument Designer から、「GeneralUser GS 1.471」 をダウンロードして伸長し、好きなディレクトリに配置します。

Sound Font は超絶平たくいうと MIDI 音源の種類の一つです。
質の良い Sound Font を使うと音が良くなります。
上のやつはライセンス的にも良さげなのでこれを使います。

$HOME/Music/SoundFonts/GeneralUser GS 1.471/GeneralUser GS v1.471.sf2 に配置しました。

一括変換シェルスクリプトを作る

次の create_mp3_from_midi.sh ファイルを適当なディレクトリに配置して、実行権限を与えます。

$HOME/Music/create_mp3_from_midi.sh に配置しました。

「今見ているディレクトリ」にある .mid .MID 拡張子のファイルを一括で .mp3 に変換するスクリプトです。

create_mp3_from_midi.sh
#!/bin/sh
soundfont="$HOME/Music/SoundFonts/GeneralUser GS 1.471/GeneralUser GS v1.471.sf2"
echo "🎹 SoundFont の場所は $soundfont !"

for file in `\find . -maxdepth 1 -type f`; do
  filename=${file%.*}
  fileext=${file##*.}
  if [ $fileext = "mid" ] || [ $fileext = "MID" ]; then
    echo "🎹 ${file}"
    fluidsynth -F "${filename}".wav -i "$soundfont" $file 
    ffmpeg -i ${filename}.wav -f mp3 -b:a 192k ${filename}.mp3
    rm ${filename}.wav
    echo "🎹 ===== > ${filename}.mp3"
  fi
done

echo "🎹 おしまい!"

Sound Font を配置したパスを変えた場合は、soundfont 変数に指定してください。

実行権限を与えます。

$ chmod 755 create_mp3_from_midi.sh

スクリプトをどこからでも実行できるようにする

midimp3 コマンドを作って、どこでも実行できるようにエイリアスを作ります。

$ echo 'alias midimp3="~/Music/create_mp3_from_midi.sh"' >> ~/.bash_profile
$ source ~/.bash_profile

実行!

midi ファイルがあるディレクトリに Terminal で移動して、midimp3 コマンドを実行します。

$ midimp3


できた!

参考

MacでMIDIファイルを再生&WAV出力する - Qiita