# Whisper 转录失败续跑：坏文件隔离、完成记录与断点恢复

Whisper 转录失败续跑通过独立输入、具体脚本和逐项回听完成。本页附 CPU tiny/int8 真实 ASR 结果，保留误识别，人工原文单独保存。

## 1. 建立带完成状态的任务清单

素材包包含三段 WAV 和一个故意损坏的 bad.wav，tasks.json 记录 input hash、pending/done/failed。先运行 check.py 能拒绝坏文件，失败案例不应阻止其他合法任务。 本次恢复实测后的 tasks.json 已是 done；复现实验时先复制 tasks.initial.json 为 tasks.json、bad-original.wav 为 bad.wav，再执行两次命令。

## 2. 每个任务独立捕获真实异常

执行 resume.py，失败项保存异常类型和信息，不写预期文本当输出。完成项先写临时文件，读取完整 segments 后再替换目标文件，防止中途中断留下看似完整的 JSON。

## 3. 按源 hash 判断能否跳过

续跑不仅检查输出存在，还核对 JSON 输入 hash、时间结构和 done 状态。改了源文件或参数，应创建新版本；不能只凭相同文件名跳过。

```sh
cp tasks.initial.json tasks.json
cp bad-original.wav bad.wav
python resume.py tasks.json
python resume.py tasks.json --repair
python check.py
```

## 4. 将故意损坏的输入替换为合法副本

练习第一次以 bad.wav 触发解码异常；下载 repair-map.json 提供正确替代来源。修复后只让该任务回到 pending，不重跑已完成的其他任务。

## 5. 保留恢复前后日志

第二次执行应显示已完成项跳过、失败项修复完成。核对恢复稿与原音的关联；运行日志记录实际事件，不用硬编码 done 填表。

## 6. 打包可回读交付

保存 tasks.json、events.jsonl、每个任务输出与源文件，运行 check.py 验证结束状态。失败恢复只证明任务可追溯，不证明识别文字准确。

## 7. 下载材料、检查负例与继续操作

解压素材包后先运行 python check.py，再运行 python check.py --self-test。前者读取真实 WAV / JSON / SRT 与源 hash；后者拒绝损坏 WAV、倒置时间、越界时间和缺失词时间。文件通过不代表文字、情绪或说话人判定已通过。 恢复页的 bad.wav 是本次修复后的有效文件；bad-original.wav 保留第一次损坏输入，tasks.initial.json 保留初始任务状态。

## 来源与范围

见 PROVENANCE.md。WhisperX/CosyVoice 推理本次未执行，系统音频为原创练习输入。

- https://github.com/SYSTRAN/faster-whisper
- https://github.com/SYSTRAN/faster-whisper/blob/master/faster_whisper/transcribe.py
- https://huggingface.co/Systran/faster-whisper-tiny
