{
  "schemaVersion": 1,
  "slug": "frame-sequence-to-review-clip",
  "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": "把有序 PNG 序列组装为审片视频",
  "description": "先核对连续文件名与哈希，实际拒绝缺帧和乱序，再把三张原创图编码成 1.5 秒审片 MP4。",
  "goal": "用明确的每秒两帧时间安排，把已有静帧组装为审片。本任务是图片序列正向编码，没有生成中间帧，也不是从视频反向抽帧。",
  "preparation": [
    "准备 Node.js 与 FFmpeg，必要时设置 FFMPEG_BIN。输入为三张原创 160×90 PNG，分别是红、绿、蓝色区并带白色边缘标记。",
    "查看 sequence.json：索引1至3分别绑定 frame-0001.png 至 frame-0003.png 和 SHA-256，输入帧率明确为两 FPS。",
    "选用新输出目录，并要求输入文件名集合完全一致。图像看起来合理，但顺序错误，仍必须判定清单失败。"
  ],
  "steps": [
    {
      "title": "01. 固定图片序列身份",
      "body": "脚本生成三张练习图与明确的有序清单，每行同时保存索引、准确 basename 和 SHA-256。不能用文件系统遍历顺序代替剪辑顺序。"
    },
    {
      "title": "02. 编码前拒绝断号、多图和错字节",
      "body": "分别实跑交换清单行、临时移除第二帧、增加第五帧及错误哈希。每例都应失败，finally 会恢复原始完整序列，然后才进入实际编码。"
    },
    {
      "title": "03. 按声明输入帧率编码",
      "body": "使用 -framerate 2 -start_number 1 与 frame-%04d.png，并明确最多输出三帧。实际 review.mp4 采用 yuv444p 且无音轨。每张 PNG 贡献一帧，目标时长为1.5秒。"
    },
    {
      "title": "04. 验收帧数和色彩顺序",
      "body": "完整解码 MP4，确认只有三帧 160×90 RGB。逐帧抽样中心色区，与预期红、绿、蓝比较，单通道容差四；本次最大差值为一，没有插帧。"
    }
  ],
  "acceptance": [
    "三行清单准确对应连续的 frame-0001.png 至 frame-0003.png。",
    "交换清单行会在编码前被拒绝。",
    "缺帧与额外的非连续编号帧分别被拒绝。",
    "错误的预期 PNG SHA-256 会被拒绝。",
    "审片文件实际解码为三帧 160×90，组装使用明确的两 FPS。",
    "中心色区按红、绿、蓝排列，各通道误差不超过四，九项检查通过。"
  ],
  "troubleshooting": [
    {
      "symptom": "图片都对，但审片顺序错了。",
      "change": "只更正清单顺序与索引到文件名的绑定，重新预检后再编码。"
    },
    {
      "symptom": "编号序列缺图，编码提前停止。",
      "change": "恢复准确 basename 与哈希对应的原始 PNG，不默默复制相邻帧补位。"
    },
    {
      "symptom": "审片播放太快。",
      "change": "只修改声明的输入帧率并记录新预期时长，保留三份图像身份并重跑顺序检查。"
    }
  ],
  "ending": "把 sequence.json 与审片结果放在一起。本夹具证明选定顺序和帧数，不创造运动，也不额外延长帧停留或验收分发编码。",
  "assetCaption": "原创三色 PNG 序列、实际审片 MP4 与有序帧示意图；仅本地编码，没有模型插帧或生成。"
}
