如何使用claude code编写自动化脚本实现根据提供的字幕文件和对应视频素材自动完成翻译为中文并配音,同时实现配音时间轴和字幕的对齐和视频的导出
使用 Claude Code 构建这套系统极其高效。你不需要自己从零手写每一行音频对齐与 FFmpeg 命令,而是利用 Claude Code 的 Agent 级终端能力(自动读写代码、运行 CLI、捕获终端报错并自行修 Bug),直接在终端让它帮你搭建并打通整个 Python 自动化管道。项目整体架构系统主要包含三个核心模块:Plaintext[原始视频 + 外语 SRT]
│
▼智能翻译模块 (LLM / API) ──► 将 SRT 文本批量翻译为自然中文,保持时间戳不变
│ ▼配音与对齐引擎 (edge-tts + pydub) ──► 逐句生成中文语音,超长自动加速,补齐静音
│ ▼视频合成引擎 (FFmpeg) ──► 替换原视频音轨,压制硬字幕,导出 final_output.mp4
使用 Claude Code 落地搭建步骤1.1. 创建工作区与基础环境:耗时约 2 分钟。在终端中创建一个独立文件夹,准备好原始视频 video.mp4 和外语字幕 sub.srt,然后启动 Claude Code:Bashmkdir video-auto-translator && cd video-auto-translator放入你的测试文件 video.mp4 和 sub.srt
启动 Claude Code
claude
2.2. 向 Claude Code 下达构建 Prompt:让 Agent 自动编写完整管道。在 claude 交互终端中,直接复制输入以下提示词:给 Claude Code 的 Prompt:“请在这个目录下帮我从零搭建一个 Python 自动化视频翻译与配音 CLI 工具 auto_dub.py。需求如下:1. 依赖安装:自动检查并用 pip 安装 pysrt、edge-tts、pydub、openai。2. 字幕翻译:读取传入的外语 SRT 字幕,调用 OpenAI API(使用环境变量 OPENAI_API_KEY)将字幕文本批量翻译为自然的中文口语,保留原始时间戳并导出 zh_sub.srt。3. 动态音频对齐:使用 edge-tts(默认音色 zh-CN-YunxiNeural)逐句生成中文配音。计算生成的音频时长:如果大于字幕时间窗,调用 pydub 进行 speedup 动态加速(限速最高 1.4 倍);如果前后有空隙,补齐静音段。4. FFmpeg 视频合成:拼接完整中文音轨,调用 FFmpeg 替换视频原有音频,并将 zh_sub.srt 烧录到视频中,导出为 output.mp4。5. 测试与修复:编写完代码后,请自动执行 python auto_dub.py --video video.mp4 --srt sub.srt --output output.mp4 进行测试。如果遇到 FFmpeg 路径、asyncio 事件循环或 pydub 类型错误,请读取终端报错日志并自行修改代码,直到测试通过。”3.3. 观察 Claude Code 的自主执行与自纠错:全自动无人值守执行。Claude Code 会开始在终端中自主完成以下动作:创建文件:生成 auto_dub.py 代码框架。环境配置:自动运行 pip install 补充依赖。测试运行:调用 python auto_dub.py ... 触发第一版脚本。自动捕获报错并修复:例如如果遇到 edge-tts 在异步循环中的报错或 FFmpeg 的字符转义问题,Claude Code 会实时拦截日志、修正代码并再次重试,直到生成最终视频。核心生成的脚本逻辑 (auto_dub.py 源码参考)以下是 Claude Code 在后台为你生成并调优的核心 Python 源码参考:Pythonimport argparse
import asyncio
import os
import sys
import pysrt
from pydub import AudioSegment
import edge_tts
from openai import OpenAI
def translate_srt_to_chinese(srt_path, output_zh_srt_path):
client = OpenAI(
api_key=os.environ.get("OPENAI_API_KEY"),
base_url=os.environ.get("OPENAI_BASE_URL", "https://api.openai.com/v1")
)
subs = pysrt.open(srt_path, encoding='utf-8')
texts = [f"{i}: {sub.text.replace('\n', ' ')}" for i, sub in enumerate(subs)]
prompt = "请将以下字幕翻译为通顺自然的中文口语,保持原有的编号格式不变:\n" + "\n".join(texts)
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}]
)
translated_lines = response.choices[0].message.content.strip().split("\n")
zh_map = {}
for line in translated_lines:
if ":" in line:
parts = line.split(":", 1)
try:
zh_map[int(parts[0].strip())] = parts[1].strip()
except ValueError:
continue
for idx, sub in enumerate(subs):
sub.text = zh_map.get(idx, sub.text)
subs.save(output_zh_srt_path, encoding='utf-8')
print(f"[✓] 中文字幕已生成: {output_zh_srt_path}")
return subs
async def generate_aligned_audio(subs, voice, output_audio_path):
final_audio = AudioSegment.silent(duration=0)
current_time_ms = 0
for idx, sub in enumerate(subs):
start_ms = sub.start.ordinal
end_ms = sub.end.ordinal
max_duration_ms = end_ms - start_ms
text = sub.text.strip()
if not text:
continue
# 1. 补齐句间空白静音
if start_ms > current_time_ms:
silence_gap = start_ms - current_time_ms
final_audio += AudioSegment.silent(duration=silence_gap)
current_time_ms = start_ms
# 2. 生成单句中文 TTS
temp_file = f"temp_{idx}.mp3"
await edge_tts.Communicate(text, voice).save(temp_file)
segment = AudioSegment.from_file(temp_file)
# 3. 超长时自动变速 (防止重叠下一句)
if max_duration_ms > 0 and len(segment) > max_duration_ms:
speed_factor = len(segment) / max_duration_ms
speed_factor = min(speed_factor, 1.4) # 最高加速 1.4 倍
segment = segment.speedup(playback_speed=speed_factor)
final_audio += segment
current_time_ms += len(segment)
if os.path.exists(temp_file):
os.remove(temp_file)
final_audio.export(output_audio_path, format="mp3")
print(f"[✓] 对齐音频已生成: {output_audio_path}")
def merge_video(video_path, audio_path, srt_path, output_path):
# 使用 FFmpeg 替换原音轨并压制硬字幕
cmd = (
f'ffmpeg -y -i "{video_path}" -i "{audio_path}" '
f'-vf "subtitles=\'{srt_path}\'" '
f'-c:v libx264 -c:a aac -map 0:v:0 -map 1:a:0 "{output_path}"'
)
os.system(cmd)
print(f"[✓] 成品视频已导出: {output_path}")
def main():
parser = argparse.ArgumentParser(description="Auto Translate and Dub Video")
parser.add_argument("--video", required=True, help="原始视频路径")
parser.add_argument("--srt", required=True, help="原始字幕路径")
parser.add_argument("--output", default="output.mp4", help="导出视频路径")
parser.add_argument("--voice", default="zh-CN-YunxiNeural", help="TTS 音色")
args = parser.parse_args()
zh_srt_path = "temp_zh.srt"
temp_audio_path = "temp_dub.mp3"
subs = translate_srt_to_chinese(args.srt, zh_srt_path)
asyncio.run(generate_aligned_audio(subs, args.voice, temp_audio_path))
merge_video(args.video, temp_audio_path, zh_srt_path, args.output)
# 清理中间音频
if os.path.exists(temp_audio_path):
os.remove(temp_audio_path)
if name == "__main__":
main()随时日常调用后续当你需要翻译配音新视频时,只需在终端唤醒 Claude Code 或直接运行脚本即可:Bashpython auto_dub.py --video lesson.mp4 --srt lesson.srt --output lesson_chinese.mp4 --voice