FFmpeg + Whisper ワークフロー
一部のコンテンツは LLM によって生成されており、まだ手動で検証されていません。
FFmpeg と Whisper を組 み合 わせて、完全 な音声 文字 起 こしワークフローを構築 する方法 を紹介 します:動画 /音声 ファイルから音声 トラックを抽出 し、Whisper に最適化 された形式 に変換 し、タイムスタンプ付 きの文字 起 こしを生成 します。
ワークフロー概要
flowchart LR
A[動画/音声ファイル] --> B[FFmpeg 音声抽出]
B --> C[WAV に変換]
C --> D[Whisper 文字起こし]
D --> E[タイムスタンプ + テキスト]
なぜ FFmpeg で前処理 が必要 か?
Whisper は様々 な音声 フォーマットを直接 処理 できますが、FFmpeg で事前 変換 すると以下 の利点 があります:
| 利点 | 説明 |
|---|---|
| 統一 フォーマット | フォーマット互換性 の問題 を回避 |
| ファイルサイズ削減 | 不要 な動画 トラックを削除 |
| 最適 パラメータ | 16kHz モノラルは Whisper の訓練 時 のフォーマット |
| 一括 処理 | 標準化 されたフローで自動化 が容易 |
Step 1:FFmpeg 音声 抽出 と変換
基本 変換 (推奨 フォーマット)
ffmpeg -i input.mp4 -vn -acodec pcm_s16le -ar 16000 -ac 1 output.wav| パラメータ | 説明 |
|---|---|
-vn | 動画 トラックを削除 |
-acodec pcm_s16le | 16-bit PCM エンコーディング(無損失 ) |
-ar 16000 | サンプルレート 16kHz(Whisper 最適化 ) |
-ac 1 | モノラル |
元 の音質 を維持
ffmpeg -i input.mp4 -vn -acodec pcm_s16le -ar 44100 -ac 2 output.wavネットワークストリームから抽出
# HLS ストリームから音声を抽出
ffmpeg -i "https://example.com/stream.m3u8" -vn -acodec pcm_s16le -ar 16000 -ac 1 output.wav
# ダウンロード時間を制限(例:最初の 10 分)
ffmpeg -i "https://example.com/stream.m3u8" -t 00:10:00 -vn -acodec pcm_s16le -ar 16000 -ac 1 output.wav音声 フォーマット変換 一覧
| 元 フォーマット | 変換 コマンド |
|---|---|
| MP4 動画 | ffmpeg -i video.mp4 -vn -ar 16000 -ac 1 output.wav |
| MKV 動画 | ffmpeg -i video.mkv -vn -ar 16000 -ac 1 output.wav |
| MP3 音声 | ffmpeg -i audio.mp3 -ar 16000 -ac 1 output.wav |
| M4A 音声 | ffmpeg -i audio.m4a -ar 16000 -ac 1 output.wav |
| FLAC 音声 | ffmpeg -i audio.flac -ar 16000 -ac 1 output.wav |
Step 2:Whisper 文字 起 こし
基本 的な文字 起 こし
whisper output.wav --model base --language ja字幕 ファイルを生成
# SRT フォーマット
whisper output.wav --model medium --language ja --output_format srt
# 全フォーマット
whisper output.wav --model medium --language ja --output_format all --output_dir ./transcripts高精度 文字 起 こし
whisper output.wav --model large --language ja --device cuda一行 コマンドで完了 (パイプライン)
Linux/macOS
ffmpeg -i input.mp4 -vn -ar 16000 -ac 1 -f wav - | whisper - --model base --language jaパイプライン方式
は Whisper が stdin からの読
み込
みをサポートしている必要
があります。一部
のバージョンでは対応
していない場合
があります。安定性
のため、2ステップ方式
を推奨
します。
一括 処理 スクリプト
Bash スクリプト(Linux/macOS)
#!/bin/bash
INPUT_DIR="./videos"
OUTPUT_DIR="./transcripts"
MODEL="medium"
LANG="ja"
mkdir -p "$OUTPUT_DIR"
for file in "$INPUT_DIR"/*.mp4; do
filename=$(basename "$file" .mp4)
echo "Processing: $filename"
# WAV に変換
ffmpeg -i "$file" -vn -ar 16000 -ac 1 "$OUTPUT_DIR/$filename.wav" -y
# Whisper 文字起こし
whisper "$OUTPUT_DIR/$filename.wav" \
--model $MODEL \
--language $LANG \
--output_format all \
--output_dir "$OUTPUT_DIR"
# 一時 WAV を削除
rm "$OUTPUT_DIR/$filename.wav"
done
echo "Done!"よくある問題 の解決
音質 の問題
# サンプルレートを上げる(元の音声品質が高い場合)
ffmpeg -i input.mp4 -vn -ar 44100 -ac 1 output.wav長 い音声 の処理
# 分割処理(30 分ごとに分割)
ffmpeg -i long_audio.mp4 -vn -ar 16000 -ac 1 -f segment -segment_time 1800 output_%03d.wavメモリ不足
# 小さいモデルを使用
whisper output.wav --model tiny --language ja
# または CPU を使用(遅いが安定)
whisper output.wav --model base --language ja --device cpu