{
  "project_id": "05062026-001-Phung-Hung",
  "step": 18,
  "status": "needs_review",
  "inputs": {
    "intro_video_path": "/data/video-pipeline/Youtube-Video-Maker/Project/05062026-001-Phung-Hung/output/intro/intro.mp4",
    "main_video_path": "/data/video-pipeline/Youtube-Video-Maker/Project/05062026-001-Phung-Hung/output/main_story.mp4",
    "main_qa_report_path": "/data/video-pipeline/Youtube-Video-Maker/Project/05062026-001-Phung-Hung/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/05062026-001-Phung-Hung/output/thumbnails/thumb_16x9_final.png",
    "thumbnail_9x16_path": "/data/video-pipeline/Youtube-Video-Maker/Project/05062026-001-Phung-Hung/output/thumbnails/thumb_9x16_final.png"
  },
  "output_video_path": "/data/video-pipeline/Youtube-Video-Maker/Project/05062026-001-Phung-Hung/output/final/final_video.mp4",
  "probe_path": "/data/video-pipeline/Youtube-Video-Maker/Project/05062026-001-Phung-Hung/output/final/final_video_probe.json",
  "blackdetect_path": "/data/video-pipeline/Youtube-Video-Maker/Project/05062026-001-Phung-Hung/output/final/final_blackdetect.json",
  "package_response": {
    "status": "ok",
    "output_video_path": "/data/video-pipeline/Youtube-Video-Maker/Project/05062026-001-Phung-Hung/output/final/final_video.mp4",
    "probe": {
      "programs": [],
      "streams": [
        {
          "index": 0,
          "codec_name": "h264",
          "codec_type": "video",
          "duration": "1094.866667"
        },
        {
          "index": 1,
          "codec_name": "aac",
          "codec_type": "audio",
          "sample_rate": "24000",
          "channels": 1,
          "duration": "1093.950000"
        }
      ],
      "format": {
        "duration": "1094.867000"
      }
    },
    "ffmpeg_tail": ":17:32.11 bitrate=3300.9kbits/s dup=1 drop=0 speed=3.52x    \nframe=31637 fps=106 q=26.0 size=  424448kB time=00:17:34.46 bitrate=3297.5kbits/s dup=1 drop=0 speed=3.52x    \nframe=31683 fps=106 q=26.0 size=  424960kB time=00:17:36.00 bitrate=3296.7kbits/s dup=1 drop=0 speed=3.52x    \nframe=31700 fps=105 q=26.0 size=  424960kB time=00:17:36.59 bitrate=3294.8kbits/s dup=1 drop=0 speed=3.51x    \nframe=31714 fps=105 q=26.0 size=  425216kB time=00:17:37.02 bitrate=3295.5kbits/s dup=1 drop=0 speed=3.51x    \nframe=31730 fps=105 q=26.0 size=  425984kB time=00:17:37.62 bitrate=3299.5kbits/s dup=1 drop=0 speed=3.51x    \nframe=31745 fps=105 q=26.0 size=  426240kB time=00:17:38.09 bitrate=3300.1kbits/s dup=1 drop=0 speed= 3.5x    \nframe=31760 fps=105 q=26.0 size=  426240kB time=00:17:38.56 bitrate=3298.6kbits/s dup=1 drop=0 speed= 3.5x    \nframe=31807 fps=105 q=26.0 size=  427008kB time=00:17:40.13 bitrate=3299.6kbits/s dup=1 drop=0 speed= 3.5x    \nframe=31868 fps=105 q=26.0 size=  427520kB time=00:17:42.22 bitrate=3297.1kbits/s dup=1 drop=0 speed= 3.5x    \nframe=31935 fps=105 q=26.0 size=  429056kB time=00:17:44.40 bitrate=3302.2kbits/s dup=1 drop=0 speed= 3.5x    \nframe=32000 fps=105 q=26.0 size=  429568kB time=00:17:46.58 bitrate=3299.3kbits/s dup=1 drop=0 speed= 3.5x    \nframe=32071 fps=105 q=26.0 size=  430592kB time=00:17:48.37 bitrate=3301.7kbits/s dup=1 drop=0 speed= 3.5x    \nframe=32171 fps=105 q=26.0 size=  430848kB time=00:17:51.74 bitrate=3293.2kbits/s dup=1 drop=0 speed=3.51x    \nframe=32286 fps=105 q=26.0 size=  430848kB time=00:17:55.54 bitrate=3281.6kbits/s dup=1 drop=0 speed=3.51x    \nframe=32400 fps=106 q=26.0 size=  431104kB time=00:17:59.33 bitrate=3272.0kbits/s dup=1 drop=0 speed=3.52x    \nframe=32521 fps=106 q=26.0 size=  431104kB time=00:18:03.39 bitrate=3259.8kbits/s dup=1 drop=0 speed=3.53x    \nframe=32643 fps=106 q=26.0 size=  431360kB time=00:18:07.44 bitrate=3249.5kbits/s dup=1 drop=0 speed=3.53x    \nframe=32729 fps=106 q=26.0 size=  431360kB time=00:18:10.30 bitrate=3241.0kbits/s dup=1 drop=0 speed=3.54x    \nframe=32746 fps=106 q=26.0 size=  431360kB time=00:18:10.90 bitrate=3239.2kbits/s dup=1 drop=0 speed=3.53x    \nframe=32763 fps=106 q=26.0 size=  431360kB time=00:18:11.45 bitrate=3237.6kbits/s dup=1 drop=0 speed=3.53x    \nframe=32782 fps=106 q=26.0 size=  431360kB time=00:18:12.09 bitrate=3235.7kbits/s dup=1 drop=0 speed=3.53x    \nframe=32828 fps=106 q=26.0 size=  431360kB time=00:18:13.67 bitrate=3231.0kbits/s dup=1 drop=0 speed=3.52x    \n[mp4 @ 0x599f9a9e1a40] Starting second pass: moving the moov atom to the beginning of the file\nframe=32846 fps=106 q=-1.0 Lsize=  432472kB time=00:18:14.76 bitrate=3236.1kbits/s dup=1 drop=0 speed=3.52x    \nvideo:417389kB audio:14237kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.195857%\n[libx264 @ 0x599f9a9c3740] frame I:139   Avg QP:16.96  size:432805\n[libx264 @ 0x599f9a9c3740] frame P:9723  Avg QP:20.54  size: 33595\n[libx264 @ 0x599f9a9c3740] frame B:22984 Avg QP:24.82  size:  1767\n[libx264 @ 0x599f9a9c3740] consecutive B-frames:  4.6%  5.3%  3.3% 86.8%\n[libx264 @ 0x599f9a9c3740] mb I  I16..4:  3.3%  4.3% 92.4%\n[libx264 @ 0x599f9a9c3740] mb P  I16..4:  0.1%  1.0%  1.0%  P16..4: 46.8%  9.9%  8.4%  0.0%  0.0%    skip:32.8%\n[libx264 @ 0x599f9a9c3740] mb B  I16..4:  0.0%  0.0%  0.0%  B16..8:  9.8%  1.7%  0.2%  direct: 1.1%  skip:87.3%  L0:36.9% L1:41.5% BI:21.5%\n[libx264 @ 0x599f9a9c3740] 8x8 transform intra:29.7% inter:58.6%\n[libx264 @ 0x599f9a9c3740] coded y,uvDC,uvAC intra: 96.3% 58.8% 26.5% inter: 8.2% 4.3% 0.1%\n[libx264 @ 0x599f9a9c3740] i16 v,h,dc,p: 36%  5% 49% 11%\n[libx264 @ 0x599f9a9c3740] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 16% 13% 24%  7%  8%  7%  7%  8% 10%\n[libx264 @ 0x599f9a9c3740] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 15% 13% 12%  9% 11%  9% 10%  9% 11%\n[libx264 @ 0x599f9a9c3740] i8c dc,h,v,p: 52% 22% 21%  5%\n[libx264 @ 0x599f9a9c3740] Weighted P-Frames: Y:9.9% UV:2.3%\n[libx264 @ 0x599f9a9c3740] kb/s:3122.98\n[aac @ 0x599f9a9c6ec0] Qavg: 65513.551\n",
    "method": "explicit_ffmpeg_audio_safe",
    "sample_rate": 24000,
    "channels": 1,
    "bgm_volume": 0.2,
    "outro_included": true,
    "width": 1920,
    "height": 1080
  },
  "input_probes": {
    "intro": {
      "programs": [],
      "streams": [
        {
          "index": 0,
          "codec_name": "h264",
          "codec_type": "video",
          "duration": "16.366667"
        },
        {
          "index": 1,
          "codec_name": "aac",
          "codec_type": "audio",
          "sample_rate": "22050",
          "channels": 1,
          "duration": "16.360000"
        }
      ],
      "format": {
        "duration": "16.367000"
      }
    },
    "main": {
      "programs": [],
      "streams": [
        {
          "index": 0,
          "codec_name": "h264",
          "codec_type": "video",
          "duration": "1051.735677"
        },
        {
          "index": 1,
          "codec_name": "aac",
          "codec_type": "audio",
          "sample_rate": "22050",
          "channels": 1,
          "duration": "1050.828435"
        }
      ],
      "format": {
        "duration": "1051.783000"
      }
    },
    "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": "1094.866667"
      },
      {
        "index": 1,
        "codec_name": "aac",
        "codec_type": "audio",
        "sample_rate": "24000",
        "channels": 1,
        "duration": "1093.950000"
      }
    ],
    "format": {
      "duration": "1094.867000"
    }
  },
  "validation": {
    "final_exists": true,
    "has_audio": true,
    "has_video": true,
    "main_qa_passed": false,
    "order": [
      "intro",
      "main_story",
      "outro"
    ],
    "expected_duration_sec": 1094.8839999999998,
    "final_duration_sec": 1094.867,
    "duration_diff_sec": -0.016999999999825377,
    "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."
  ]
}