13 — 输出与文件
源码:src/vocal10n/pipeline/file_writer.py。
文件结构
输出写入 output/(可由 output.directory 配置):
output/
├── audio/ # WAV 录音(save_wav=true 时)
├── subtitles/
│ ├── YYYY-MM-DD_HH-MM-SS_source.srt
│ ├── YYYY-MM-DD_HH-MM-SS_source.txt
│ ├── YYYY-MM-DD_HH-MM-SS_target.srt
│ └── YYYY-MM-DD_HH-MM-SS_target.txt
└── training_data/ # 预留训练数据目录
会话时间戳在 PipelineCoordinator.start_session() 时确定,并作为该会话所有文件前缀。
各格式开关
来自 config.output(Output 页同样可设置):
| Key | 内容 |
|---|---|
save_source_txt | 带标点的源语言修正文稿。每个 confirmed 片段一行。 |
save_source_srt | 源语言字幕文件。SRT 格式,去标点、空格分词,带时间轴。 |
save_target_txt | 带标点的目标语言翻译文本。 |
save_target_srt | 目标语言字幕。SRT 格式,时间轴与源片段对齐。 |
save_wav | 16 kHz 单声道原始麦克风音频,可用于训练数据收集。 |
若所有开关都关闭,不会创建 file writer,也不会有额外 I/O 开销。
异步写入
所有写入均在 FileWriter 后台线程完成。Qt 事件循环与推理线程不会被磁盘 I/O 阻塞。写入器在 start_session() 创建,在 stop_session() 刷新并关闭。
SRT 细节
- 时间戳来自延迟跟踪器/片段时间,而非墙钟时间,因此与实际被转写音频保持一致。
- SRT 文本会去掉标点并替换为空格,符合
initialplan.md的规范。 - source 与 target 共享片段边界:target 片段继承对应 source 的 start/end,保证双语回放对齐。
WAV
当 save_wav=true 时,PipelineCoordinator 持有 AudioCapture 引用,写入器按会话偏移从麦克风环形缓冲持续写入。保存的 WAV 不经过 AEC,保留原始麦克风输入,适合再训练与问题分析。