先分清楚是哪一边超了:把每一句的「原片时长」和「合成音频时长」并排量出来,看超长是集中在少数几句,还是每句都多一点点。集中在少数句子,通常是译文比原文长太多;每句都均匀偏长,多半是合成语速偏慢或参数没调到位。判断依据是逐句差值和两轮对照结果,不是听一遍觉得「有点慢」。
配音对不上画面时,先别急着改参数。把每句译文的合成时长与对应原片时长并排量出来,看超长是集中在少数句子还是整体偏移;然后固定译文只调语速跑一轮,再固定语速只压缩译文跑一轮,两轮分开记录总时长和听感。差值集中在少数句子,优先压缩译文;整体均匀偏长且语速还有余地,才动语速。两轮同时改,就分不清效果来自哪一边。
逐句量出译文长度与合成音频时长的差值
先把原片按句子或字幕块切开,一句一条配音文件,命名带上句号,方便后面排序对齐。不切句就只看总时长,很容易把「某一句特别长」误判成「整体语速慢」。
记录表建议至少这几列,落在表格或 CSV 里都行:
| 句子序号 | 原文时长(s) | 译文字数 | 合成时长(s) | 差值(s) | 备注 |
|---|---|---|---|---|---|
| 001 | 待填 | 待填 | 待填 | 合成−原文 | 数字/术语 |
| 002 | 待填 | 待填 | 待填 | 合成−原文 |
原文时长从剪辑时间轴或字幕文件的时间码读;合成时长优先读导出音频文件本身,别只信界面上的估算值。命令行可以用 ffprobe 逐条读:
for f in out/*.wav; do
d=$(ffprobe -v error -show_entries format=duration -of default=nw=1:nk=1 "$f")
echo -e "$f\t$d"
done
BaoCut 里如果时间轴上每个配音块能直接看到长度,也可以照着抄,但导出后再用 ffprobe 复核一遍更稳。填完后按差值排序:差值最大的前几句是不是同一类句子(长定语、补充说明、口语填充词),还是分散在全篇。同时看总时长差值有多少来自这几句,能直接决定下一步该压译文还是调语速。
固定译文只调语速跑一轮对照
这一轮译文一个字不动,只改语速。语速参数的位置以你实际使用的配置文件或页面设置为准,常见写法类似下面这样,字段名需要按自己的配置替换:
tts:
voice: "zh_female_01"
speed: 1.0 # 只改这一项,其余保持不动
volume: 1.0
sample_rate: 24000
一次只上调一档,比如从当前值到配置里允许的下一档(0.05 或 0.1 这类最小步进),不要一次跨两档。每档导出一份,单独放目录,文件名里带语速值,避免几份混在一起分不清。
听感变化要记下来,不只记总时长。每档至少记三点:句尾是否被吞音、多音字和数字读法有没有变、连读处是否显得赶。总时长变短但听感发紧,说明已经接近这台音色能承受的上限,再往上调画面对上了、可听度会掉。
固定语速只压缩译文跑一轮对照
这一轮把语速固定回基准值,只动译文。判断某句该压缩的标准很直接:译文字数明显多于原文信息量,或者句子里有可以删掉而不丢信息的修饰成分。压缩优先删重复主语、客套连接词、把「进行确认」改成「确认」这类结构,而不是砍掉句子的宾语。
有几类句子不能压:数字、金额、时间、型号、专有名词、否定词。压缩这些内容容易改变事实,宁可让这一句偏长,再靠画面停顿或缩短前后句来让位。压缩后逐句回读检查点:主语和动作是否还完整、否定是否还在、数字是否仍是原值、指代是否指向同一个人或物。
把两轮结果放在一起决定改哪一边
两轮结果分开看,才能知道总时长变化来自哪里。如果只调语速就让总时长接近画面,说明主要问题是语速;如果只压缩几句译文就大幅收敛,说明问题集中在译文长度。两轮同时改,效果互相盖住,下次遇到同类片子还是得重新试。
按差值大小分档处理:差值集中在少数几句、且单句超出该句画面容量的部分明显,先压译文;差值在每句上均匀分布、单句超出不多,先调语速;两种都有时,先压那些最突出的句子,再看剩下的整体偏移还剩多少,剩下的部分才交给语速。
语速调整要有上限判断:每上一档都要能听清每个字,出现吞音、连读黏在一起、数字读错,就退回上一档。语速是用来补小幅偏移的,不能拿来兜住整段译文超长的情况。
改完后确认音画重新对齐的检查方法
改完不要凭「听着差不多」就导出。具体做法是挑几个关键点回听:每句开头第一个字是否在画面动作起点附近、句尾是否在画面切走之前收住、字幕块与配音起止是否一致。逐句对齐的片子,就把每句合成时长与对应画面时段再比一次,用前面那张表重填一列「调整后差值」。
可接受的偏差通常以几十毫秒到一百毫秒量级作参照,口型特写、字幕严格同步的场景要更严;具体尺度按你的成片用途定,先定一个容忍值再检查,比事后凭感觉争论有效。
仍对不上时,按顺序回查:先看是不是某几句差值依然很大(回到压缩译文那一步),再看每句是否都还略长(回到调语速那一步),最后检查切句是否本身就和画面不同步——切句错了,语速和译文怎么调都对不齐。