FFmpeg + Whisper ワークフロー

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_s16le16-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

関連(かんれん) トピック