Communitygithub.com

AungMinThu1722/subtitle-voiceover

电影 → 缅甸语配音:带说话人检测的转录、自动声音分配、编辑器就绪的字幕和无音乐音轨。包含技能锻造打包工具。

subtitle-voiceover 是什么?

这是一个用于将电影或音频文件自动转换为缅甸语配音的AI代理技能。它通过一个完整的Python脚本管道实现端到端处理:从转录、说话人检测、翻译到最终配音渲染,代理仅负责将带说话人标签的SRT文件翻译成缅甸语,以及可选地编写开场钩子。该技能支持Claude Code等代理平台,需要AssemblyAI密钥进行转录,并使用edge-tts进行文本到语音合成。其核心优势包括自动声音分配(根据音高自动匹配缅甸语神经语音)、时间戳由脚本严格管理防止错误、以及自动生成无音乐配乐音轨。输出包括配音音频、带说话人标签的字幕、纯字幕文件以及多种编辑格式(FCPXML、EDL、CSV),可直接用于Premiere Pro、DaVinci Resolve等专业视频编辑软件。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add AungMinThu1722/subtitle-voiceover

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

缅甸语电影配音 — 代理技能

两个用于从电影构建缅甸语配音(dub)的代理技能,以及用于构建类似技能的工具。

文件夹说明
subtitle-voiceover/技能:将视频或音频文件转换为带说话人检测的缅甸语配音、代理编写的开场钩子、编辑器就绪的字幕对和自动清理。
skill-forge/工具:创建、验证和打包SKILL.md技能——并保持此仓库自身的两个技能规范整洁。

subtitle-voiceover 是做什么的?

整个管道是端到端的脚本化Python。代理仅做一件事:将带说话人标签的SRT翻译成缅甸语——外加一个可选行,即开场钩子。 管道中的其他任何部分都不会要求模型执行操作。

movie.mp4 ──transcribe.py──▶ transcript.json ──srt_from_transcript.py──▶ movie.en.srt
   └─ detect_voices.py 测量每个说话人的音高 ──▶ voices.detected.yaml (无手动映射)
        └── AGENT 填充 translation.my.json (+ hook.text) ──apply_translation.py──▶ movie.my.srt
             └── render_voiceover.py ──▶ voiceover.mp3 (整片长度音轨,无音乐)
                  └── 检查、FCPXML/EDL 交接、cleanup.py

通过将文件夹复制到代理的技能目录,或解压打包的存档来安装:

cp -r subtitle-voiceover ~/.claude/skills/                    # 从克隆中
unzip subtitle-voiceover/packages/subtitle-voiceover.skill -d ~/.claude/skills/

依赖:python3 -m pip install --user edge-tts pyyaml,ffmpeg + ffprobe,以及subtitle-voiceover/.env中的AssemblyAI密钥(ASSEMBLYAI_API_KEY=...,已添加到.gitignore)。

整部电影一条命令:

python3 scripts/run_pipeline.py night-shift.mp4 --work-dir work --config voiceover.config.yaml \
    --language en --speakers-expected 2 --hook --stages python
# 代理填充 work/translation.my.json(每条字幕文本,加上 hook.text)
python3 scripts/run_pipeline.py --work-dir work --config voiceover.config.yaml --stages post

输出内容:voiceover.mp3(配音音轨,从00:00:00开始,填充至电影长度,无音乐)、movie.my.srt(带说话人标签)和movie.my.subs.srt(纯字幕轨道)、voiceover.fcpxml / .edl / .cue-list.csv、JSON质量报告——以及包含工作文件的work/目录(处理后已清理)。编辑人员可在音轨下方铺设自有配乐;字幕可直接放入Premiere Pro、DaVinci Resolve或Final Cut Pro的字幕轨道。

亮点:

  • 自动声音分配。 说话人音高是从电影自身音频中测量的(自相关,配有纯Python备用方案)——女性角色使用my-MM-NilarNeural,男性角色使用my-MM-ThihaNeural。无需手动映射;配置仍可固定某个说话人。
  • 时间戳由脚本拥有。 翻译过程永远不会看到可写的时间码;合并过程会重新附加原始时间戳,并报告任何需要丢弃的编辑。
  • 开场钩子。 前5–10秒可以替换为代理编写的一行电影原声中的句子,与原始对话难以区分,在references/hook-guide.md中有工作示例。
  • 运行期间不会生成任何内容。 每个阶段都是一个预先编写的脚本,接收标志;该技能自带测试套件、固定电影和两个完整的录制运行,位于demo-film/。

完整指南请参见subtitle-voiceover/README.md,代理读取的内容请参见SKILL.md。

skill-forge

搭建技能目录,根据开放格式(名称/描述规则、渐进式披露、捆绑文件引用、行数预算)检查SKILL.md,并将技能打包为可分发的.skill存档而不会泄露秘密。

python3 skill-forge/scripts/validate_skill.py subtitle-voiceover --strict
python3 skill-forge/scripts/package_skill.py subtitle-voiceover --out subtitle-voiceover/packages

测试

bash skill-forge/tests/run_tests.sh              # 验证器/打包器套件(离线,<1秒)
cd subtitle-voiceover && bash tests/run_tests.sh # 管道冒烟测试(真实 edge-tts 调用)

两个套件都已接入CI(ci/github-actions-ci.yml——将其移动到.github/workflows/ci.yml以启用,见该文件头部);管道套件不使用AssemblyAI密钥——它使用固定转录来驱动真实脚本。

仓库布局

subtitle-voiceover/     技能(scripts/, references/, assets/, tests/, demo/, demo-film/, packages/)
skill-forge/            验证和打包工具(scripts/, references/, assets/, tests/, packages/)
ci/github-actions-ci.yml  CI定义(移动到 .github/workflows/ci.yml 以启用)

许可证

MIT — 参见 LICENSE。

相关技能