
Whisperの音声要件:対応フォーマットと仕様の完全ガイド
Eric King
Author
Whisperの音声要件を理解することは、最高の文字起こし精度を得るうえで重要です。Whisperは柔軟で多くの形式に対応しますが、最適な仕様に沿うことで性能を最大限に引き出せます。
本ガイドでは、音声要件、対応フォーマット、技術仕様、Whisper向けに音声ファイルを準備するベストプラクティスを網羅します。
対応音声フォーマット
WhisperはFFmpegを通じて幅広い音声・動画形式に対応しています。一覧は次のとおりです。
音声フォーマット
| フォーマット | 拡張子 | メモ |
|---|---|---|
| WAV | .wav | ✅ 推奨、ロスレス |
| MP3 | .mp3 | ✅ 最も一般的 |
| FLAC | .flac | ✅ ロスレス、圧縮効率良好 |
| M4A | .m4a | ✅ Apple形式、AACコーデック |
| AAC | .aac | ✅ 高品質圧縮 |
| OGG | .ogg | ✅ オープンソース |
| OPUS | .opus | ✅ 低遅延、Web向き |
| WMA | .wma | ⚠️ あまり一般的でない |
| AMR | .amr | ⚠️ 低品質、通話録音向け |
動画フォーマット(音声抽出)
| フォーマット | 拡張子 | メモ |
|---|---|---|
| MP4 | .mp4 | ✅ 最も一般的な動画形式 |
| AVI | .avi | ✅ 旧形式だが対応 |
| MKV | .mkv | ✅ コンテナ |
| MOV | .mov | ✅ QuickTime |
| WebM | .webm | ✅ Web動画 |
| FLV | .flv | ⚠️ 旧Flash形式 |
重要: Whisperは動画から自動で音声を抽出するため、動画ファイルをそのままアップロードできます。
サンプルレート要件
最適サンプルレート:16 kHz
Whisperは処理前にすべての音声を内部で16 kHzモノラルにリサンプリングします。音声認識に最適なサンプルレートです。
対応サンプルレート
Whisperは任意のサンプルレートを受け付けますが、次の点に留意してください。
| 入力サンプルレート | Whisperでの処理 | 推奨 |
|---|---|---|
| 8 kHz | 16 kHzにリサンプル | ✅ 通話、許容範囲 |
| 16 kHz | そのまま使用 | ✅ 最適、リサンプル不要 |
| 22.05 kHz | 16 kHzにリサンプル | ✅ 良好な品質 |
| 44.1 kHz | 16 kHzにリサンプル | ✅ CD品質、問題なし |
| 48 kHz | 16 kHzにリサンプル | ✅ プロ用途、問題なし |
| 96 kHz | 16 kHzにリサンプル | ⚠️ 過剰、ファイルが大きい |
要点: より高いサンプルレートがWhisperの精度を上げるわけではありません。モデルは16 kHzで学習されているため、16 kHz入力は不要なリサンプルとファイル肥大を避けられます。
ベストプラクティス
# Convert audio to 16 kHz before processing (optional optimization)
import ffmpeg
def convert_to_16khz(input_file, output_file):
stream = ffmpeg.input(input_file)
stream = ffmpeg.output(
stream,
output_file,
acodec='pcm_s16le',
ac=1, # Mono
ar=16000 # 16 kHz
)
ffmpeg.run(stream, overwrite_output=True)
ビット深度要件
対応ビット深度
| ビット深度 | 状態 | メモ |
|---|---|---|
| 8ビット | ✅ 対応 | 低品質、非推奨 |
| 16ビット | ✅ 推奨 | 標準で十分 |
| 24ビット | ✅ 対応 | プロ向け、ファイル大 |
| 32ビット浮動小数 | ✅ 対応 | スタジオ品質、過剰な場合も |
推奨: 16ビットPCMが標準であり、音声認識には十分な品質です。より深いビット深度は文字起こし精度を向上させません。
チャンネル構成:モノラルとステレオ
モノラル(推奨)
Whisperは内部でモノラルとして処理するため、モノラル入力が最適です。
利点:
- ファイルサイズが小さい
- 処理が速い
- チャンネル混合が不要
- 単一話者向き
モノラルを使う例:
- 1人の話者の録音
- 電話
- 1人ホストのポッドキャスト
- 多くの文字起こしタスク
ステレオ(対応)
ステレオは自動的にモノラルへ変換されます(平均化または1チャンネル選択)。
ステレオが有用な場合:
- 話者が左右に分かれている(稀)
- 元がステレオ(変換は自動)
ベストプラクティス: 可能なら処理前にステレオをモノラルへ変換:
import ffmpeg
# Convert stereo to mono
stream = ffmpeg.input('stereo_audio.wav')
stream = ffmpeg.output(
stream,
'mono_audio.wav',
ac=1 # Mono channel
)
ffmpeg.run(stream, overwrite_output=True)
ファイルサイズの上限
実用上の目安
Whisperに厳密な上限はありませんが、実務上の制約があります。
| ファイルサイズ | 処理時間 | 推奨 |
|---|---|---|
| 10 MB未満 | 数秒 | ✅ 理想的 |
| 10〜100 MB | 数分 | ✅ 良好 |
| 100〜500 MB | 10〜30分 | ⚠️ 分割を検討 |
| 500 MB超 | 30分以上 | ⚠️ 分割必須 |
メモリ
大きなファイルほどRAM/VRAMを多く消費します。
- baseモデル: 約1〜2 GB VRAM
- smallモデル: 約2〜3 GB VRAM
- mediumモデル: 約5〜6 GB VRAM
- largeモデル: 約10〜12 GB VRAM
ベストプラクティス: 100 MB超のファイルはチャンク分割(下記参照)。
長さの上限
推奨時間
| 長さ | 状態 | メモ |
|---|---|---|
| 30分未満 | ✅ 最適 | そのまま処理 |
| 30〜60分 | ✅ 良好 | 分割が必要な場合あり |
| 1〜2時間 | ⚠️ 分割推奨 | チャンクの方が精度が良いことが多い |
| 2時間超 | ⚠️ 分割必須 | 安定性のため |
長い音声を分割する理由
- メモリ制限: メモリ不足エラーを防ぐ
- 精度: 短いチャンクの方が文脈を保ちやすい
- 速度: 並列処理が可能
- 復旧: 1チャンクが失敗しても他は成功しうる
チャンク戦略:
# Split long audio into 30-60 second chunks with 5-10 second overlap
def chunk_audio(audio_path, chunk_length=60, overlap=5):
# Implementation: split audio into segments
# Process each chunk separately
# Merge results with timestamps
pass
音質要件
最低基準
許容できる精度のため、次を満たすことが望ましいです。
| 要因 | 最低 | 最適 |
|---|---|---|
| S/N比 | 10 dB超 | 20 dB超 |
| ビットレート(MP3) | ≥ 64 kbps | ≥ 128 kbps |
| 音量 | 聞こえる | −3 dBに正規化 |
| 背景ノイズ | 最小 | なし |
| エコー/残響 | 最小 | なし |
品質チェックリスト
文字起こし前に確認:
- ✅ 明瞭な発話: 話者の声がはっきり聞こえる
- ✅ ノイズ最小: 背景が音声をかき消さない
- ✅ 音量一定: 急な変化がない
- ✅ クリッピングなし: 歪み・飽和なし
- ✅ 良いマイク: 適切な機材
コーデック要件
推奨コーデック
| コーデック | フォーマット | 品質 | 推奨 |
|---|---|---|---|
| PCM | WAV | ロスレス | ✅ 精度に最適 |
| FLAC | FLAC | ロスレス | ✅ 優秀、圧縮あり |
| AAC | M4A、MP4 | 高品質 | ✅ 非常に良い |
| MP3 | MP3 | ロッシー | ✅ ≥128 kbpsで良好 |
| OGG Vorbis | OGG | ロッシー | ✅ 良好 |
| OPUS | OPUS | ロッシー | ✅ 良好、低遅延 |
コーデックのベストプラクティス
最大精度のために:
- PCM(WAV)またはFLAC(ロスレス)
実用向け:
- AACまたはMP3 ≥128 kbps(結果は非常に良い)
避ける:
- 極端に低いMP3ビットレート(64 kbps未満)
- 強く圧縮された形式
- 必要でない限り電話コーデック(AMR、G.711)
前処理の推奨
文字起こしの前に
Whisperは多くを自動で補正しますが、前処理で改善できます。
1. 音量の正規化
import numpy as np
from scipy.io import wavfile
def normalize_audio(audio_path, output_path, target_dB=-3.0):
sr, audio = wavfile.read(audio_path)
audio = audio.astype(np.float32)
# Normalize to target dB
max_val = np.max(np.abs(audio))
target_linear = 10 ** (target_dB / 20)
audio = audio * (target_linear / max_val)
# Clip to prevent overflow
audio = np.clip(audio, -1.0, 1.0)
wavfile.write(output_path, sr, (audio * 32767).astype(np.int16))
2. 無音の除去
# Remove leading/trailing silence
# Helps with processing time and accuracy
3. ノイズ低減(任意)
ノイズの多い録音向け:
# Use noise reduction libraries
# librosa, noisereduce, or specialized tools
# Only if background noise is significant
4. 16 kHzへリサンプル(任意)
ファイルサイズ最適化のため:
import ffmpeg
stream = ffmpeg.input('input.wav')
stream = ffmpeg.output(
stream,
'output_16k.wav',
ar=16000 # Resample to 16 kHz
)
ffmpeg.run(stream, overwrite_output=True)
よくある音声の問題と対処
問題1:サンプルレートが非常に低い(8 kHz)
問題: 8 kHzの通話録音は精度が落ちることがあります。
対処:
- mediumまたはlargeモデルを使う(低サンプルレートに強い)
- 16 kHzにアップサンプル(品質は戻らないが処理には有利)
問題2:話者が左右に分かれたステレオ
問題: 2人が別チャンネルにいる。
対処:
# Extract each channel separately
import torchaudio
audio, sr = torchaudio.load('stereo.wav')
speaker1 = audio[0] # Left channel
speaker2 = audio[1] # Right channel
# Transcribe each separately
result1 = model.transcribe(speaker1)
result2 = model.transcribe(speaker2)
問題3:可変ビットレートMP3
問題: VBRが一部ツールで問題になることがある。
対処:
- 固定ビットレート(CBR)またはWAVへ変換
- WhisperはVBRも処理できるが、CBRの方が予測しやすい
問題4:破損した音声ファイル
問題: 再生はできるがWhisperが失敗する。
対処:
# Re-encode the file
import ffmpeg
stream = ffmpeg.input('corrupted.mp3')
stream = ffmpeg.output(
stream,
'fixed.wav',
acodec='pcm_s16le'
)
ffmpeg.run(stream, overwrite_output=True)
問題5:非常に長いファイル
問題: メモリ不足または極端に遅い。
対処:
- 30〜60秒のチャンクに分割
- 逐次または並列処理
- タイムスタンプで結果を結合
用途別の推奨
電話
| パラメータ | 値 | 理由 |
|---|---|---|
| サンプルレート | 8〜16 kHz | 通話品質 |
| フォーマット | WAVまたはMP3 | 一般的 |
| ビットレート | ≥ 64 kbps | コーデック品質 |
| チャンネル | モノラル | 通話の標準 |
会議(Zoom、Teams)
| パラメータ | 値 | 理由 |
|---|---|---|
| サンプルレート | 16〜48 kHz | 高品質 |
| フォーマット | MP4(音声抽出) | 動画形式 |
| ビットレート | ≥ 128 kbps | 良好な品質 |
| チャンネル | モノまたはステレオ | 構成による |
ポッドキャスト
| パラメータ | 値 | 理由 |
|---|---|---|
| サンプルレート | 44.1〜48 kHz | プロ品質 |
| フォーマット | MP3、WAV、M4A | 一般的 |
| ビットレート | ≥ 128 kbps | 良好 |
| チャンネル | モノラル | 標準 |
インタビュー
| パラメータ | 値 | 理由 |
|---|---|---|
| サンプルレート | 16〜48 kHz | 高品質 |
| フォーマット | WAVまたはFLAC | 最高精度 |
| ビットレート | ロスレスまたは≥192 kbps | プロ向け |
| チャンネル | モノラル | 標準 |
Whisper音声要件のまとめ
最低要件
- ✅ フォーマット: FFmpeg対応の任意の形式
- ✅ サンプルレート: 任意(最低8 kHz推奨)
- ✅ ビット深度: 8ビット以上
- ✅ チャンネル: モノまたはステレオ(モノ推奨)
- ✅ ファイルサイズ: 厳密な上限なし(100 MB超は分割)
- ✅ 長さ: 厳密な上限なし(1時間超は分割)
最適要件
- ✅ フォーマット: WAV、FLAC、MP3(≥128 kbps)
- ✅ サンプルレート: 16 kHz(最適、リサンプル不要)
- ✅ ビット深度: 16ビットPCM
- ✅ チャンネル: モノラル
- ✅ 品質: 明瞭な発話、ノイズ最小
- ✅ 前処理: 正規化音量、クリッピングなし
クイックリファレンス:準備チェックリスト
Whisperで文字起こしする前:
- フォーマット: WAV、MP3、FLAC、M4Aなど対応形式
- サンプルレート: 16 kHz(最適)または他の対応レート
- ビット深度: 16ビット(推奨)
- チャンネル: モノ(推奨)またはステレオ
- ファイルサイズ: 100 MB未満(または分割計画)
- 長さ: 1時間未満(または分割計画)
- 品質: 明瞭な発話、背景ノイズ最小
- 音量: 正規化、クリッピングなし
- コーデック: ロスレス(WAV/FLAC)または高品質ロッシー(MP3 ≥128 kbps)
音声のテスト
簡易テスト
import whisper
# Load model
model = whisper.load_model("base")
# Test transcription
result = model.transcribe("your_audio.wav")
# Check if successful
if result["text"]:
print("✅ Audio format is compatible")
print(f"Detected language: {result['language']}")
else:
print("⚠️ Transcription failed - check audio format")
よくあるエラーメッセージ
| エラー | 原因 | 対処 |
|---|---|---|
| "File not found" | パス誤り | パスを確認 |
| "Unsupported format" | 非対応形式 | WAV/MP3へ変換 |
| "Out of memory" | ファイル过大 | チャンク分割 |
| "Empty audio" | 破損 | 再エンコード |
ベストプラクティス要約
- 可能なら16 kHz(Whisperに最適)
- ステレオよりモノ(内部はモノ処理)
- **ロスレス(WAV/FLAC)**で最高精度
- 長いファイル(1時間超)は分割して精度と安定性を確保
- 音量を正規化
- 背景ノイズを最小化
- モデルサイズを選ぶ(大きいモデルは悪条件に強い)
- 大きいモデルの前にbaseで試す
まとめ
Whisperは柔軟で多様な形式・品質に対応しますが、最適な仕様に沿うと文字起こし精度は最良になります。
- フォーマット: WAV、FLAC、MP3(≥128 kbps)
- サンプルレート: 16 kHz(最適)
- ビット深度: 16ビットPCM
- チャンネル: モノラル
- 品質: 明瞭な発話と低ノイズ
形式より「聞き取りやすい音声」が重要です。仕様が理想的でも録音品質が悪ければ精度は下がります。明瞭な発話、低ノイズ、マイク位置を意識してください。
本番ではSayToWordsのようなプラットフォームが形式変換・リサンプル・最適化を自動で行うため、細かい仕様よりクリアな音声に集中できます。
Whisper向けの音声準備でお困りですか?前処理、チャンク戦略、精度向上に関する他のガイドもご覧ください。
