先看现象。把 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
改之前我把相关日志按时间截了一段存着,事后对时间线用得上。
恢复的判定其实很直接。所有分片都返回成功,合并后的文本覆盖整场会议,切片处的句子没有被截断或重复。
提醒一点。时长上限和体积上限是两个独立约束,压码率只解决体积,切片才是绕开时长限制的办法。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。
