{
  "project_id": "31052026-001-Nguyen-Hue-Quang-Trung",
  "step": 18,
  "status": "completed",
  "inputs": {
    "intro_video_path": "/data/video-pipeline/Youtube-Video-Maker/Project/31052026-001-Nguyen-Hue-Quang-Trung/output/intro/intro.mp4",
    "main_video_path": "/data/video-pipeline/Youtube-Video-Maker/Project/31052026-001-Nguyen-Hue-Quang-Trung/output/main_story.mp4",
    "main_qa_report_path": "/data/video-pipeline/Youtube-Video-Maker/Project/31052026-001-Nguyen-Hue-Quang-Trung/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/31052026-001-Nguyen-Hue-Quang-Trung/output/thumbnails/thumb_16x9_final.png",
    "thumbnail_9x16_path": "/data/video-pipeline/Youtube-Video-Maker/Project/31052026-001-Nguyen-Hue-Quang-Trung/output/thumbnails/thumb_9x16_final.png"
  },
  "output_video_path": "/data/video-pipeline/Youtube-Video-Maker/Project/31052026-001-Nguyen-Hue-Quang-Trung/output/final/final_video.mp4",
  "probe_path": "/data/video-pipeline/Youtube-Video-Maker/Project/31052026-001-Nguyen-Hue-Quang-Trung/output/final/final_video_probe.json",
  "blackdetect_path": "/data/video-pipeline/Youtube-Video-Maker/Project/31052026-001-Nguyen-Hue-Quang-Trung/output/final/final_blackdetect.json",
  "package_response": {
    "status": "ok",
    "output_video_path": "/data/video-pipeline/Youtube-Video-Maker/Project/31052026-001-Nguyen-Hue-Quang-Trung/output/final/final_video.mp4",
    "probe": {
      "programs": [],
      "streams": [
        {
          "index": 0,
          "codec_name": "h264",
          "codec_type": "video",
          "duration": "1408.733333"
        },
        {
          "index": 1,
          "codec_name": "aac",
          "codec_type": "audio",
          "sample_rate": "24000",
          "channels": 1,
          "duration": "1407.802000"
        }
      ],
      "format": {
        "duration": "1408.734000"
      }
    },
    "ffmpeg_tail": ":22:53.82 bitrate=3280.5kbits/s dup=1 drop=0 speed= 4.5x    \nframe=41276 fps=135 q=26.0 size=  551168kB time=00:22:55.78 bitrate=3281.9kbits/s dup=1 drop=0 speed= 4.5x    \nframe=41338 fps=135 q=26.0 size=  552448kB time=00:22:57.83 bitrate=3284.6kbits/s dup=1 drop=0 speed=4.49x    \nframe=41414 fps=135 q=26.0 size=  553728kB time=00:23:00.39 bitrate=3286.1kbits/s dup=1 drop=0 speed= 4.5x    \nframe=41486 fps=135 q=26.0 size=  554240kB time=00:23:02.23 bitrate=3284.8kbits/s dup=1 drop=0 speed=4.49x    \nframe=41613 fps=135 q=26.0 size=  554496kB time=00:23:06.45 bitrate=3276.3kbits/s dup=1 drop=0 speed= 4.5x    \nframe=41740 fps=135 q=26.0 size=  554752kB time=00:23:10.68 bitrate=3267.8kbits/s dup=1 drop=0 speed=4.51x    \nframe=41781 fps=135 q=26.0 size=  554752kB time=00:23:12.04 bitrate=3264.6kbits/s dup=1 drop=0 speed= 4.5x    \nframe=41798 fps=135 q=26.0 size=  554752kB time=00:23:12.60 bitrate=3263.3kbits/s dup=1 drop=0 speed= 4.5x    \nframe=41816 fps=135 q=26.0 size=  554752kB time=00:23:13.19 bitrate=3261.9kbits/s dup=1 drop=0 speed=4.49x    \nframe=41832 fps=135 q=26.0 size=  554752kB time=00:23:13.75 bitrate=3260.6kbits/s dup=1 drop=0 speed=4.49x    \nframe=41849 fps=135 q=26.0 size=  554752kB time=00:23:14.30 bitrate=3259.3kbits/s dup=1 drop=0 speed=4.48x    \nframe=41866 fps=134 q=26.0 size=  554752kB time=00:23:14.86 bitrate=3258.0kbits/s dup=1 drop=0 speed=4.48x    \nframe=41883 fps=134 q=26.0 size=  554752kB time=00:23:15.45 bitrate=3256.7kbits/s dup=1 drop=0 speed=4.47x    \nframe=41900 fps=134 q=26.0 size=  554752kB time=00:23:16.01 bitrate=3255.4kbits/s dup=1 drop=0 speed=4.47x    \nframe=41917 fps=134 q=26.0 size=  554752kB time=00:23:16.56 bitrate=3254.1kbits/s dup=1 drop=0 speed=4.46x    \nframe=41933 fps=134 q=26.0 size=  554752kB time=00:23:17.12 bitrate=3252.8kbits/s dup=1 drop=0 speed=4.45x    \nframe=42033 fps=134 q=26.0 size=  555008kB time=00:23:20.45 bitrate=3246.5kbits/s dup=1 drop=0 speed=4.46x    \nframe=42143 fps=134 q=26.0 size=  555008kB time=00:23:24.12 bitrate=3238.1kbits/s dup=1 drop=0 speed=4.46x    \nframe=42177 fps=134 q=26.0 size=  555008kB time=00:23:25.22 bitrate=3235.5kbits/s dup=1 drop=0 speed=4.46x    \nframe=42193 fps=134 q=26.0 size=  555008kB time=00:23:25.78 bitrate=3234.2kbits/s dup=1 drop=0 speed=4.45x    \nframe=42209 fps=133 q=26.0 size=  555008kB time=00:23:26.29 bitrate=3233.0kbits/s dup=1 drop=0 speed=4.45x    \nframe=42225 fps=133 q=26.0 size=  555008kB time=00:23:26.85 bitrate=3231.8kbits/s dup=1 drop=0 speed=4.44x    \n[mp4 @ 0x60217d95d300] Starting second pass: moving the moov atom to the beginning of the file\nframe=42262 fps=133 q=-1.0 Lsize=  556407kB time=00:23:28.63 bitrate=3235.8kbits/s dup=1 drop=0 speed=4.44x    \nvideo:537251kB audio:18070kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.195425%\n[libx264 @ 0x60217d837000] frame I:177   Avg QP:17.05  size:430594\n[libx264 @ 0x60217d837000] frame P:12325 Avg QP:20.67  size: 33893\n[libx264 @ 0x60217d837000] frame B:29760 Avg QP:24.96  size:  1888\n[libx264 @ 0x60217d837000] consecutive B-frames:  4.3%  4.5%  3.0% 88.2%\n[libx264 @ 0x60217d837000] mb I  I16..4:  2.6%  4.0% 93.4%\n[libx264 @ 0x60217d837000] mb P  I16..4:  0.1%  1.0%  1.0%  P16..4: 47.5% 10.5%  8.7%  0.0%  0.0%    skip:31.2%\n[libx264 @ 0x60217d837000] mb B  I16..4:  0.0%  0.0%  0.0%  B16..8: 10.3%  1.8%  0.2%  direct: 1.1%  skip:86.6%  L0:37.0% L1:41.2% BI:21.8%\n[libx264 @ 0x60217d837000] 8x8 transform intra:31.2% inter:57.8%\n[libx264 @ 0x60217d837000] coded y,uvDC,uvAC intra: 96.3% 61.2% 27.1% inter: 8.2% 4.5% 0.2%\n[libx264 @ 0x60217d837000] i16 v,h,dc,p: 32%  6% 50% 12%\n[libx264 @ 0x60217d837000] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 16% 14% 23%  7%  8%  6%  8%  8% 10%\n[libx264 @ 0x60217d837000] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 14% 15% 12%  9% 11%  9% 10%  9% 11%\n[libx264 @ 0x60217d837000] i8c dc,h,v,p: 51% 24% 20%  5%\n[libx264 @ 0x60217d837000] Weighted P-Frames: Y:9.2% UV:3.0%\n[libx264 @ 0x60217d837000] kb/s:3124.19\n[aac @ 0x60217d942b00] 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": "16.266667"
        },
        {
          "index": 1,
          "codec_name": "aac",
          "codec_type": "audio",
          "sample_rate": "22050",
          "channels": 1,
          "duration": "16.270023"
        }
      ],
      "format": {
        "duration": "16.271000"
      }
    },
    "main": {
      "programs": [],
      "streams": [
        {
          "index": 0,
          "codec_name": "h264",
          "codec_type": "video",
          "duration": "1365.703320"
        },
        {
          "index": 1,
          "codec_name": "aac",
          "codec_type": "audio",
          "sample_rate": "22050",
          "channels": 1,
          "duration": "1364.776463"
        }
      ],
      "format": {
        "duration": "1365.750000"
      }
    },
    "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": "1408.733333"
      },
      {
        "index": 1,
        "codec_name": "aac",
        "codec_type": "audio",
        "sample_rate": "24000",
        "channels": 1,
        "duration": "1407.802000"
      }
    ],
    "format": {
      "duration": "1408.734000"
    }
  },
  "validation": {
    "final_exists": true,
    "has_audio": true,
    "has_video": true,
    "main_qa_passed": true,
    "order": [
      "intro",
      "main_story",
      "outro"
    ],
    "expected_duration_sec": 1408.7549999999999,
    "final_duration_sec": 1408.734,
    "duration_diff_sec": -0.020999999999958163,
    "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."
  ]
}