2026年9月4日 金曜日
AI時短ラボ
活用· 約13

動画編集AIの自動カットを試した記録──無音検出カットは編集の代わりになるか

ffmpeg 8.0.1のsilencedetectを実際のVOICEVOX音声(4クリップ・15.47秒)にかけた実測記録。公式デフォルト設定では検出0件、閾値を下げると9件→13件→35件と増え、セリフの区切りと一致するのは一部だけだった。

動画編集AIの自動カットを試した記録──無音検出カットは編集の代わりになるか
執筆・編集:
目次

3行まとめ

  1. 自分のVOICEVOX音声素材(4クリップ・計15.47秒)にffmpeg 8.0.1のsilencedetectを公式デフォルト設定(-60dB・2秒)でかけたところ、無音区間は1件も検出されなかった
  2. 閾値を-50dB・0.1秒に緩めると9件、-35dB・0.1秒で13件、-30dB・0.05秒で35件と検出数が増えるが、増えた分の大半はセリフの区切りではなく文中の息継ぎだった
  3. 台本上の自然な区切り(3箇所)のうち、-50dBの設定で近い場所に検出があったのは2箇所だけで、残り1箇所は-30dBまで緩めてようやく検出された

何を、どう試したか

動画編集AIの「自動カット」機能の多くは、無音区間を検出して不要な間を詰める、という処理が土台になっていると考えられる。この処理そのものを自分の制作素材で実際に動かし、どこまで信用できるかを数字で確かめた。

使ったのは、自分のパイプラインのテスト用に作った、ずんだもんとめたんの掛け合い4行分のVOICEVOX音声(01.wav04.wav)。台本は以下の4行で、AIツール導入の投資対効果を尋ねるやり取りだ。

  1. 「ねえめたん。最近AIで作業、めちゃくちゃ速くなったんじゃないのだ?」(4.960秒)
  2. 「なったわよ。資料作りも調べ物も、前の何倍も速いわ。」(3.957333秒)
  3. 「いいのだ。……じゃあ一つだけ聞くのだ。その速くなった分、ちゃんと──お金に変わってるのだ?」(6.464000秒)
  4. 「……。」(0.096000秒、間だけの短い反応クリップ)

この4本をffmpeg -f concatで単純結合し、合計15.477333秒のwavファイルを作った。結合は無劣化コピーなので、各行の間には元の音声ファイル同士の境目(=台本上の自然な区切り)が3箇所できる。境目の時刻は各ファイルの尺を積算するだけで求まる。

  • 境目1(1行目→2行目):4.960000秒
  • 境目2(2行目→3行目):8.917333秒
  • 境目3(3行目→4行目):15.381333秒

この3箇所が「人間が台本を見て切るなら、ここで切る」という位置になる。これを基準に、silencedetectがどこまで近い場所を検出できるかを比較した。

実験1:公式デフォルト設定──検出0件

ffmpeg公式ドキュメントによると、silencedetectのデフォルト値は無音判定-60dB、最低継続時間2秒となっている。この設定のままかけると、次のようになった。

ffmpeg -i concat_raw.wav -af silencedetect=noise=-60dB:d=2 -f null -

結果、silence_startのログは1行も出力されなかった。検出数は0件。

理由は単純で、自然な話し言葉の間(ま)は、ここで使った音声では最長でも0.4秒程度しかなく、2秒という最低継続時間の基準を満たす無音区間がそもそも存在しないためだ。つまり「デフォルト設定のまま動画編集AIの自動カットを試す」と、何も起きない可能性が高い。これは今回の検証で一番はっきりした結果だった。

実験2:閾値を下げていく──9件→13件→35件

次に、無音判定の閾値(dB)と最低継続時間を段階的に緩めて再実行した。結果は次の通り。

設定 検出件数
-60dB・2秒(デフォルト) 0件
-50dB・0.1秒 9件
-35dB・0.1秒 13件
-30dB・0.05秒 35件

閾値を緩めるほど検出数が増えるのは当然として、問題はその中身だ。-50dB・0.1秒の設定で検出された9件のうち、境目1(4.960秒)付近には4.879583〜4.983250秒の無音区間が検出されており、これは実際の境目とほぼ一致した(誤差0.08秒程度)。境目3(15.381333秒)付近にも15.297458〜15.477333秒の無音区間があり、これも近い。

しかし境目2(8.917333秒)の近くには、-50dBの設定では検出が無かった。一番近い検出は9.550083秒からで、境目とは0.6秒以上ズレている。2行目「なったわよ。〜」から3行目「いいのだ。〜」への切り替わりは、音量的に十分な無音区間ができておらず、-50dBでは無音と判定されなかったということだ。この境目が検出されるようになったのは、-30dB・0.05秒まで閾値を緩めた設定(8.816917〜9.001708秒)だった。

実験3:閾値を緩めすぎると、文の途中まで拾う

-30dB・0.05秒の設定では検出件数が35件まで増えた。3箇所しかない台本上の区切りに対して35件という数は、当然ほとんどが「区切りではない場所」の検出だということになる。実際、3行目の「いいのだ。……じゃあ一つだけ聞くのだ。」のような、文中に読点や間投詞を挟む言い回しの内部でも、0.05〜0.4秒程度の無音区間が複数回検出されていた。これは息継ぎや、日本語特有の間投詞前後の小さな間を拾ったものだと考えられる。

この設定のままファイルを自動カットすれば、文の途中で不必要に音声が分割される箇所が大量に生まれることになる。逆にデフォルト設定では何も検出されない。この間に「ちょうどいい」設定は存在するが、それは素材ごとに違うはずで、今回の15秒程度の音声でも0件・9件・13件・35件という4段階で結果が変わった以上、汎用的な決め打ち値があるとは考えにくい。

そもそもVOICEVOX側で「間」の長さは制御できる

境目2だけ無音区間が検出されにくかった理由を、VOICEVOX ENGINE公式のAPI仕様(OpenAPIスキーマ)で確認した。音声合成のリクエストパラメータAudioQueryには、無音の長さに関わる項目が複数用意されている。

パラメータ 説明(公式スキーマの記述)
pauseLength 句読点などの無音時間。nullのときは無視される。デフォルト値はnull
pauseLengthScale 句読点などの無音時間の倍率。デフォルト値は1
prePhonemeLength 音声の前の無音時間
postPhonemeLength 音声の後の無音時間
pause_mora(アクセント句側) アクセント句の末尾につく無音モーラ。nullの場合は無音モーラを付けない

つまりVOICEVOX側では、句点・読点ごとに挿入される無音(ポーズ)の長さを、アクセント句の区切り方やpauseLength系パラメータに応じて可変で生成している。今回の実験ではpauseLength等をデフォルト(null・倍率1)のまま使っており、境目1〜3で無音の長さが均一でなかったのは、区切りの文構造(読点か句点か、直前が疑問形かなど)によって、VOICEVOX側が生成する無音モーラの長さ自体が異なっていた可能性がある。この可能性は今回のAPI仕様確認から推測できる範囲にとどまり、実際に各境目の無音モーラ長を個別に計測して検証したわけではない。

silencedetectは「検出専用」──実際にカットするならsilenceremoveが別に要る

もう一つ、今回の検証では触れなかった重要な点がある。ffmpeg公式ドキュメントを確認すると、silencedetectはログに無音区間を出力するだけのフィルタで、音声を実際に切り取る機能はない。実際に無音区間を取り除く(=自動カットを実装する)には、silenceremoveという別のフィルタが必要だと明記されている。

"silenceremove: Remove silence from the beginning, middle or end of the audio."

silenceremoveにはstart_thresholdstop_threshold(無音とみなす閾値)に加えて、stop_periodsを負の値に指定すると「音声の途中の無音を繰り返し除去する」モードになる、という仕様がある。つまり今回silencedetectで行ったのはあくまで「無音区間がどこにあるかを調べる」段階であり、実際に動画編集AIが自動カットを行う際は、検出した位置情報を使ってsilenceremove(あるいは同等の実装)で切除する、という2段階の処理になっているはずだ。今回はこのsilenceremove側の挙動までは検証していない。

「自動カット」には音声ベースと映像ベースの2種類がある

ここまでの検証は音声の無音区間を基準にした自動カットだが、動画編集ソフトにはもう一つ、映像側のシーン変化を基準にした自動カットもある。Adobe Premiere Proの「シーン編集の検出」がこれにあたり、Adobe公式ヘルプによると「フッテージを解析し、シーンの変化を自動的に検出し、適切な場所にカットを追加」する仕組みだと説明されている。カメラが切り替わった瞬間や、画面の内容が大きく変わった瞬間を検出するもので、今回自分が試した「音声が無音かどうか」とは判定基準がまったく別だ。

同じ「自動カット」という言葉でも、①音声の無音区間を基準にするもの(不要な間・言い淀みを詰める用途に向く)と、②映像のシーン変化を基準にするもの(カメラ切り替えの多い素材から編集点の下書きを作る用途に向く)の2系統があり、どちらを指しているかで検索している人が期待する結果はかなり違うはずだ。ナレーション動画で「間を詰めたい」なら前者、複数カメラの撮って出し素材で「編集点の候補が欲しい」なら後者、という向き不向きがあると考えられる。

市販ツールの内部閾値・silenceremoveの実挙動は試していない

今回の検証でわかったのは、①silencedetectのデフォルト設定は自然な会話音声には効かない、②閾値を下げれば検出できるが、台本上の全ての区切りが同じ閾値で拾えるわけではない、③さらに緩めると文中の息継ぎまで誤検出する、という3点だ。

わからなかったのは、CapCutやDaVinci Resolveなど市販の動画編集AIが内部でどのような閾値・アルゴリズムを使っているかで、これは非公開の実装詳細のため今回の検証範囲では確認できない。今回の実験はffmpegのsilencedetectという汎用フィルタを使った基礎的な検証であり、各社の「自動カット」機能そのものをテストしたわけではないことは明記しておく。それでも、無音検出という処理の性質上、似た種類のトレードオフ(閾値を上げれば見逃し、下げれば誤検出)は共通して起きるはずだ、というのがここでの見立てになる。

また、silencedetectで検出した位置を実際にsilenceremoveで切除した場合、切除後の音声が不自然な繋がりにならないか(波形の急な断絶、クリックノイズの発生など)は、今回silenceremove自体を実行していないため確認していない。VOICEVOX側のpauseLength系パラメータを変えて生成し直せば、境目2のような無音の薄い区切りも検出されやすくなる可能性があるが、これも実際にパラメータを変えて再生成する検証は行っていない。

同じ音声素材で自動字幕・音量調整を試した記録は別記事に、自動処理をそのまま使って直す羽目になった具体例はこちらにまとめている。

シェア: ポスト はてブ

出典・参照資料

AIニュースの解説を動画でも

YouTubeでは注目ニュースの背景を解説し、Xでは新着記事をお知らせしています。

コメント

まだコメントはありません。最初のコメントを書いてみませんか?

AIについて聞きたいことはありますか?

質問箱で無料で受け付けています。回答は公開され、他の方の参考にもなります。

質問箱を見る →

新しい記事をメールで受け取る

AIの新しい発表を、出典付きで整理して届けます。

関連記事

動画編集にAI音声を入れる方法──ソフト内蔵の読み上げと外部TTSの使い分けの記事画像
活用09.04読了12

動画編集にAI音声を入れる方法──ソフト内蔵の読み上げと外部TTSの使い分け

出典 ─ VOICEVOX | 無料のテキスト読み上げ
動画編集AIで実際にできること──自動字幕・ノイズ除去・自動カットを機能別に整理の記事画像
活用09.03読了14

動画編集AIで実際にできること──自動字幕・ノイズ除去・自動カットを機能別に整理

出典 ─ CapCut AI編集ツール:ビデオ、画像、
VOICEVOXの/audio_queryのmoras[]から口パクを作る──母音→口形状マップと、実wav尺へのratio補正が「?」で崩れる話の記事画像
活用08.14読了40

VOICEVOXの/audio_queryのmoras[]から口パクを作る──母音→口形状マップと、実wav尺へのratio補正が「?」で崩れる話

出典 ─ VOICEVOX ENGINE OSS AP
ローカルLLMは音声対話に向かないのか──「1〜2秒」の壁をハードウェアごとに検証するの記事画像
活用09.01読了16

ローカルLLMは音声対話に向かないのか──「1〜2秒」の壁をハードウェアごとに検証する

出典 ─ Build a Fully Offline
AI動画に自然な日本語を話させるには──表記を変えて誤読を1語ずつ潰した記録の記事画像
活用08.16読了12

AI動画に自然な日本語を話させるには──表記を変えて誤読を1語ずつ潰した記録

出典 ─ Full Tutorial | Higgsfield Blog
AI動画で頼んでいないのにキャラが喋る──生成側で音を止めるプロンプトの書き方の記事画像
活用08.14読了18

AI動画で頼んでいないのにキャラが喋る──生成側で音を止めるプロンプトの書き方

出典 ─ Sora 2 Prompting Guide
ffmpegのエンコード指定を出力ファイル名より後ろに置くと効かない──96000Hzのまま連結して尺が43秒に化けた話の記事画像
活用08.14読了23

ffmpegのエンコード指定を出力ファイル名より後ろに置くと効かない──96000Hzのまま連結して尺が43秒に化けた話

出典 ─ ffmpeg Documentation -
TTSの読み間違いはASRで書き起こしても検出できない──「一行」を「いっこう」と読ませた音声が、元テキストと差分ゼロで戻ってきた実測の記事画像
活用08.14読了29

TTSの読み間違いはASRで書き起こしても検出できない──「一行」を「いっこう」と読ませた音声が、元テキストと差分ゼロで戻ってきた実測

出典 ─ voicevox_engine API Do