先看现象。把 2 小时 10 分的会议录音整段上传转写,接口返回 400 原文 audio duration exceeds 3600 seconds,压成 64kbps 再传还是同样的错。

排查方向其实有限,先把可能性排一排。单文件时长有硬上限,和码率无关。也可能是体积上限换算下来只够一小时左右。

还有一种情况,编码后时长没变,只是码率降了。

另外,base64 方式上传还会再放大三分之一体积。

取准确时长做切片计划

ffprobe -v error -show_entries format=duration -of csv=p=0 meeting.m4a

然后按 20 分钟切片并保留 1 秒重叠

ffmpeg -y -i meeting.m4a -f segment -segment_time 1200 -c copy -reset_timestamps 1 part_%03d.m4a

顺序提交并记录每个分片的偏移

python asr_batch.py --dir parts --offset 1200 --out parts.jsonl

末了按偏移合并文本并去重叠

python merge_asr.py --in parts.jsonl --overlap 1.0 --out meeting.txt

改之前我把相关日志按时间截了一段存着,事后对时间线用得上。

恢复的判定其实很直接。所有分片都返回成功,合并后的文本覆盖整场会议,切片处的句子没有被截断或重复。

提醒一点。时长上限和体积上限是两个独立约束,压码率只解决体积,切片才是绕开时长限制的办法。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。

作者 9823189