業務で 1 時間以上のインタビュー録音や講義を毎週いくつも処理していると、毎回ブラウザにアップロードして、手で変換結果をコピペするフローが地味につらい。音声ファイル自体の品質差も大きく、会議録音をそのまま突っ込むと認識精度が出ないので、ffmpeg で前処理してから 音声文字起こし に流す運用に落ち着いた。
前処理は 3 ステップ。シェルスクリプト 1 本にまとめて毎週走らせている。
1. 形式とサンプリングレートを揃える
m4a wav mp3、さらに mp4 の音声トラック、と素材が混在するので、最初に PCM 16kHz mono に揃える。
ffmpeg -i input.m4a \
-ac 1 -ar 16000 \
-c:a pcm_s16le \
interview_16k.wav
Whisper 系モデルの前段に揃える値で、サイズが約半分になる。1 時間分の wav でも 100MB 前後に収まる。
2. 長い無音とヘッド/テールを削る
会議録音は最初と最後に無音が入っている。
ffmpeg -i interview_16k.wav \
-af "silenceremove=start_periods=1:start_silence=0.3:start_threshold=-40dB:stop_periods=-1:stop_silence=0.3:stop_threshold=-40dB" \
trimmed.wav
-40dB くらいが会議録音だとちょうどいい。強めに効かせると発言の頭が切れるので、現場の音源に合わせて ±5dB 動かす。
3. 音量ノーマライズ
小声の発言が認識落ちするのを防ぐため、ラウドネスノーマライズをかけてから wav を出力する。
ffmpeg -i trimmed.wav \
-af "loudnorm=I=-16:TP=-1.5:LRA=11" \
-c:a pcm_s16le \
final.wav
I=-16 はポッドキャスト配信で使われる値。会話中心の音声ではこのあたりが安定する。
ここから先は音声文字起こしへ
整形済み final.wav を 音声文字起こし にアップロードする。元言語は自動検出のまま、話者分離だけオンにする。タイムスタンプ付きの編集可能テキストが出て、AI 要約も同時に付く。
mp4 から直接音声トラックだけ取り出して同じパイプラインに流すパターンが一番多い。
ffmpeg -i meeting.mp4 -vn \
-ac 1 -ar 16000 -c:a pcm_s16le \
meeting_16k.wav
ブラウザだけで完結するので、Python 環境を整備できないメンバーでも、ffmpeg の変換スクリプトだけ共有しておけば同じ形式に変換できる。議事録のフォーマットが揃うと、後段の検索や引用もしやすい。
まとめ
- 録音ファイルの品質を揃える ffmpeg 前処理:PCM 16kHz mono、無音除去、ラウドネスノーマライズ
- 前処理済み wav をブラウザの音声文字起こしに投げる
- チームで ffmpeg コマンドを共有すると、議事録の二次加工が楽になる
ffmpeg の前処理だけで認識精度が体感で別物になるので、議事録を大量に捌く人は試す価値あり。


