ポッドキャストや収録音声から無音区間を見つけたい——自動カットやチャプター分割の前処理として、まずは「どこが無音か」を正確に把握する必要があります。FFmpeg の silencedetect フィルタは、指定したしきい値と継続時間に基づいて無音区間の開始・終了・長さを書き出します。この記事ではコマンドの基本、noiseduration の調整、出力の読み方、自動カットへの応用までを解説します。

動作確認: FFmpeg 6.1(ubuntu-latest / GitHub Actions CI 検証済み)/対象 OS: Windows / macOS / Linux


基本コマンド

ffmpeg -i input.mp3 -af silencedetect -f null /dev/null

出力ファイルは生成せず、無音区間の情報を標準エラー出力に表示します。


出力の読み方

[silencedetect @ 0x...] silence_start: 5.32
[silencedetect @ 0x...] silence_end: 8.15 | silence_duration: 2.83
[silencedetect @ 0x...] silence_start: 45.7
[silencedetect @ 0x...] silence_end: 47.2 | silence_duration: 1.5
フィールド説明
silence_start無音開始時刻(秒)
silence_end無音終了時刻(秒)
silence_duration無音の長さ(秒)

しきい値(noise)と最小継続時間(duration)の調整

デフォルト値

パラメータデフォルト説明
noise-60dBこの音量以下を「無音」と判定
duration2この秒数以上続く無音のみ報告

カスタム例:-40dB以下・0.5秒以上を無音と判定

ffmpeg -i input.mp3 -af "silencedetect=noise=-40dB:duration=0.5" -f null /dev/null
  • noise を大きく(-40dB等): 背景ノイズも無音として検出
  • duration を短く(0.1秒等): 短い息継ぎも検出
  • duration を長く(3秒等): 長い沈黙のみ検出

動画ファイルへの適用

ffmpeg -i input.mp4 -af "silencedetect=noise=-50dB:duration=1" -f null /dev/null

動画ファイルでも音声トラックが解析されます。


出力を絞り込む(grepを組み合わせる)

必要な行だけを抽出する例(Linux/macOS):

ffmpeg -i input.mp3 -af silencedetect -f null /dev/null 2>&1 | grep silence_

Windowsのコマンドプロンプトでは findstr silence_ を使います。


応用:無音区間を使った自動カット

silencedetect の出力から無音区間を取得し、-ss/-to でトリミングする流れ:

  1. silencedetectで silence_start / silence_end を取得
  2. 無音区間を避けた時間範囲を計算
  3. ffmpegのトリミングコマンドで実際にカット

この工程をシェルスクリプトや Python で自動化することで、ポッドキャストや講義動画の無音部分を一括除去できます。


よくある設定パターン

用途noiseduration
ポッドキャストの無音除去-40dB0.3
録画映像の長い無音スキップ-50dB3
音楽ファイルのトラック境界検出-60dB1
収録時の無音部分のみ検出-30dB0.5

関連リソース

よく使うオプション・フィルタ・コーデック設定をまとめた PDF チートシートです。手元に置いておくと調べる時間を短縮できます。

FFmpeg チートシート

関連記事


動作確認: ffmpeg 6.1 / Ubuntu 24.04 (GitHub Actions runner) 一次ソース: ffmpeg.org/ffmpeg-filters.html#silencedetect / trac.ffmpeg.org/wiki/AudioVolume


よくある質問

無音判定の閾値は?

-30dB が一般的なデフォルトです。録音環境のノイズフロアより 5〜10dB 上を目安にしてください。スタジオ録音なら -50dB、屋外録音なら -25dB 程度。

無音区間を自動でカットしたい

silenceremove フィルタを使います。-af "silenceremove=start_periods=1:start_silence=0.5:start_threshold=-30dB" で先頭・末尾の無音をカットできます。

無音タイムスタンプの取得方法

ffmpeg -i in.mp4 -af silencedetect=noise=-30dB:d=0.5 -f null - 2>&1 | grep silence で無音区間の開始・終了時刻が出力されます。

長さ(duration)はどう設定?

d=0.5(0.5 秒以上の無音を検出)が一般的です。短くしすぎると瞬きや息継ぎを検出してしまいます。Vlog なら 1 秒以上、ナレーションなら 0.3 秒など用途で変えてください。

BGM 入りでも無音検出できる?

BGM があると常時音が出ているため検出できません。事前に音声から BGM を分離(-map 0:a:1 など)してから silencedetect を適用してください。