问题出现得很突然,日志倒是留得挺全。一小时访谈录音按固定 10 秒切片送转写,合并后的文本在每个交界处少两三个字,抽查第 47 段与第 48 段之间,原话说的是「这个方案下个月上线」,结果只剩「这个方案」和「上线」。

刚开始盯着「合并时按时间戳去重把重叠部分整段删掉」,折腾了半个多小时,排掉了。

把日志和配置对完,能解释这个现象的基本就这几处。切点落在词语中间,两段各自解码都缺一半。另一种情况是切片之间没有重叠,边界处没有上下文。

少数情况下是每段单独做 VAD,尾音被判定为静音裁掉。

上来先按静音点找合适的切分位置

ffmpeg -i talk.wav -af silencedetect=noise=-32dB:d=0.5 -f null - 2>&1 | grep silence_start | head -20

随后切分时给出 1.5 秒重叠

ffmpeg -y -i talk.wav -f segment -segment_time 10 -reset_timestamps 1 -c:a pcm_s16le part_%03d.wav

接着合并时按词级时间戳去重而不是整段删除

python -c "print({'overlap_sec':1.5,'dedup':'by_word_timestamp'})"

等前面都确认过,再抽三段交界处人工比对

python -c "print({'seg':47,'expect':'这个方案下个月上线'})"

怎么算真的好了,看的是同一批现象。交界处的句子完整,没有重复也没有缺字,整篇文本与人工抽听的三段一致,段落数与原切片数不再相关。

重叠是必要的浪费,宁可多转一点再按时间戳裁掉,也别在切点处赌运气,尤其是语速快的访谈。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。

作者 9823189