短视频制作:语音 + 字幕
流水线:.txt 脚本 → make_video.py(edge-tts 逐句朗读 → 合成音频 → 根据实际时长生成 ASS 字幕 → 背景 + 内嵌字幕 via ffmpeg)→ 1080x1920 MP4。
已确定的模式:已有语音 → 视频(当用户提供 mp3 时默认使用)
用户在 EverAI 上生成语音(网页,速度 0.85),发送 mp3 + 台词。不调用 API,不克隆语音,不运行(VieNeu)语音模型于本机。
- 将台词拆分为
.txt文件,每行一个短句(以逗号/句号/"..." 分割),不能包含#行,不能包含[icon]。 python3 make_video.py kichban.txt ~/Downloads/<ten>.mp4 --audio voice.mp3 --style night --no-wave --bg assets/pho-dem.mp4 --target <dài±5>- 打印每句时间戳:重新运行上述命令并添加
--print-timing(不渲染)。检查:若某行与字数相比过长或过短 → 合并/拆分后重新渲染。 - 提取 1–2 帧检查字幕,报告路径和时长。若听不到声音 → 通常是因为 Mac 输出到了 AirPods。
用户指南:
HUONG-DAN.md。
在其他机器上安装
将整个目录 ~/.claude/skills/short-video/ 复制到新机器(相同路径),然后运行 bash ~/.claude/skills/short-video/setup.sh。支持 macOS 和 Ubuntu/Debian;Windows 使用 WSL。内置城市夜景背景:assets/pho-dem.mp4(Mixkit 素材,可用于商业用途)。
依赖(本机已安装)
ffmpeg-full(需要subtitles/libass 滤镜):brew install ffmpeg-fulledge-tts:pipx install edge-tts(网络错误时自动回退使用say -v Linh语音)
步骤 1 — 确定需求
从用户需求中获取;若缺少则使用默认值,仅当主题完全不明时提问:
- 主题 / 角度 — 若无具体角度,自行选择一个有吸引力、具体的角度。
- 时长 — 默认 45–60 秒。
- 语音 — 默认女声
vi-VN-HoaiMyNeural;男声vi-VN-NamMinhNeural。其他语言:edge-tts --list-voices | grep <代码>(例如en-US-AriaNeural)。 - 背景 / 音乐 — 用户提供的图片/视频,若无则默认渐变背景。
步骤 2 — 编写脚本
保存为 .txt 文件,第一行为标题,之后每行一个句子:
# 屏幕顶部显示的短标题(≤ 6 个词)
一个引起好奇的钩子句,≤ 12 个词。
内容句...
结尾句 + 行动呼吁。
规则:
- 越南语时长:~2.3 词/秒(实际测试:155 词 ≈ 65 秒)。45–60 秒 → 110–140 词;30 秒 → ~65 词;15 秒 → ~30 词。
- 每行一个句子,8–20 词。前 3 秒为钩子(问题 / 惊人事实)。中间:3–5 个具体、易记的观点。结尾:CTA(保存、关注、评论)。
- 事实必须准确;健康/金融/法律主题:不诊断,不提供具体专家式建议,必要时建议咨询专家。
- 数字/符号使用文字书写(当易读错时用“四 - 七 - 八”代替“4-7-8”,“百分比”代替“%”)。避免表情符号、
{}\字符。
让用户预览脚本后再渲染,除非用户已提供内容或要求直接执行。
步骤 3 — 渲染
python3 ~/.claude/skills/short-video/make_video.py kichban.txt out.mp4 \
[--voice vi-VN-HoaiMyNeural] [--rate -5%] [--target 45-60] \
[--bg anh_hoac_video_nen] [--music nhac_nen.mp3] [--gap 0.35] \
[--pitch -8Hz] [--style default|night]
- 已有语音:
--audio voice.mp3跳过 TTS。脚本必须与朗读内容匹配,每行一个短句(以逗号/句号分割);时间标记从自然停顿处开始。通过--print-timing打印时间戳(通常 ~12–16 字符/秒),若某句过长或过短,则合并/拆分句子后重新渲染。 - FPT.AI:
--engine fpt --voice leminh(北方男声;还有banmai、thuminh北方女声,lannhi、linhsan南方女声,myan中部女声,giahuy中部男声)。需要export FPT_API_KEY=...(密钥在 console.fpt.ai 获取,免费层每月 100,000 字符)。无逐词时间戳,故字词根据长度分拆;--rate通过 atempo 应用。切勿将密钥写入技能文件。 - 所有引擎均模拟自然朗读节奏(每句速度/音调略有波动,问句后停顿较长)+ 暖声、压缩、轻微混响处理。按口语风格编写脚本,使用 "..." 和句间句号以创造自然呼吸停顿。
- 北方低沉、成熟男声(edge):
--voice vi-VN-NamMinhNeural --pitch=-8Hz --rate=-10%(NamMinh 是唯一的男性越南语语音)。 --style night --no-wave+ 脚本中无#行、无[icon]标签 → 仅保留背景 + 字幕。--style night("城市夜景"风格):标题采用大写字母、字间距拉宽、teal 色加下划线;图标为细线霓虹风格;字幕为逐词卡拉OK(真实时间戳来自 edge-tts);声波为条形图。在句子开头放置[icon]可切换该句图标:sun hourglass gift heart leaf book star eye。背景建议使用真实的城市夜景视频:Mixkit 免费素材(https://mixkit.co/free-stock-video/night-city-street/,链接assets.mixkit.co/videos/<id>/<id>-1080.mp4),拼接几个片段,纵向裁剪,setpts=1.4*PTS放慢速度。--style ui(科技教程视频):深色网格背景,系列标题(#)+ 步骤 1..n 框,模拟应用窗口,终端键盘敲击,字幕中*关键词*橙色高亮。句首标签:[step:步骤名称](进入新步骤),[card:标题|项目1|项目2](窗口,保持至下一场景),[term:命令]。快捷键朗读时写成文字(“Command,Shift,三”),但在卡片内写为“Command + Shift + 3”。示例:语音vi-VN-NamMinhNeural --pitch=-4Hz --rate=+15% --gap 0.25。- 无
--bg→ 深蓝紫色渐变背景缓慢移动(适合温和主题;热闹主题应提供图片/视频背景)。图片 → 慢速缩放效果。视频 → 自动循环。 --music音量降至 12%,结尾淡出。- 脚本会打印时长,若超出
--target则给出警告 → 增加/删除句子或调整--rate并重新渲染。
步骤 4 — 检查
提取一帧查看字幕是否超出边界或模糊:
ffmpeg -v error -y -ss 5 -i out.mp4 -frames:v 1 frame.jpg 然后读取 frame.jpg。向用户报告视频的绝对路径和时长。
脚本示例:技能目录中的 example-sleep.txt。