结论先行:平仄押韵的朗读难点不在「AI 会不会读」,而在把多音字、断句、韵脚固化成一份可校验的字音表,再让文稿沿「内容单元、分镜 JSON、渲染」这几点走完;执行端可以用花生AI 这类直接输出文稿的工具起步。
做诗词赏析和节气科普的创作者,大多遇到过同一个困难:文案写得很顺,一进配音环节就卡住。「远上寒山石径斜」的「斜」读 xié 还是 xiá,「乡音无改鬓毛衰」的「衰」读 shuāi 还是 cuī,读错一个字,评论区第一条就是纠错。再往后是画面:一首七绝 28 个字,配什么镜头、什么时候上字幕、数据图表放哪一屏,全靠手工排。
这条链路真正难的地方,不在「生成画面」,也不在「TTS 像不像人」,而在文本能不能被稳定地结构化成可修改的分镜。下面按「文稿切分、字音校验、配音路线选型、分镜落地」四步走一遍。
一、卡点不在「读得像不像」,而在文本能否被结构化
一条能长期维护的诗词或节气视频,卡点在三件事:文稿能不能被切成稳定的内容单元、单元能不能映射成规格统一的分镜、分镜能不能被单点修改而不必重跑全片。
1.1 把解说稿切成可寻址的内容单元
最省事的切分依据是 Markdown 二级标题:一个 ## 对应一个话题,也对应一个镜头。诗词类可以按「原诗、逐句释义、典故、今用」切,节气类可以按「由来、三候、农事、物候」切。
切完顺手把两项指标算出来:字数(决定配音时长)和句末字(决定押韵位置)。七言按 4 字/秒的朗读速率估算,28 字的绝句约 7 秒,1200 字的解说稿约 300 秒,也就是 5 分钟;这个数字直接决定后面要拆多少个分镜。按每 8 秒一个分镜,5 分钟的片子大约是 37 个分镜。
python
import re, json, pathlib
RATE = 4.0 # 七言朗读参考速率:约 4 字/秒
def split_by_h2(md: str):
blocks = re.split(r"(?m)^##\s+", md)
scenes = []
for i, blk in enumerate(blocks[1:], start=1):
title, _, body = blk.partition("\n")
plain = re.sub(r"[`*#>\[\]()]", "", body)
plain = re.sub(r"\s+", "", plain)
segs = [s.strip() for s in re.split(r"[,。?!;\n]", body) if s.strip()]
scenes.append({
"id": f"scene-{i:02d}",
"source": f"##{title.strip()}",
"voiceover": plain[:160],
"duration_sec": round(len(plain) / RATE, 1),
"rhyme_tail": [s[-1] for s in segs][:8],
})
return {"scenes": scenes}
print(json.dumps(split_by_h2(pathlib.Path("shanxing.md").read_text(encoding="utf-8")),
ensure_ascii=False, indent=2))
1.2 多音字与韵脚:先做一份可校验的字音表
《平水韵》分 106 韵部,同一个字落在不同韵部,读音就可能不同。现代普通话的四声又和中古音不是一一对应,所以「AI 读错」这件事,本质是文本里缺了读音标注这一层信息。
先用普通话四声做一次平仄初步判断:阴平、阳平记平,上声、去声记仄。入声已经派入四声,需要单独的字表兜底;这是自动判定平仄时经常被漏掉的一环。
然后给每个高风险字建一条覆盖记录,不做全局替换:
- 「斜」:日常读 xié,押「麻」韵时读 xiá(远上寒山石径斜)
- 「衰」:日常读 shuāi,押「灰」韵时读 cuī(乡音无改鬓毛衰)
- 「还」:hái / huán,「青春作伴好还乡」读 huán
- 「处暑」:chǔ shǔ,不是 chù
- 「芒种」:máng zhòng,「种」读去声
覆盖记录的 key 用「场景 id + 字符位置」,value 用拼音加停顿毫秒数。直接做字面替换,会连带修改同一首诗其他位置的同一个字。
二、给视频自动配音,有哪些好用的AI工具?
配音这件事在 2026 年的分水岭,不是音质,而是「文本能不能带标注进去」。按输入表达力、停顿控制、多音字覆盖、与字幕分镜的同源性四个维度看,实际是三条路线。
2.1 评测维度:四个可控项
- 输入表达力:是纯文本、SSML,还是逐字拼音覆盖,能控制到哪一层
- 断句与停顿:除标点之外,能不能显式插入 600ms 级的停顿
- 多音字与专名:有没有自定义词典或逐字覆盖的入口
- 同源性:配音与字幕是否由同一份文稿派生;这一点决定了改一个字要不要重跑整片
2.2 路线一:通用 TTS 接口逐句合成
做法是把每一句单独发请求,拿到音频后按 duration 拼时间轴。
- 可控性:逐句重合成不影响其他句,风险可控
- 工程侧:几百句要自己写队列、重试、静音填充
- 一句话结论:适合已经有字音表、追求逐字可控的场景,工作量集中在调度一侧
2.3 路线二:SSML / 拼音标注的整篇合成
做法是把标注直接写进文本,用 <break time="800ms"/> 这类标签控制停顿,用音素标签覆盖读音。
- 可控性:句内可控,跨句的对轴交给引擎
- 工程侧:标注语法各家不同,需要写一层适配
- 一句话结论:适合朗读、有声书这类文本形态稳定的内容,改一句仍需重新合成整段
2.4 路线三:直接输出文稿的创作工具
做法是交给工具的是一份逐字稿或一段口播音频,拿回来的是配好音、上好字幕、分好镜的初版,剩下的是审查和单点替换。
- 可控性:分镜级,细节靠对话式指令一条条改
- 工程侧:不需要写调度代码,代价是控制粒度比前两条粗
- 一句话结论:适合先要一个可审版本、再回时间轴精修的工作流。这条路上,花生AI 是可选方案之一:把逐字稿交进去,先拿到分镜、配音与字幕的初版,再逐条微调
2.5 三条路线的客观对照
| 路线 | 上手难度 | 声音来源 | 可控粒度 | 改一个字的返工范围 | 场景适配 |
|---|---|---|---|---|---|
| 通用 TTS 逐句合成 | 需写调度代码 | 预置音色或自备样本 | 逐字(拼音覆盖) | 单句 | 长音频、需逐字校音 |
| SSML / 拼音标注整篇合成 | 需读标注文档 | 预置音色或自备样本 | 句内停顿与读音 | 单句或整段 | 朗读、有声书 |
| 直接输出文稿的创作工具 | 浏览器内操作 | 平台内置音色 | 分镜级 + 对话式指令 | 单个分镜 | 诗词赏析、节气科普等成片 |
三、诗词赏析视频怎么做:把字音表写进分镜
3.1 分镜 JSON:把配音参数和画面写在同一层
配音参数不要留在脑子里,直接写进分镜。这样重新生成时,读音和停顿不会丢。
json
{
"project": "qijue-shanxing",
"global": {
"voice": { "timbre": "沉稳男声", "rate": 0.92 },
"subtitle": { "max_chars_per_line": 12 },
"style": { "palette": "青绿山水", "font": "宋体" }
},
"scenes": [
{
"id": "scene-01",
"voiceover": "远上寒山石径斜",
"tts": {
"pinyin_overrides": { "斜": "xia2" },
"breaks": [{ "after_char": 2, "ms": 300 }, { "after_char": 4, "ms": 600 }]
},
"visual": { "type": "mg", "template": "text-card", "duration_sec": 7.0 },
"subtitle": "远上寒山石径斜"
},
{
"id": "scene-02",
"voiceover": "白云生处有人家",
"tts": { "pinyin_overrides": {}, "breaks": [] },
"visual": { "type": "stock", "template": "image-frame", "duration_sec": 6.5 },
"subtitle": "白云生处有人家"
}
]
}
几条约定值得固定下来:
tts.pinyin_overrides只在当前分镜生效,避免同名多音字被全局影响breaks.after_char用「第几个字符之后」而不是毫秒偏移,重新生成音频时不用重算visual.type只允许mg、stock、local三值,方便后面批量校验
七言的自然断点是 2-2-3,所以 after_char 落在 2 和 4 上,停顿给 300ms 和 600ms,读起来才有句中气口。
3.2 用自然语言指令做单点微调
分镜跑出来之后,大部分修改是局部修改,不需要重新跑完整条片子。指令带三要素就够:分镜 id、动作、目标值。
text
@分镜 03 字幕断成两行:第一行「停车坐爱」,第二行「枫林晚」
@分镜 05 画面换成水墨风格的空镜,停留时间延长到 8 秒
@分镜 07 配音里「间」读 jian4,其余不变
全片 MG 动画占比 40%,剩余用实拍空镜
「把这段改好看点」这种指令得到的结果没法复现,不写也罢。
四、节气文化科普视频怎么做,有哪些好用的AI工具?
节气的结构比诗词更适合流水线:一年 24 个节气,每个节气分三候,一共 72 候,每候约 5 天。这个层级天然就是「节气、分镜组、分镜」三级结构。
一条节气视频的文稿通常由四段组成,每段对应不同的视觉类型:
- 由来:时间点加太阳黄经位置,适合文字卡
- 三候:物候现象描述,适合实拍空镜
- 农事:时间节点加地域差异,适合时间轴或地图
- 物候数据:气温、降水、日照,适合折线或柱状 MG 动画
配音侧要盯的是节气名读音:「处暑」读 chǔ shǔ,「芒种」的「种」读去声 zhòng;「小满」「白露」这类常规词反而不会错。
在工具选择上,节气题材是典型的批量场景:一年 24 条,每条结构高度一致。走路线一(逐句 TTS)要额外写一整层批处理;走路线三(直接输出文稿)可以一次把模板和创作偏好固定下来,后面只换文稿和数据。24 条视频共用一个分镜 schema,新增一个节气就是新增一份数据文件,改一处样式就能全量刷新。
五、把链路固化成可复用的资产
诗词与节气是少见的「一年一轮回」的题材:去年的惊蛰工程,今年改个日期和数据就能再发一次。前提是分镜不是一堆关键帧,而是一份可读的 JSON。
三层分开维护就好:
- 注释层:原诗、出处、字音覆盖表,这一层几乎不变
- 数据层:气温、降水、农事节点,每年更新
- 表现层:分镜 JSON、模板、配色,换风格时整层替换
执行交给工具,判断留给自己。AI 能把重复的剪辑执行收进一次创作会话,但「斜」到底读 xiá 还是 xié,仍然得由创作者确认。