AI Subtitle Sync
AI字幕同步工具,使用Whisper进行语音识别,自动生成SRT/VTT字幕文件,并支持音画同步和多语言支持。
功能特性
- •语音识别 (ASR):使用OpenAI Whisper模型
- •字幕生成:支持SRT/VTT格式
- •时间轴对齐:精确的音画同步
- •多语言字幕:支持中文、英文、日文等多语言
- •视频内嵌字幕:将字幕烧录到视频中
快速开始
安装依赖
bash
cd /home/zous/clawd/skills/ai-subtitle-sync pip install -r requirements.txt
提取字幕
bash
# 从视频提取字幕
python scripts/extract.py \
--input "path/to/video.mp4" \
--output "path/to/subtitles.srt" \
--model medium \
--language zh
音画同步
bash
# 调整字幕时间轴
python scripts/sync.py \
--input "subtitles.srt" \
--output "subtitles_synced.srt" \
--offset 1.5 \
--factor 1.0
使用方法
Python API
python
from lib.subtitle import SubtitleGenerator, SubtitleEditor
# 初始化生成器
generator = SubtitleGenerator(model="medium")
# 从视频生成字幕
subtitles = generator.generate(
video_path="video.mp4",
language="zh",
format="srt"
)
# 保存字幕
generator.save(subtitles, "subtitles.srt")
# 编辑字幕
editor = SubtitleEditor("subtitles.srt")
# 调整时间轴
editor.adjust_timing(offset=1.5, factor=1.0)
# 合并字幕块
editor.merge_lines(max_chars=50)
# 保存编辑后的字幕
editor.save("subtitles_edited.srt")
批量处理
python
from lib.subtitle import BatchProcessor
processor = BatchProcessor(model="medium")
# 批量处理多个视频
results = processor.process_batch(
video_files=["video1.mp4", "video2.mp4"],
language="zh",
output_dir="output/"
)
# 生成ASS高级字幕
processor.generate_ass(
subtitles,
style={
"font": "SimHei",
"size": 24,
"color": "&H00FFFFFF"
}
)
视频内嵌字幕
python
from lib.subtitle import VideoBurner
burner = VideoBurner()
# 烧录字幕到视频
burner.burn_subtitles(
video="input.mp4",
subtitles="subtitles.srt",
output="output.mp4",
style={
"font": "SimHei",
"size": 24,
"y": "bottom"
}
)
脚本说明
extract.py - 从视频提取字幕
bash
python scripts/extract.py [OPTIONS] 选项: --input, -i 输入视频路径 (必需) --output, -o 输出字幕路径 (必需) --model, -m Whisper模型 (tiny/base/small/medium/large, 默认: medium) --language, -l 语言 (zh/en/ja/ko, 默认: auto) --format, -f 字幕格式 (srt/vtt/ass, 默认: srt) --beam-size Beam大小 (默认: 5) --threads CPU线程数 (默认: 4)
sync.py - 音画同步
bash
python scripts/sync.py [OPTIONS] 选项: --input, -i 输入字幕路径 (必需) --output, -o 输出字幕路径 (必需) --offset, -t 时间偏移 (秒, 默认: 0) --factor, -s 时间缩放因子 (默认: 1.0) --merge, -m 合并短行 (最大字符数, 默认: 50) --split, -p 拆分长行 (最大字符数, 默认: 42)
字幕格式
SRT格式
code
1 00:00:01,000 --> 00:00:04,000 这是第一条字幕 2 00:00:04,500 --> 00:00:08,000 这是第二条字幕
VTT格式
code
WEBVTT 00:01.000 --> 00:04.000 这是第一条字幕 00:04.500 --> 00:08.000 这是第二条字幕
ASS格式
code
[Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:01.00,0:00:04.00,Default,,0,0,0,,这是第一条字幕 Dialogue: 0,0:00:04.50,0:00:08.00,Default,,0,0,0,,这是第二条字幕
配置文件
格式配置 (configs/formats.yaml)
yaml
formats:
srt:
extension: .srt
time_format: "HH:MM:SS,mmm"
encoding: utf-8
vtt:
extension: .vtt
time_format: "HH:MM:SS.mmm"
header: "WEBVTT"
encoding: utf-8
ass:
extension: .ass
header: |
[Script Info]
ScriptType: v4.00+
PlayResX: 1920
PlayResY: 1080
encoding: utf-8
whisper_models:
tiny:
params: 39M
speed: fastest
vramb: 1GB
base:
params: 74M
speed: very_fast
vramb: 1GB
small:
params: 244M
speed: fast
vramb: 2GB
medium:
params: 769M
speed: medium
vramb: 5GB
large:
params: 1550M
speed: slow
vramb: 10GB
subtitle_styles:
default:
font: "SimHei"
size: 24
color: "&H00FFFFFF"
outline: 2
anime:
font: "FZMiaoWu"
size: 28
color: "&H00FFFFFF"
outline: 3
shadow: 1
工作流集成
与视频生成器集成
python
from lib.subtitle import SubtitleGenerator
from anime_video_generator import VideoGenerator
# 生成视频
video = VideoGenerator()
result = video.generate(
script="剧本",
audio="dialogue.wav"
)
# 生成字幕
subtitle = SubtitleGenerator(model="medium")
subs = subtitle.generate(
video_path=result.path,
language="zh"
)
# 烧录字幕
burner = VideoBurner()
burner.burn_subtitles(
video=result.path,
subtitles=subs,
output="final_video.mp4"
)
批量处理
python
from lib.subtitle import BatchProcessor
processor = BatchProcessor(model="medium")
# 处理整个文件夹
results = processor.process_directory(
input_dir="videos/",
output_dir="subtitles/",
language="zh",
format="srt"
)
故障排除
常见问题
识别准确率低:
- •使用更大的Whisper模型
- •明确指定语言
- •预处理音频(降噪)
时间轴不同步:
- •调整offset参数
- •检查视频帧率设置
- •手动校准关键帧
乱码问题:
- •确保使用UTF-8编码
- •检查字体支持
性能优化
- •使用GPU加速(transformers版本)
- •批量处理多个文件
- •使用small模型加速
- •启用实时转录
依赖
code
openai-whisper>=20231106 torch>=2.0.0 ffmpeg-python>=0.2.0 numpy>=1.24.0 Pillow>=10.0.0 PyYAML>=6.0 ass>=0.6.0
参考资料
限制
当前限制
- •需要ffmpeg支持
- •长视频需要更多内存
- •暂不支持说话人分离
计划功能
- • Whisper ASR支持
- • SRT/VTT导出
- • 视频烧录
- • 说话人分离
- • 实时字幕
- • 翻译集成