🎙️

【Podcast自動編集AIアプリを作ろうとしたけど先に競合がいた】

に公開

こんにちは!
神山まるごと高専という学校で、2年生の間 Podcast部という部活動で活動してました。
https://kamiyamacast.jp/
このページも作りました。

「Podcastの編集ってめちゃくちゃ面倒くさいな……」という個人的な悩みから、Podcast自動編集AIアプリを自作してみた話を書きたいと思います。

結論から言うと、意気揚々と作っていたら途中で超強力な競合(Descriptとか)の存在を知り、「先にこれがあったのか……」と白目を剥いたのですが、それはまた後の話。

今回は、このアプリがどのような仕組みで動いているのか、そして開発過程で一番驚いた
「無音検出はAIなしでもFFmpegだけで完結する」 という技術的な学びを中心に共有します。

作ったもの

Podcastの編集において、最も時間がかかる作業は以下の3つだと思います。

「えー」「あのー」や、長い無音(沈黙)のカット
BGMの挿入と、声に合わせた音量調整(ダッキング)
要約の作成とチャプター分け
これらを「録音ボタンを押して喋り終わるだけ」で全自動でやってくれるアプリを目指しました。

https://youtube.com/shorts/bKTjpsZPOTU

①録音をします、動画では一人二役で話してます
②AI文字起こしや要約と無音検出をします
③かとタイミングをトグルにしたものと音声が流れます。Exportはできませんでした

アプリの構成と仕組み

アプリはFlutterで構築し、バックエンド(ロジック層)の主役は以下の3兄弟です。

FFmpeg: 音声処理・編集のすべて(主役)
Whisper: 文字起こし・セグメント化
ChatGPT (GPT-4o): 要約・タイトル生成
アーキテクチャ図

実装の流れ

録音: Flutterで録音し、生データを保存。
無音・カット候補の検出: FFmpegで無音区間を特定。
文字起こし: OpenAIのWhisper APIを使ってテキスト化。
要約生成: GPT-4oでタイトルと概要を作成。
書き出し: ユーザーが編集ボタンを押すと、FFmpegのフィルターを組み合わせて一気に「切り貼り・BGM合成・ノーマライズ」を行う。
驚愕:FFmpeg先生、AIなしで「無音検出」ができる
ここが今回の技術的なハイライトです。 当初は「無音区間の判定も、AIを使って音声波形を分析しなきゃいけないかな?」と身構えていました。

ところが調べてみると、音声処理の神・FFmpegには、そのものズバリの機能が用意されていました。

silencedetect フィルター

FFmpegには silencedetect というオーディオフィルター(AF)があります。これを使うと、指定した閾値以下の音量が、指定した時間以上続いた場所をログとして吐き出してくれます。

ffmpeg -i input.mp3 -af silencedetect=n=-30dB:d=0.5 -f null -
n=-30dB: ノイズレベルの閾値(これ以下を無音とみなす)
d=0.5: 0.5秒以上続いたら無音と認定
これを実行すると、標準出力に以下のようなログが流れます。

[silencedetect @ 0x...] silence_start: 12.5
[silencedetect @ 0x...] silence_end: 14.2 | silence_duration: 1.7
「これ、そのままカット候補に使えるじゃん……!」

AIを使わずとも、伝統的な信号処理だけでPodcast編集の最大の敵である「無音」を秒速で特定できることに感動しました。

実装の裏側

検出した無音区間をカットするだけでは、Podcastとしては不十分です。 プロっぽい仕上がりにするために、以下の処理もすべてFFmpegの「フィルターコンプレックス」で繋ぎ込みました。

  1. atrim & concat
    検出した無音以外の区間を atrim で抽出し、最後に concat でガッチャンコします。 ミリ秒単位で「どの区間を繋ぐか」という指示書を動的に生成してFFmpegに叩き込みます。

  2. サイドチェーン・コンプレッション(ダッキング)
    声が流れている間だけBGMの音量を下げ、声が止まるとBGMが戻る「ダッキング」。 これも実はFFmpegの sidechaincompress フィルターで実現可能です。

FFmpegっすごい。
誰が作ったんだろう⇨ ファブリス・ベラールさんだそうです

Podcastに使ってください、みたいな機能してる

簡易的なダッキングのイメージ

[bgm][voice]sidechaincompress=threshold=-20dB:ratio=10[output]
3. ラウドネス・ノーマライズ
Podcastには「聴きやすい一定の音量」が求められます。 これも loudnorm フィルター一発で、放送業界標準のラウドネス値(-16 LUFSなど)に調整できます。

Podcast自動編集の既存アプリ

vrew

https://vrew.ai/ja/

個人的に使うならこれだなと思った日本語のwebサイト。録音をしたら単語をブロックでまとめてくれる。ブロック右上のばつ印で削除。

一気に消したり流し聞きしながら消せないのが残念だけど、無音検出精度も良くて正しい場所を消せば全く気にならない感じにうまく出来上がる。

descript

https://web.descript.com/
後にあげたけどこっちの方が有名っぽかった。でも個人的に使いずらいなと思ってしまった、で
きることが多すぎて、、、

どちらもSpotify連携で直接podcastに送るみたいなことはしていないみたいだった。知り合いのPodcastやってる人に、まだ抜け道ないかってのを聞いてみたい。

Discussion