{
  "schemaVersion": 1,
  "slug": "audio-stream-aac-export-check",
  "locale": "zh",
  "evidenceClass": "executed-local-fixture-not-provider-generation",
  "providerModelTest": false,
  "productionTaskRun": false,
  "runCommand": "node run-recipe.mjs --out ./my-run",
  "environment": {
    "nodeVersion": "v24.18.0",
    "ffmpeg": {
      "version": "ffmpeg version 6.0 Copyright (c) 2000-2023 the FFmpeg developers",
      "binarySha256": "a90e3db6a3fd35f6074b013f948b1aa45b31c6375489d39e572bea3f18336584"
    }
  },
  "title": "区分无音轨与静音，并验收 AAC 导出",
  "description": "创建原创纯音、静音轨与无音轨夹具，实际转为 AAC，再检查音轨身份、解码样本和数值能量。",
  "goal": "确认必需音轨确实存在且经过 AAC 转码仍可解码。样本数与 RMS 数值检查不等于听音、清晰度或音质评审。",
  "preparation": [
    "准备 Node.js 与支持 AAC 的 FFmpeg，必要时设置 FFMPEG_BIN；不下载外部音乐或语音。",
    "辨认三类输入：原创 440Hz 正弦 WAV、数字静音 WAV，以及一秒无音轨视频。静音 WAV 有 16000 个零样本；无音轨文件根本没有可映射的音频流。",
    "选用全新输出目录，并保留记录首跑的 initial-failed-run.json。修正版流复制不使用 -shortest，实际保留十帧视频。"
  ],
  "steps": [
    {
      "title": "01. 创建三种不同的音频状态",
      "body": "脚本直接用 Node Buffer 写出 WAV 头部和 PCM 样本，再分别把纯音与静音封装进原创视频。存在但样本为零的音轨，与文件里没有音轨，是两个不同条件。"
    },
    {
      "title": "02. 显式要求映射音轨",
      "body": "导出 aac-export.mp4 时明确映射 0:v:0、0:a:0，视频复制，音频以 AAC 64kbit/s 编码。无音轨夹具应让必需映射失败，不用可选映射掩盖缺失。"
    },
    {
      "title": "03. 解码样本并测量能量",
      "body": "将 AAC 解码为单声道 16kHz、16位有符号 PCM。本次返回 16384 样本，合成纯音 RMS 为 0.1391365。计数允许有限 AAC 填充，不把带填充的原始样本直接称为精确播放时长。"
    },
    {
      "title": "04. 分开验收编码、静音与视频",
      "body": "实际检查日志显示 Audio: aac；视频仍完整解码十帧，静音轨样本值全部为零。首跑曾因 -shortest 截早，失败回执已保留；修正脚本后七项检查全部通过。"
    }
  ],
  "acceptance": [
    "导出音轨能明确映射并解码为非空、偶数字节的16位 PCM。",
    "AAC 解码样本在 16000 至 17024 之间，本次为 16384。",
    "原创正弦解码 RMS 在 0.1 至 0.2 之间，本次为 0.1391365。",
    "实际 FFmpeg 日志明确标识音频编码为 AAC。",
    "导出视频仍有十帧完整的 320×180 画面。",
    "存在的静音轨解码为零值，无音轨明确映射失败；七项检查通过。"
  ],
  "troubleshooting": [
    {
      "symptom": "声称是静音文件，却提示没有音轨。",
      "change": "只检查必需的音轨映射；静音波形也必须有实际音频流，可改用配套 silent-track 夹具验证该条件。"
    },
    {
      "symptom": "解码样本数略多于一秒。",
      "change": "固定输出 16kHz，对照有限 AAC 填充范围，不把所有填充样本都写成精确显示时长。"
    },
    {
      "symptom": "封装后复制的视频提前结束。",
      "change": "在等时长夹具流复制中只移除 -shortest，再核对十帧完整性；初次失败回执保留了这个真实问题。"
    }
  ],
  "ending": "保留音轨日志与数值样本检查，编辑交付前另行听音并检查同步。本配方没有完成这两种人工评审。",
  "assetCaption": "原创合成纯音、静音 WAV，本地封装转码媒体与三状态音频图；没有声称听音或模型音频生成。"
}
