口播视频生成器
功能
把一段文案变成可直接发布的口播视频(成品 mp4):
- 配音:edge-tts 微软神经网络语音(5 个中文音色别名),逐句合成,句间可插停顿
- 字幕:按分句自动生成 SRT 时间轴并硬烧录进画面(libass 渲染,白字黑描边,位置字号可调)
- 画面:三选一
- 纯色背景(默认深色
#1a1a2e,--bg换色) - 图片素材轮播:多张图按总时长均分,自动模糊背景适配画幅 + 缓慢推近(zoompan 1.0→1.1)
- 画幅:
1080x1920竖屏(默认,抖音/视频号)、1920x1080横屏(B站/电商详情)、1080x1080方形 - 输出:h264 + aac,yuv420p,faststart,平台兼容;同时落一份同名
.srt供软字幕平台使用 - 中途产物(分句 mp3 / srt)在临时目录生成,成功后自动清理,只留最终 mp4
工作流程
- 收文案:向用户要口播文案。按
。!?!?;;和换行分句,单句超 40 字会自动按逗号等次级标点再切——无需预处理文案 - 问清两件事(一句话问完,不要连环追问):
- 有没有素材图?有就请用户提供图片路径(jpg/png/webp 均可,尺寸不必统一)
- 要什么画幅?不说就默认竖屏 1080x1920
- 音色/语速有偏好吗?不说就默认"晓晓"、原速 - 预估时长:中文约 4-5 字/秒(默认语速,含句间停顿),先报给用户,如"约 60 字 ≈ 13-15 秒"
- 调脚本:
bash python3 "${SKILL_DIR:-$PWD/.workbuddy/skills/voiceover-video}/scripts/make_video.py" \ --text "文案..." -o ./口播视频.mp4 \ [--images 图1.jpg 图2.jpg] [--size 1080x1920] - 交付:脚本最后会打印时长与文件大小。用 ffprobe 复核时长后交付 mp4 路径,并告知语速(字/秒)供用户判断节奏是否合适
命令参考
python3 scripts/make_video.py --text "文案" -o out.mp4 [选项]
--text TEXT 口播文案(必需)
-o, --out OUT 输出 mp4 路径(必需)
--images IMG [IMG...] 素材图片,多张按总时长均分轮播(可选)
--bg COLOR 无素材纯色背景,默认 "#1a1a2e"
--voice NAME 晓晓(默认,女亲切)/晓伊(女活泼)/云希(男清爽)/云扬(男播音)/云健(男浑厚)
--rate "+0%" 语速,"-10%" 放慢 "+15%" 加快
--size 1080x1920(默认) | 1920x1080 | 1080x1080
--pause 0.3 句间停顿秒数
--font-size 64 字幕字号(像素直觉,脚本按画幅高度换算)
--subtitle on|off 是否烧录字幕,默认 on
--keep-tmp 保留临时目录(分句 mp3/srt),调试用
示例对话
例1:纯文案口播
> 用户:帮我做个口播视频,文案是"大家好,今天给大家介绍一款保温杯。它采用316不锈钢内胆,保温24小时。"
> 助手:收到~文案约 40 字,预计 9-10 秒。没有说素材,默认用深色纯色背景+竖屏1080x1920+字幕,这就生成(调脚本,默认参数)→ 交付 mp4 路径+时长
例2:电商产品图 + 横屏
> 用户:这三张产品图帮我做成介绍视频,横屏的,男声。文案:……
> 助手:好的,横屏 1920x1080、音色云希、图片轮播(自动模糊背景适配画幅)。预计 XX 秒(调脚本 --images a.jpg b.jpg c.jpg --size 1920x1080 --voice 云希)→ 交付
例3:调整节奏
> 用户:上次那个视频语速太快了,句与句之间停一下
> 助手:好的,放慢 10% 并把句间停顿加到 0.5 秒重做(--rate "-10%" --pause 0.5)
运行环境
- 脚本:
scripts/make_video.py(相对技能根目录) - Python:3.9+
- 第三方库:
edge-tts(pip install edge-tts)
开工前先跑一次自检,缺什么当场补,别等跑到一半报错:
python3 -c "import edge_tts" 2>/dev/null || echo "缺 edge-tts,请执行 pip install edge-tts"
> 缺依赖时用中文告诉用户缺什么、装完就能用,不要把 Python 的英文 traceback 原样贴给用户。
注意事项
- 时长预估:中文约 4-5 字/秒(默认语速含停顿);脚本运行时会打印实际语速,与预估偏差大时向用户说明
- 联网依赖:配音走微软神经网络 TTS,需网络;脚本已内置 2026-10 微软端点迁移(speech.platform.bing.com 对合成 403 → 自动切 api.msedgeservices.com)与 IPv4 优选、403/429/超时自动重试,一般无需干预;单次文案建议 ≤ 500 字,过长分次生成再拼接
- 字幕为硬字幕:烧录进画面不可后期关闭;平台支持软字幕时,交付时附带的同名
.srt可单独上传 - 字幕渲染实测结论:本环境 ffmpeg 7.1.5 的
subtitles滤镜(libass)可用,中文字体Noto Sans SC(/usr/local/share/fonts/custom/NotoSansSC-Regular.ttf,fc-match 验证)渲染正常,抽帧验证字幕确实烧上,无需 drawtext 降级方案 - 图片建议:横竖图均可,脚本自动模糊背景补边;同一视频 3-8 张为宜
- 临时目录:成功自动清理;失败会保留并在报错中打印路径,排查后可手动删除;
--keep-tmp可看分句 mp3 与 srt - 测试产物不要写进技能目录,放 /tmp 或用户工作区