${e(clip.title)}
校验记录
${e(q?.asrText)}
import fs from 'node:fs'; const dir='reports/bridge-introduction-narration-20260924'; const load=(name,fallback)=>fs.existsSync(dir+'/'+name)?JSON.parse(fs.readFileSync(dir+'/'+name,'utf8')):fallback; const {profile,clips}=load('generation.json'),quality=load('quality.json',[]),activation=load('activation.json',{}),live=load('live.json',{}); const e=s=>String(s??'').replace(/[&<>"']/g,c=>({'&':'&','<':'<','>':'>','"':'"',"'":'''}[c])); const file=url=>'../../../unreal_tran_web/public'+url; fs.writeFileSync(dir+'/index.html',`
${e(profile.avatar)} v2 · ${e(profile.voice)} · ${e(profile.engine)} · 480 × 640 / 25 fps
共 ${clips.length} 段,视频静态引用。画面口型驱动与最终音轨使用同一份处理后的 WAV;只压缩异常长静音,不改变正文。旧步骤讲解保留。
自动校验核对音轨时差、音频相关性及独立 ASR 文本。ASR 含技术词语同音误识别;这些检查不等于人工听感或逐帧口型验收,请结合视频试听。
资源接入:${activation.pass?'已接入,原四个任务及操作快照不变':'待资源验收'}。页面验收:${live.pass?'已通过四任务、翻页停播、小屏、异常重试和编排关联':'待完成'}。
${clips.map((clip,i)=>{const q=quality.find(q=>q.key===clip.key);return `${e(q?.asrText)}
':''}回滚:构建环境设 VITE_BRIDGE_INTRO_NARRATION_RELEASE=none,现有任务恢复仅图文。训练编排的新增视频可清空后保存、发布;原编排完整备份在 before-project-*.json。