{
  "project_id": "01062026-001-Pham-Ngu-Lao",
  "step": 18,
  "status": "needs_review",
  "inputs": {
    "intro_video_path": "/data/video-pipeline/Youtube-Video-Maker/Project/01062026-001-Pham-Ngu-Lao/output/intro/intro.mp4",
    "main_video_path": "/data/video-pipeline/Youtube-Video-Maker/Project/01062026-001-Pham-Ngu-Lao/output/main_story.mp4",
    "main_qa_report_path": "/data/video-pipeline/Youtube-Video-Maker/Project/01062026-001-Pham-Ngu-Lao/output/main_story_qa_report.json",
    "outro_video_path": "/data/video-pipeline/Youtube-Video-Maker/data/outtro/outtro1_1080p.mp4",
    "bgm_audio_path": "/data/video-pipeline/Youtube-Video-Maker/data/music/the_mountain-history-archive-145197/the_mountain-history-archive-145197.mp3",
    "thumbnail_16x9_path": "/data/video-pipeline/Youtube-Video-Maker/Project/01062026-001-Pham-Ngu-Lao/output/thumbnails/thumb_16x9_final.png",
    "thumbnail_9x16_path": "/data/video-pipeline/Youtube-Video-Maker/Project/01062026-001-Pham-Ngu-Lao/output/thumbnails/thumb_9x16_final.png"
  },
  "output_video_path": "/data/video-pipeline/Youtube-Video-Maker/Project/01062026-001-Pham-Ngu-Lao/output/final/final_video.mp4",
  "probe_path": "/data/video-pipeline/Youtube-Video-Maker/Project/01062026-001-Pham-Ngu-Lao/output/final/final_video_probe.json",
  "blackdetect_path": "/data/video-pipeline/Youtube-Video-Maker/Project/01062026-001-Pham-Ngu-Lao/output/final/final_blackdetect.json",
  "package_response": {
    "status": "ok",
    "output_video_path": "/data/video-pipeline/Youtube-Video-Maker/Project/01062026-001-Pham-Ngu-Lao/output/final/final_video.mp4",
    "probe": {
      "programs": [],
      "streams": [
        {
          "index": 0,
          "codec_name": "h264",
          "codec_type": "video",
          "duration": "1217.900000"
        },
        {
          "index": 1,
          "codec_name": "aac",
          "codec_type": "audio",
          "sample_rate": "24000",
          "channels": 1,
          "duration": "1216.991000"
        }
      ],
      "format": {
        "duration": "1217.900000"
      }
    },
    "ffmpeg_tail": ":19:31.51 bitrate=3159.6kbits/s dup=1 drop=0 speed= 3.6x    \nframe=35164 fps=108 q=26.0 size=  452096kB time=00:19:32.07 bitrate=3159.8kbits/s dup=1 drop=0 speed= 3.6x    \nframe=35178 fps=108 q=26.0 size=  452352kB time=00:19:32.50 bitrate=3160.5kbits/s dup=1 drop=0 speed=3.59x    \nframe=35193 fps=108 q=26.0 size=  453120kB time=00:19:33.01 bitrate=3164.5kbits/s dup=1 drop=0 speed=3.59x    \nframe=35232 fps=108 q=26.0 size=  453632kB time=00:19:34.33 bitrate=3164.5kbits/s dup=1 drop=0 speed=3.59x    \nframe=35290 fps=108 q=26.0 size=  454656kB time=00:19:36.25 bitrate=3166.4kbits/s dup=1 drop=0 speed=3.59x    \nframe=35352 fps=108 q=26.0 size=  455680kB time=00:19:38.34 bitrate=3167.9kbits/s dup=1 drop=0 speed=3.59x    \nframe=35412 fps=108 q=26.0 size=  456704kB time=00:19:40.39 bitrate=3169.6kbits/s dup=1 drop=0 speed=3.59x    \nframe=35485 fps=108 q=26.0 size=  457728kB time=00:19:42.74 bitrate=3170.4kbits/s dup=1 drop=0 speed=3.59x    \nframe=35553 fps=108 q=26.0 size=  458496kB time=00:19:45.08 bitrate=3169.4kbits/s dup=1 drop=0 speed=3.59x    \nframe=35628 fps=108 q=26.0 size=  459008kB time=00:19:47.56 bitrate=3166.3kbits/s dup=1 drop=0 speed=3.59x    \nframe=35714 fps=108 q=26.0 size=  460032kB time=00:19:50.16 bitrate=3166.4kbits/s dup=1 drop=0 speed= 3.6x    \nframe=35780 fps=108 q=26.0 size=  460544kB time=00:19:52.04 bitrate=3165.0kbits/s dup=1 drop=0 speed= 3.6x    \nframe=35801 fps=108 q=26.0 size=  460544kB time=00:19:52.72 bitrate=3163.2kbits/s dup=1 drop=0 speed=3.59x    \nframe=35822 fps=108 q=26.0 size=  460544kB time=00:19:53.40 bitrate=3161.3kbits/s dup=1 drop=0 speed=3.59x    \nframe=35844 fps=108 q=26.0 size=  460544kB time=00:19:54.13 bitrate=3159.4kbits/s dup=1 drop=0 speed=3.59x    \nframe=35890 fps=108 q=26.0 size=  460544kB time=00:19:55.66 bitrate=3155.4kbits/s dup=1 drop=0 speed=3.58x    \nframe=36009 fps=108 q=26.0 size=  460544kB time=00:19:59.63 bitrate=3144.9kbits/s dup=1 drop=0 speed=3.59x    \nframe=36130 fps=108 q=26.0 size=  460800kB time=00:20:03.68 bitrate=3136.1kbits/s dup=1 drop=0 speed= 3.6x    \nframe=36256 fps=108 q=26.0 size=  460800kB time=00:20:07.87 bitrate=3125.2kbits/s dup=1 drop=0 speed= 3.6x    \nframe=36354 fps=108 q=26.0 size=  461056kB time=00:20:11.15 bitrate=3118.5kbits/s dup=1 drop=0 speed=3.61x    \nframe=36373 fps=108 q=26.0 size=  461056kB time=00:20:11.79 bitrate=3116.8kbits/s dup=1 drop=0 speed=3.61x    \nframe=36417 fps=108 q=26.0 size=  461056kB time=00:20:13.24 bitrate=3113.1kbits/s dup=1 drop=0 speed= 3.6x    \n[mp4 @ 0x64542d402dc0] Starting second pass: moving the moov atom to the beginning of the file\nframe=36537 fps=108 q=-1.0 Lsize=  462231kB time=00:20:17.80 bitrate=3109.4kbits/s dup=1 drop=0 speed=3.61x    \nvideo:445449kB audio:15843kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.203411%\n[libx264 @ 0x64542d407440] frame I:152   Avg QP:16.91  size:439659\n[libx264 @ 0x64542d407440] frame P:10698 Avg QP:20.43  size: 32155\n[libx264 @ 0x64542d407440] frame B:25687 Avg QP:24.82  size:  1764\n[libx264 @ 0x64542d407440] consecutive B-frames:  4.2%  5.0%  3.3% 87.5%\n[libx264 @ 0x64542d407440] mb I  I16..4:  3.0%  3.9% 93.1%\n[libx264 @ 0x64542d407440] mb P  I16..4:  0.1%  0.9%  0.9%  P16..4: 45.8%  9.9%  8.3%  0.0%  0.0%    skip:34.0%\n[libx264 @ 0x64542d407440] mb B  I16..4:  0.0%  0.0%  0.0%  B16..8:  9.6%  1.7%  0.2%  direct: 1.1%  skip:87.4%  L0:37.2% L1:41.2% BI:21.6%\n[libx264 @ 0x64542d407440] 8x8 transform intra:30.0% inter:59.2%\n[libx264 @ 0x64542d407440] coded y,uvDC,uvAC intra: 96.6% 59.1% 27.7% inter: 7.9% 4.2% 0.1%\n[libx264 @ 0x64542d407440] i16 v,h,dc,p: 36%  5% 48% 11%\n[libx264 @ 0x64542d407440] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 16% 13% 23%  7%  9%  7%  8%  8% 10%\n[libx264 @ 0x64542d407440] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 14% 14% 12%  9% 12%  9% 10%  9% 11%\n[libx264 @ 0x64542d407440] i8c dc,h,v,p: 52% 23% 20%  5%\n[libx264 @ 0x64542d407440] Weighted P-Frames: Y:9.3% UV:3.0%\n[libx264 @ 0x64542d407440] kb/s:2996.24\n[aac @ 0x64542d4021c0] Qavg: 65513.867\n",
    "method": "explicit_ffmpeg_audio_safe",
    "sample_rate": 24000,
    "channels": 1,
    "bgm_volume": 0.2
  },
  "input_probes": {
    "intro": {
      "programs": [],
      "streams": [
        {
          "index": 0,
          "codec_name": "h264",
          "codec_type": "video",
          "duration": "17.100000"
        },
        {
          "index": 1,
          "codec_name": "aac",
          "codec_type": "audio",
          "sample_rate": "22050",
          "channels": 1,
          "duration": "17.100000"
        }
      ],
      "format": {
        "duration": "17.101000"
      }
    },
    "main": {
      "programs": [],
      "streams": [
        {
          "index": 0,
          "codec_name": "h264",
          "codec_type": "video",
          "duration": "1174.034310"
        },
        {
          "index": 1,
          "codec_name": "aac",
          "codec_type": "audio",
          "sample_rate": "22050",
          "channels": 1,
          "duration": "1173.104444"
        }
      ],
      "format": {
        "duration": "1174.081000"
      }
    },
    "outro": {
      "programs": [],
      "streams": [
        {
          "index": 0,
          "codec_name": "h264",
          "codec_type": "video",
          "duration": "26.733333"
        },
        {
          "index": 1,
          "codec_name": "aac",
          "codec_type": "audio",
          "sample_rate": "24000",
          "channels": 1,
          "duration": "26.709000"
        }
      ],
      "format": {
        "duration": "26.734000"
      }
    }
  },
  "final_probe": {
    "programs": [],
    "streams": [
      {
        "index": 0,
        "codec_name": "h264",
        "codec_type": "video",
        "duration": "1217.900000"
      },
      {
        "index": 1,
        "codec_name": "aac",
        "codec_type": "audio",
        "sample_rate": "24000",
        "channels": 1,
        "duration": "1216.991000"
      }
    ],
    "format": {
      "duration": "1217.900000"
    }
  },
  "validation": {
    "final_exists": true,
    "has_audio": true,
    "has_video": true,
    "main_qa_passed": false,
    "order": [
      "intro",
      "main_story",
      "outro"
    ],
    "expected_duration_sec": 1217.9159999999997,
    "final_duration_sec": 1217.9,
    "duration_diff_sec": -0.01599999999962165,
    "duration_within_tolerance": true,
    "bgm_volume": 0.2,
    "black_event_count": 0,
    "blackdetect_clear": true
  },
  "notes": [
    "Step 18 package is not final approval; run Step 19 final QA before output/info.json approval."
  ]
}