{
  "project_id": "26052026-001-Ngo-Quyen",
  "step": 18,
  "status": "completed",
  "inputs": {
    "intro_video_path": "/data/video-pipeline/Youtube-Video-Maker/Project/26052026-001-Ngo-Quyen/output/intro/intro.mp4",
    "main_video_path": "/data/video-pipeline/Youtube-Video-Maker/Project/26052026-001-Ngo-Quyen/output/main_story.mp4",
    "main_qa_report_path": "/data/video-pipeline/Youtube-Video-Maker/Project/26052026-001-Ngo-Quyen/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/26052026-001-Ngo-Quyen/output/thumbnails/thumb_16x9_final.png",
    "thumbnail_9x16_path": "/data/video-pipeline/Youtube-Video-Maker/Project/26052026-001-Ngo-Quyen/output/thumbnails/thumb_9x16_final.png"
  },
  "output_video_path": "/data/video-pipeline/Youtube-Video-Maker/Project/26052026-001-Ngo-Quyen/output/final/final_video.mp4",
  "probe_path": "/data/video-pipeline/Youtube-Video-Maker/Project/26052026-001-Ngo-Quyen/output/final/final_video_probe.json",
  "blackdetect_path": "/data/video-pipeline/Youtube-Video-Maker/Project/26052026-001-Ngo-Quyen/output/final/final_blackdetect.json",
  "package_response": {
    "status": "ok",
    "output_video_path": "/data/video-pipeline/Youtube-Video-Maker/Project/26052026-001-Ngo-Quyen/output/final/final_video.mp4",
    "probe": {
      "programs": [],
      "streams": [
        {
          "index": 0,
          "codec_name": "h264",
          "codec_type": "video",
          "duration": "740.600000"
        },
        {
          "index": 1,
          "codec_name": "aac",
          "codec_type": "audio",
          "sample_rate": "24000",
          "channels": 1,
          "duration": "740.610000"
        }
      ],
      "format": {
        "duration": "740.610000"
      }
    },
    "ffmpeg_tail": "0:11:12.30 bitrate=3506.1kbits/s dup=1 drop=0 speed=4.93x    \nframe=20252 fps=148 q=26.0 size=  288512kB time=00:11:15.03 bitrate=3501.3kbits/s dup=1 drop=0 speed=4.93x    \nframe=20328 fps=148 q=26.0 size=  289280kB time=00:11:17.51 bitrate=3497.8kbits/s dup=1 drop=0 speed=4.93x    \nframe=20393 fps=148 q=26.0 size=  290816kB time=00:11:19.68 bitrate=3505.1kbits/s dup=1 drop=0 speed=4.92x    \nframe=20473 fps=148 q=26.0 size=  291584kB time=00:11:22.33 bitrate=3500.7kbits/s dup=1 drop=0 speed=4.93x    \nframe=20546 fps=148 q=26.0 size=  292352kB time=00:11:24.76 bitrate=3497.5kbits/s dup=1 drop=0 speed=4.93x    \nframe=20616 fps=148 q=26.0 size=  293888kB time=00:11:27.11 bitrate=3503.8kbits/s dup=1 drop=0 speed=4.92x    \nframe=20689 fps=148 q=26.0 size=  295168kB time=00:11:29.54 bitrate=3506.7kbits/s dup=1 drop=0 speed=4.92x    \nframe=20761 fps=148 q=26.0 size=  295936kB time=00:11:31.93 bitrate=3503.7kbits/s dup=1 drop=0 speed=4.92x    \nframe=20842 fps=148 q=26.0 size=  297216kB time=00:11:34.66 bitrate=3505.0kbits/s dup=1 drop=0 speed=4.93x    \nframe=20921 fps=148 q=26.0 size=  298240kB time=00:11:37.26 bitrate=3503.9kbits/s dup=1 drop=0 speed=4.93x    \nframe=21002 fps=148 q=26.0 size=  299264kB time=00:11:39.99 bitrate=3502.3kbits/s dup=1 drop=0 speed=4.93x    \nframe=21082 fps=148 q=26.0 size=  300032kB time=00:11:42.68 bitrate=3497.8kbits/s dup=1 drop=0 speed=4.93x    \nframe=21159 fps=148 q=26.0 size=  301824kB time=00:11:45.20 bitrate=3506.1kbits/s dup=1 drop=0 speed=4.93x    \nframe=21226 fps=148 q=26.0 size=  303360kB time=00:11:47.46 bitrate=3512.7kbits/s dup=1 drop=0 speed=4.93x    \nframe=21295 fps=148 q=26.0 size=  304640kB time=00:11:49.72 bitrate=3516.3kbits/s dup=1 drop=0 speed=4.93x    \nframe=21378 fps=148 q=26.0 size=  305664kB time=00:11:52.54 bitrate=3514.2kbits/s dup=1 drop=0 speed=4.93x    \nframe=21478 fps=148 q=26.0 size=  306432kB time=00:11:55.86 bitrate=3506.6kbits/s dup=1 drop=0 speed=4.93x    \nframe=21623 fps=149 q=26.0 size=  306432kB time=00:12:00.68 bitrate=3483.2kbits/s dup=1 drop=0 speed=4.95x    \nframe=21754 fps=149 q=26.0 size=  306688kB time=00:12:05.04 bitrate=3465.2kbits/s dup=1 drop=0 speed=4.96x    \nframe=21893 fps=149 q=26.0 size=  306688kB time=00:12:09.69 bitrate=3443.1kbits/s dup=1 drop=0 speed=4.98x    \nframe=22033 fps=150 q=26.0 size=  306944kB time=00:12:14.38 bitrate=3423.9kbits/s dup=1 drop=0 speed=4.99x    \nframe=22157 fps=150 q=26.0 size=  306944kB time=00:12:18.48 bitrate=3404.9kbits/s dup=1 drop=0 speed=   5x    \n[mp4 @ 0x56a2b3b3ea00] Starting second pass: moving the moov atom to the beginning of the file\nframe=22218 fps=150 q=-1.0 Lsize=  307798kB time=00:12:20.61 bitrate=3404.6kbits/s dup=1 drop=0 speed=   5x    \nvideo:297281kB audio:9944kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.186489%\n[libx264 @ 0x56a2b3b567c0] frame I:93    Avg QP:16.69  size:383264\n[libx264 @ 0x56a2b3b567c0] frame P:6502  Avg QP:20.45  size: 36471\n[libx264 @ 0x56a2b3b567c0] frame B:15623 Avg QP:24.25  size:  2025\n[libx264 @ 0x56a2b3b567c0] consecutive B-frames:  4.5%  4.7%  2.0% 88.8%\n[libx264 @ 0x56a2b3b567c0] mb I  I16..4:  5.6%  8.6% 85.8%\n[libx264 @ 0x56a2b3b567c0] mb P  I16..4:  0.4%  2.4%  1.4%  P16..4: 44.8% 12.1% 10.0%  0.0%  0.0%    skip:28.9%\n[libx264 @ 0x56a2b3b567c0] mb B  I16..4:  0.0%  0.0%  0.0%  B16..8:  9.4%  1.9%  0.2%  direct: 1.5%  skip:87.0%  L0:35.2% L1:41.3% BI:23.5%\n[libx264 @ 0x56a2b3b567c0] 8x8 transform intra:45.3% inter:53.7%\n[libx264 @ 0x56a2b3b567c0] coded y,uvDC,uvAC intra: 88.1% 48.9% 13.9% inter: 8.1% 4.0% 0.0%\n[libx264 @ 0x56a2b3b567c0] i16 v,h,dc,p: 27% 12% 53%  8%\n[libx264 @ 0x56a2b3b567c0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 18% 16% 27%  6%  7%  5%  6%  6%  8%\n[libx264 @ 0x56a2b3b567c0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 15% 17% 13%  8% 10%  8% 10%  8% 10%\n[libx264 @ 0x56a2b3b567c0] i8c dc,h,v,p: 54% 23% 20%  3%\n[libx264 @ 0x56a2b3b567c0] Weighted P-Frames: Y:9.4% UV:3.2%\n[libx264 @ 0x56a2b3b567c0] kb/s:3288.31\n[aac @ 0x56a2b3c3fb80] Qavg: 65514.195\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.200000"
        },
        {
          "index": 1,
          "codec_name": "aac",
          "codec_type": "audio",
          "sample_rate": "22050",
          "channels": 1,
          "duration": "16.206984"
        }
      ],
      "format": {
        "duration": "16.208000"
      }
    },
    "main": {
      "programs": [],
      "streams": [
        {
          "index": 0,
          "codec_name": "h264",
          "codec_type": "video",
          "duration": "697.634635"
        },
        {
          "index": 1,
          "codec_name": "aac",
          "codec_type": "audio",
          "sample_rate": "22050",
          "channels": 1,
          "duration": "697.654422"
        }
      ],
      "format": {
        "duration": "697.682000"
      }
    },
    "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": "740.600000"
      },
      {
        "index": 1,
        "codec_name": "aac",
        "codec_type": "audio",
        "sample_rate": "24000",
        "channels": 1,
        "duration": "740.610000"
      }
    ],
    "format": {
      "duration": "740.610000"
    }
  },
  "validation": {
    "final_exists": true,
    "has_audio": true,
    "has_video": true,
    "main_qa_passed": true,
    "order": [
      "intro",
      "main_story",
      "outro"
    ],
    "expected_duration_sec": 740.624,
    "final_duration_sec": 740.61,
    "duration_diff_sec": -0.014000000000010004,
    "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."
  ]
}