Skip to content

1KeyTranscoder v0.6.1

Pre-release
Pre-release

Choose a tag to compare

@Eureka175 Eureka175 released this 11 Sep 15:50
· 62 commits to main since this release

1KeyTranscoder v0.6.1

bugfix release(无功能新增、无破坏性变更)。基线 v0.6.0,上游分支 main

Highlights

  • Channel Sync P1 —— --channel-sync 自动轨间延时补偿:GCC-PHAT 两阶段测量 → 相位斜率精估 → 轨道级质量门 → 纯整数样本移位 → 复检;锚点按 CH3 > CH4 > CH1 > CH2 回退;轨道级部分成功(坏轨原样保留,不拖累健康轨)
  • AV1 mainline —— SVT-AV1(软件)/ NVENC-AV1 / QSV-AV1 三后端与 HEVC/x265 同处 main,共用一个入口与一套 Sony/DJI 元数据保留管线
  • AV1 + channel-sync —— AV1 后端与 --channel-sync / --channel-sync-transparent 组合路径已验证
  • AV1 color metadata fidelity —— 源素材未声明色彩描述时,AV1 输出不再凭空带上 bt709
  • Streaming memory fix(本版核心修复) —— --channel-sync 长素材内存无上限增长已修复
  • Transparent / Sony / DJI preservation —— --channel-sync-transparent 剪辑前预处理;Sony XAVC(rtmd/nrtm/uuid)与 DJI(djmd/dbgi/tmcd)元数据原生保留

Fixed — --channel-sync 长素材内存无上限增长

10 分钟 / 4 轨 / 48 kHz 素材上峰值 RSS 曾达 605–713 MB随时长线性增长(每分钟 +50~137 MB)。

根因np.memmap 并不等于低内存 —— 映射本身几乎不占内存(增量 +0.0 MB),但每个被触碰的 file-backed 页都计入进程 WorkingSet 并长期保留,而实现确实顺序触碰了每条轨的每一个字节:_track_health() 分块扫描整轨算 RMS → 每轨恰好 +110 MB(4 轨 +440 MB);shift_stream()np.memmap(mode="w+") 写整轨 → 输出脏页常驻。阶段探针实测 719.0 MB 峰值中约 61% 来自整轨映射页驻留

修复:新增 RawStream 有界窗口读取器(seek+read,1 MiB 对齐块 + 4 槽 LRU,每流约 4 MiB)取代整文件映射;shift_stream() 输出改普通文件句柄;estimate_pair() / recheck_residual() 拆为「所有权包装 + 纯计算」。

算法语义未变:块寻址落在与 memmap 相同的文件偏移,dtype 映射、f32→f64 转换点与 RMS 平方和归约顺序均未变;GCC-PHAT 数学、delay 方向、搜索窗、置信度/aligned/drift_min_ms 阈值、锚点优先级、low_confidence/insufficient_frames 判定与报告字段一行未改;未引入 resample / time-warp / fractional sinc / 新依赖。

Performance(本次实测)

规格:  600 s / 4 audio tracks / 48 kHz / --channel-sync / 单线程 (--jobs 1)
输入:  LONG-CS-AUDIO.mp4 (600.02 s, 4× pcm_s24be 单声道, 真实 A7M5 素材流拷贝拼接)

Peak RSS:  153-288 MB      (目标 <= 512 MB)   PASS
Runtime:   45.3-52.7 s     (目标 < 60 s)      PASS

同步正确性:status=applied / scope=partial / 锚点 CH3;CH1 shift_samples=1051(= 冻结标定值 +21.8958 ms @​48 kHz);复检残差 +0.0180 ms(≤0.05 ms 门限);CH2 复检超差 → 安全 untouched 未误修;4 条音轨完整、输出可解码。

时长扫描(v0.6.0 → v0.6.1):60 s 151.6→208.1、150 s 356.7→228.8、300 s 468.3→208.5、450 s 579.7→264.6、600 s 605.4→209.3 MB —— RSS 不再随时长增长

Validation

结果
137 段真实 A7M5 baseline 已对齐 111 / 实际修正 11 / 测量失败 15 完全复现;逐文件报告 JSON 137/137 字节相同
Full short regression --level full228 PASS / 0 FAIL(573 s)
Package integrity 54/54 PASS(SHA256 / sidecar / manifest 对账 / ZIP CRC / 455 文件逐文件 hash / 无开发残留)
Clean-room cold-start 77/77 PASS(版本 1KeyTranscoder 0.6.1;x265 / SVT-AV1 / QSV-AV1 / NVENC-AV1 / channel-sync / transparent / Sony preservation / AV1+channel-sync,全部 rc=0、可解码、音轨 4/4)
600 s channel-sync benchmark 20/20 PASS(RSS 288.3 MB / 46.4 s)

Package

Archive 1KeyTranscoder-v0.6.1-win64-selfcontained.zip
Size 575,571,948 B (548.9 MiB)
SHA256 1c3685cf7e23ea9e227d5f42b36ce1978fa4c68206c84e348882153f09b39d31
内置运行时 ffmpeg/ffprobe 9.0.1(libsvtav1 v4.2.0 / libx265 / libvmaf)、NVEncC 9.31、QSVEncC 8.26、GPAC 26.02
不含 .git/work/testsets/docs/logs/dist/release/__pycache__/

需要 Python 3.11+ 与对应 GPU 驱动;解压即用。校验:
certutil -hashfile <zip> SHA256 或对照 .sha256 附件。

Known Limitations

  • SVT-AV1 无场景关键帧scd 只管码率分配)、mbr 为软上限(非 VBV 硬钳)
  • AV1 仅 MP4 容器,统一 4:2:0 输出
  • --channel-sync 只做整数样本移位:无 resample、无 fractional sinc、无 time-warp;真实慢漂移(39–76 ppm)判 non_constant 并拒绝修正
  • --channel-sync 仅支持 48 / 96 kHz 线性 PCM≥3 条独立单声道轨
  • --channel-sync 长程性能仅在 4 轨 / 48 kHz / 单线程规格下实测
  • --channel-sync-transparent 成功路径保留 .1ktwork/(4× audio_*.mov + 报告 JSON,10 分钟约 330 MB),属既有行为

仍未完成,不得视为已解决:Sony 10 分钟长程验证 · DJI 10 分钟长程验证 · --jobs auto 长程验证 · --experimental-multihw 长程验证 · P2 漂移分类与 resample(NOT STARTED)。

Compatibility

档位 JSON 与命令行无破坏性变更--channel-sync 的阈值、默认值、报告字段与 JSON 结构完全不变;--channel-sync 关闭时输出与 v0.6.0 行为一致。


完整发布说明见仓库 docs/release_notes_v0.6.1.md