高見知英の技術ログ

技術関係のログをQiitaから移行してきました。プログラミングのほか、使っているアプリの細かい仕様についてなど書いていきます。

stand.fmの音声に独自でBGMを貼り付けるツールを作った

表題の通りですが、先日stand.fm用に録音した音声に、独自に作ったBGMを貼り付けるツールを作りました。

github.com

やってることはそんなに難しいことではなく…

  1. あらかじめBGMに使えるループ可能なBGMを用意する(1分程度)
  2. BGMと録音した音声をPythonのPydubモジュールで読み込む(pydub.AudioSegment#from_mp3())
  3. 録音の長さ+イントロ+アウトロぶんの長さ、BGMを敷き詰めた音声を作る(AudioSegment#__add__(AudioSegment))
  4. 3で作った音声のイントロ終了後~アウトロ開始直前までのボリュームを小さくする(AudioSegment#__add__(int), pydub.utils.ratio_to_db)
  5. ボリュームを小さくした部分に、録音した音声を合成する(AudioSegment#overlay())
  6. 5でできた音声をファイルに0000.mp3として保存する(AudioSegment#export())
  7. おまけに、元の録音音声に含まれるID3タグをすべてコピーする(mutagen.id3.ID3クラス)

という感じです。手順3の音声を作るときなど多少の計算が必要にはなりますが、とりあえずかなり簡単に音声ファイルをいじることができます*1

そもそもなぜそんなことをしたのか

stand.fmには、アプリ側で用意してあるBGMを設定する機能があります。なので、stand.fmにのみ音声を投稿する場合、BGM設定は不要です。

ただわたしは、stand.fmに公開した音声をAnchor.fmにも公開したい と思ったので、独自にBGMをつけることになりました*2

というわけで、公開したのが以下となります。音声聞いてみたいけどstand.fmアカウントないしなー と言う人や、ポッドキャスト愛好家でいちいちstand.fmで音声聞きたくない と言う人はどうぞ。

anchor.fm

作った感想

とりあえずPydubを使ってみて、ここまで簡単にできるのかー と思いました。ついでにBGMも幾つか作ったので日替わりBGMを実現することができました(BGMの作成には、LaunchpadというiPad用のアプリを使いました)。

ちゃんとフェードイン・フェードアウトやゲイン調整などちゃんとしたものを実装しようとするとそこそこに手間が掛かりそうですが、とりあえずここまではできるんだな と言うことがわかりました。

注意点

これといって注意といえる注意点はないのですが・・・。

強いて言うなら、Pydubは場面によってミリ秒単位で時間を扱うときと、秒単位で時間を扱うときがあるので、それを混同しないように気をつける必要があります*3

音声編集にも使えるかも

うちではstand.fmのほか、SBCast.やUdemy音声などの音声編集も行なっています。ゲインの調整などの定型処理が挟まることもあり、微妙に面倒だなあ と思っていました。

ただ、ひょっとするとこれはこのへんの分野にも使えるのかもしれないなあ と思いました。

今後Pydubを他でも使う機会があれば、また使ってみようかなあ と思います。

参考文献

*1:なお、mp3の読み込みにはFFMPEGが必要です。Windowsの場合Chocolateyで入れると楽です

*2:Anchor.fmにもBGMをつける機能はありますが、その機能を使うと双方で別のBGMがかかってしまうので

*3:音声を切り貼りするときはミリ秒、音声データの長さを処理するときは秒