plugin: video-editing updated: 2026-01-20
使用 Whisper 进行转录
使用 OpenAI Whisper 进行音频/视频转录的生产级方案。
系统要求
安装选项
选项 1:OpenAI Whisper (Python)
# macOS/Linux/Windows
pip install openai-whisper
# 验证安装
whisper --help
选项 2:whisper.cpp (C++ - 速度更快)
# macOS
brew install whisper-cpp
# Linux - 从源码构建
git clone https://github.com/ggerganov/whisper.cpp
cd whisper.cpp && make
# Windows - 使用预构建二进制文件或用 cmake 构建
选项 3:Insanely Fast Whisper (GPU 加速)
pip install insanely-fast-whisper
模型选择
| 模型 | 大小 | VRAM | 准确性 | 速度 | 适用场景 |
|---|---|---|---|---|---|
| tiny | 39M | ~1GB | 低 | 最快 | 快速预览 |
| base | 74M | ~1GB | 中等 | 快 | 草稿转录 |
| small | 244M | ~2GB | 良好 | 中等 | 常规使用 |
| medium | 769M | ~5GB | 较好 | 慢 | 高质量转录 |
| large-v3 | 1550M | ~10GB | 最佳 | 最慢 | 最终成品 |
推荐: 从 small 模型开始,以平衡速度与质量。最终交付时使用 large-v3。
基本转录
使用 OpenAI Whisper
# 基本转录(自动检测语言)
whisper audio.mp3 --model small
# 指定语言和输出格式
whisper audio.mp3 --model medium --language en --output_format srt
# 多种输出格式
whisper audio.mp3 --model small --output_format all
# 带时间戳和单词级时间
whisper audio.mp3 --model small --word_timestamps True
使用 whisper.cpp
# 先下载模型
./models/download-ggml-model.sh base.en
# 转录
./main -m models/ggml-base.en.bin -f audio.wav -osrt
# 带时间戳
./main -m models/ggml-base.en.bin -f audio.wav -ocsv
输出格式
SRT (SubRip 字幕)
1
00:00:01,000 --> 00:00:04,500
欢迎收看本视频。
2
00:00:05,000 --> 00:00:08,200
今天我们将讨论视频编辑。
VTT (WebVTT)
WEBVTT
00:00:01.000 --> 00:00:04.500
欢迎收看本视频。
00:00:05.000 --> 00:00:08.200
今天我们将讨论视频编辑。
JSON(带单词级时间)
{
"text": "欢迎收看本视频。",
"segments": [
{
"id": 0,
"start": 1.0,
"end": 4.5,
"text": " 欢迎收看本视频。",
"words": [
{"word": "欢迎", "start": 1.0, "end": 1.3},
{"word": "收看", "start": 1.4, "end": 1.5},
{"word": "本", "start": 1.6, "end": 2.0},
{"word": "视频", "start": 2.1, "end": 2.2}
]
}
]
}
转录前的音频提取
在转录视频前,以最佳格式提取音频:
# 以 WAV 格式提取音频(16kHz,单声道 - 对 Whisper 效果最佳)
ffmpeg -i video.mp4 -ar 16000 -ac 1 -c:a pcm_s16le audio.wav
# 以高质量 WAV 格式提取(用于存档)
ffmpeg -i video.mp4 -vn -c:a pcm_s16le audio.wav
# 以压缩 MP3 格式提取(更小,仍可工作)
ffmpeg -i video.mp4 -vn -c:a libmp3lame -q:a 2 audio.mp3
时间同步
将 Whisper JSON 转换为 FCP 时间
import json
def whisper_to_fcp_timing(whisper_json_path, fps=24):
"""将 Whisper JSON 输出转换为 FCP 兼容的时间格式。"""
with open(whisper_json_path) as f:
data = json.load(f)
segments = []
for seg in data.get("segments", []):
segments.append({
"start_time": seg["start"],
"end_time": seg["end"],
"start_frame": int(seg["start"] * fps),
"end_frame": int(seg["end"] * fps),
"text": seg["text"].strip(),
"words": seg.get("words", [])
})
return segments
帧精确时间
# 获取精确的帧数和持续时间
ffprobe -v error -count_frames -select_streams v:0 \
-show_entries stream=nb_read_frames,duration,r_frame_rate \
-of json video.mp4
说话人日志
对于多说话人内容,使用 pyannote.audio:
pip install pyannote.audio
from pyannote.audio import Pipeline
pipeline = Pipeline.from_pretrained("pyannote/[email protected]")
diarization = pipeline("audio.wav")
for turn, _, speaker in diarization.itertracks(yield_label=True):
print(f"{turn.start:.1f}s - {turn.end:.1f}s: {speaker}")
批量处理
#!/bin/bash
# 转录目录中的所有视频
MODEL="small"
OUTPUT_DIR="transcripts"
mkdir -p "$OUTPUT_DIR"
for video in *.mp4 *.mov *.avi; do
[[ -f "$video" ]] || continue
base="${video%.*}"
# 提取音频
ffmpeg -i "$video" -ar 16000 -ac 1 -c:a pcm_s16le "/tmp/${base}.wav" -y
# 转录
whisper "/tmp/${base}.wav" --model "$MODEL" \
--output_format all \
--output_dir "$OUTPUT_DIR"
# 清理临时音频
rm "/tmp/${base}.wav"
echo "转录完成:$video"
done
质量优化
提高准确性
- 转录前降噪:
ffmpeg -i noisy_audio.wav -af "highpass=f=200,lowpass=f=3000,afftdn=nf=-25" clean_audio.wav
- 使用语言提示:
whisper audio.mp3 --language en --model medium
- 提供初始提示以辅助上下文:
whisper audio.mp3 --initial_prompt "关于视频编辑软件的技术讨论。"
性能技巧
- GPU 加速(如果可用):
whisper audio.mp3 --model large-v3 --device cuda
- 对于长视频,分块处理:
# 将音频分割成 10 分钟的块
# 转录每个块
# 合并结果并调整时间偏移
错误处理
# 在转录前验证音频文件
validate_audio() {
local file="$1"
if ffprobe -v error -select_streams a:0 -show_entries stream=codec_type -of csv=p=0 "$file" 2>/dev/null | grep -q "audio"; then
return 0
else
echo "错误:$file 中没有音频流"
return 1
fi
}
# 检查 Whisper 安装
check_whisper() {
if command -v whisper &> /dev/null; then
echo "Whisper 可用"
return 0
else
echo "错误:Whisper 未安装。运行:pip install openai-whisper"
return 1
fi
}
相关技能
- ffmpeg-core - 音频提取和预处理
- final-cut-pro - 将转录导入为标题或标记