{
  "project_id": "28052026-001-Tay-Son-That-Ho-Tuong",
  "step": 18,
  "status": "completed",
  "inputs": {
    "intro_video_path": "/data/video-pipeline/Youtube-Video-Maker/Project/28052026-001-Tay-Son-That-Ho-Tuong/output/intro/intro.mp4",
    "main_video_path": "/data/video-pipeline/Youtube-Video-Maker/Project/28052026-001-Tay-Son-That-Ho-Tuong/output/main_story.mp4",
    "main_qa_report_path": "/data/video-pipeline/Youtube-Video-Maker/Project/28052026-001-Tay-Son-That-Ho-Tuong/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/28052026-001-Tay-Son-That-Ho-Tuong/output/thumbnails/thumb_16x9_final.png",
    "thumbnail_9x16_path": "/data/video-pipeline/Youtube-Video-Maker/Project/28052026-001-Tay-Son-That-Ho-Tuong/output/thumbnails/thumb_9x16_final.png"
  },
  "output_video_path": "/data/video-pipeline/Youtube-Video-Maker/Project/28052026-001-Tay-Son-That-Ho-Tuong/output/final/final_video.mp4",
  "probe_path": "/data/video-pipeline/Youtube-Video-Maker/Project/28052026-001-Tay-Son-That-Ho-Tuong/output/final/final_video_probe.json",
  "blackdetect_path": "/data/video-pipeline/Youtube-Video-Maker/Project/28052026-001-Tay-Son-That-Ho-Tuong/output/final/final_blackdetect.json",
  "package_response": {
    "status": "ok",
    "output_video_path": "/data/video-pipeline/Youtube-Video-Maker/Project/28052026-001-Tay-Son-That-Ho-Tuong/output/final/final_video.mp4",
    "probe": {
      "programs": [],
      "streams": [
        {
          "index": 0,
          "codec_name": "h264",
          "codec_type": "video",
          "duration": "1107.300000"
        },
        {
          "index": 1,
          "codec_name": "aac",
          "codec_type": "audio",
          "sample_rate": "24000",
          "channels": 1,
          "duration": "1107.302000"
        }
      ],
      "format": {
        "duration": "1107.302000"
      }
    },
    "ffmpeg_tail": ":17:15.08 bitrate=2791.9kbits/s dup=1 drop=0 speed=5.42x    \nframe=31135 fps=162 q=26.0 size=  353536kB time=00:17:17.77 bitrate=2790.8kbits/s dup=1 drop=0 speed=5.42x    \nframe=31214 fps=162 q=26.0 size=  354560kB time=00:17:20.37 bitrate=2791.8kbits/s dup=1 drop=0 speed=5.42x    \nframe=31281 fps=162 q=26.0 size=  356096kB time=00:17:22.59 bitrate=2798.0kbits/s dup=1 drop=0 speed=5.41x    \nframe=31357 fps=162 q=26.0 size=  356864kB time=00:17:25.15 bitrate=2797.1kbits/s dup=1 drop=0 speed=5.41x    \nframe=31437 fps=162 q=26.0 size=  357632kB time=00:17:27.79 bitrate=2796.1kbits/s dup=1 drop=0 speed=5.41x    \nframe=31556 fps=163 q=26.0 size=  358656kB time=00:17:31.76 bitrate=2793.5kbits/s dup=1 drop=0 speed=5.42x    \nframe=31653 fps=163 q=26.0 size=  359424kB time=00:17:35.05 bitrate=2790.8kbits/s dup=1 drop=0 speed=5.42x    \nframe=31730 fps=163 q=26.0 size=  360192kB time=00:17:37.56 bitrate=2790.1kbits/s dup=1 drop=0 speed=5.42x    \nframe=31793 fps=162 q=26.0 size=  361984kB time=00:17:39.66 bitrate=2798.4kbits/s dup=1 drop=0 speed=5.42x    \nframe=31861 fps=162 q=26.0 size=  362752kB time=00:17:41.96 bitrate=2798.3kbits/s dup=1 drop=0 speed=5.41x    \nframe=31936 fps=162 q=26.0 size=  364032kB time=00:17:44.43 bitrate=2801.6kbits/s dup=1 drop=0 speed=5.41x    \nframe=32006 fps=162 q=26.0 size=  365056kB time=00:17:46.78 bitrate=2803.3kbits/s dup=1 drop=0 speed=5.41x    \nframe=32086 fps=162 q=26.0 size=  366336kB time=00:17:49.47 bitrate=2806.1kbits/s dup=1 drop=0 speed=5.41x    \nframe=32162 fps=162 q=26.0 size=  367104kB time=00:17:51.99 bitrate=2805.4kbits/s dup=1 drop=0 speed=5.41x    \nframe=32256 fps=162 q=26.0 size=  368128kB time=00:17:55.14 bitrate=2804.9kbits/s dup=1 drop=0 speed=5.41x    \nframe=32399 fps=163 q=26.0 size=  368128kB time=00:17:59.88 bitrate=2792.6kbits/s dup=1 drop=0 speed=5.42x    \nframe=32451 fps=163 q=26.0 size=  368384kB time=00:18:01.63 bitrate=2790.0kbits/s dup=1 drop=0 speed=5.42x    \nframe=32592 fps=163 q=26.0 size=  368384kB time=00:18:06.32 bitrate=2778.0kbits/s dup=1 drop=0 speed=5.43x    \nframe=32718 fps=163 q=26.0 size=  368640kB time=00:18:10.50 bitrate=2769.3kbits/s dup=1 drop=0 speed=5.43x    \nframe=32861 fps=163 q=26.0 size=  368640kB time=00:18:15.32 bitrate=2757.1kbits/s dup=1 drop=0 speed=5.44x    \nframe=33000 fps=164 q=26.0 size=  368896kB time=00:18:19.93 bitrate=2747.4kbits/s dup=1 drop=0 speed=5.45x    \nframe=33141 fps=164 q=26.0 size=  368896kB time=00:18:24.63 bitrate=2735.8kbits/s dup=1 drop=0 speed=5.46x    \n[mp4 @ 0x59be05e72940] Starting second pass: moving the moov atom to the beginning of the file\nframe=33219 fps=164 q=-1.0 Lsize=  370093kB time=00:18:27.31 bitrate=2738.0kbits/s dup=1 drop=0 speed=5.46x    \nvideo:354349kB audio:14885kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.232560%\n[libx264 @ 0x59be0600c300] frame I:138   Avg QP:16.76  size:457003\n[libx264 @ 0x59be0600c300] frame P:9477  Avg QP:20.22  size: 28052\n[libx264 @ 0x59be0600c300] frame B:23604 Avg QP:24.22  size:  1438\n[libx264 @ 0x59be0600c300] consecutive B-frames:  3.1%  5.6%  2.4% 88.9%\n[libx264 @ 0x59be0600c300] mb I  I16..4:  3.4%  3.6% 93.0%\n[libx264 @ 0x59be0600c300] mb P  I16..4:  0.1%  0.8%  0.7%  P16..4: 41.0%  9.3%  8.3%  0.0%  0.0%    skip:39.9%\n[libx264 @ 0x59be0600c300] mb B  I16..4:  0.0%  0.0%  0.0%  B16..8:  7.4%  1.4%  0.1%  direct: 0.9%  skip:90.2%  L0:35.5% L1:42.5% BI:22.0%\n[libx264 @ 0x59be0600c300] 8x8 transform intra:28.3% inter:54.6%\n[libx264 @ 0x59be0600c300] coded y,uvDC,uvAC intra: 94.3% 64.6% 32.7% inter: 6.5% 3.6% 0.1%\n[libx264 @ 0x59be0600c300] i16 v,h,dc,p: 40%  8% 44%  8%\n[libx264 @ 0x59be0600c300] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 17% 15% 24%  7%  8%  6%  7%  7% 10%\n[libx264 @ 0x59be0600c300] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 14% 14% 12%  9% 11%  9% 10%  9% 11%\n[libx264 @ 0x59be0600c300] i8c dc,h,v,p: 51% 23% 20%  6%\n[libx264 @ 0x59be0600c300] Weighted P-Frames: Y:6.1% UV:1.9%\n[libx264 @ 0x59be0600c300] kb/s:2621.53\n[aac @ 0x59be0600ebc0] Qavg: 65510.980\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.866667"
        },
        {
          "index": 1,
          "codec_name": "aac",
          "codec_type": "audio",
          "sample_rate": "22050",
          "channels": 1,
          "duration": "16.860000"
        }
      ],
      "format": {
        "duration": "16.867000"
      }
    },
    "main": {
      "programs": [],
      "streams": [
        {
          "index": 0,
          "codec_name": "h264",
          "codec_type": "video",
          "duration": "1063.668685"
        },
        {
          "index": 1,
          "codec_name": "aac",
          "codec_type": "audio",
          "sample_rate": "22050",
          "channels": 1,
          "duration": "1063.688435"
        }
      ],
      "format": {
        "duration": "1063.716000"
      }
    },
    "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": "1107.300000"
      },
      {
        "index": 1,
        "codec_name": "aac",
        "codec_type": "audio",
        "sample_rate": "24000",
        "channels": 1,
        "duration": "1107.302000"
      }
    ],
    "format": {
      "duration": "1107.302000"
    }
  },
  "validation": {
    "final_exists": true,
    "has_audio": true,
    "has_video": true,
    "main_qa_passed": true,
    "order": [
      "intro",
      "main_story",
      "outro"
    ],
    "expected_duration_sec": 1107.3169999999998,
    "final_duration_sec": 1107.302,
    "duration_diff_sec": -0.01499999999987267,
    "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."
  ]
}