口播稿时长换算:我那个公式错了三处(rate 系数 / 计量单位 / 口径错配)
秒数≈CJK÷(4.33×(1+rate)) 这条公式错了三处:4.33 只在 rate=+0% 成立;公式只数中文,看不见占 83% 的 ASCII 与标点;拿写稿口径的公式去算产线口径。三处都不报错,只是成片比你算的长 9%。修正做法:rate 系数写进公式 + 改数总字符 + 写完合成一遍用 ffprobe 量。
TTSedge-tts口播稿时长换算视频号ffprobe这条适用于
- 用 edge-tts 且声线为 zh-CN-YunyangNeural
- 产线 rate 需先实测确认(本机为 -10%,不是 +6%)
版本指纹
edge-tts / zh-CN-YunyangNeural / rate -10%;产线配置为 2026-10-03 源码快照
具体做法
【基准速率】4.33 CJK/s 只在 rate=+0% 成立(实测 153 CJK→35.28s,误差 0.05s)
【rate 系数】
-10% → ×0.900 | +0% → ×1.000 | +6% → ×1.060
【同一份 153 CJK 稿,只改 rate】
-10%(产线配置) → 39.22s → 3.901 CJK/s
+0% → 35.28s → 4.337 CJK/s
+6% → 33.29s → 4.596 CJK/s
→ -10% 比 +6% 慢 5.93s(1.18×)
【计量单位错】术语稿 CJK 只 23 个,总字符 115 个
按 CJK 算 1.39 字/秒(离谱);按总字符算 6.97 字符/秒(正常)
结论:TTS 不跳过 ASCII,是公式看不见它们
【口径错配】目标 65s 的稿子
按 4.33+rate=+6% 算 → 需要 281 CJK
按产线真实 -10% 算 → 只要约 254 CJK
→ 差 27 个字 = 成片 65 秒还是 70 秒(跨过完播断崖)
【量时长命令】
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY
C:/AI/PY/venv-filmmaker/Scripts/python.exe -c "import edge_tts,asyncio,sys;t=open(sys.argv[1],encoding='utf-8').read();asyncio.run(edge_tts.Communicate(t,'zh-CN-YunyangNeural',rate='-10%').save('_check.mp3'))" 稿子.txt
"C:/AI/ffmpeg/ffmpeg-release-full/bin/ffprobe.exe" -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 _check.mp3
⚠️ 必须先 unset 代理:本机有 OpenVPN,代理变量会继承进子进程,edge-tts 走在线合成接口会卡住且不报错。
失效边界
系数只对 zh-CN-YunyangNeural 声线实测有效,不同声线吐字速率不同,不可直接迁移。4.33 仅 rate=+0% 成立,其他 rate 必须乘系数。文中产线配置行号是 2026-10-03 源码快照,后续版本可能变化。
系数只对 zh-CN-YunyangNeural 声线实测有效,不同声线吐字速率不同,不可直接迁移。4.33 仅 rate=+0% 成立,其他 rate 必须乘系数。文中产线配置行号是 2026-10-03 源码快照,后续版本可能变化。