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_wav16 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,保留原始麦克风输入,适合再训练与问题分析。