{
  "project_id": "01062026-005-Ly-Nam-De",
  "step": 18,
  "status": "completed",
  "inputs": {
    "intro_video_path": "/data/video-pipeline/Youtube-Video-Maker/Project/01062026-005-Ly-Nam-De/output/intro/intro.mp4",
    "main_video_path": "/data/video-pipeline/Youtube-Video-Maker/Project/01062026-005-Ly-Nam-De/output/main_story.mp4",
    "main_qa_report_path": "/data/video-pipeline/Youtube-Video-Maker/Project/01062026-005-Ly-Nam-De/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-005-Ly-Nam-De/output/thumbnails/thumb_16x9_final.png",
    "thumbnail_9x16_path": "/data/video-pipeline/Youtube-Video-Maker/Project/01062026-005-Ly-Nam-De/output/thumbnails/thumb_9x16_final.png"
  },
  "output_video_path": "/data/video-pipeline/Youtube-Video-Maker/Project/01062026-005-Ly-Nam-De/output/final/final_video.mp4",
  "probe_path": "/data/video-pipeline/Youtube-Video-Maker/Project/01062026-005-Ly-Nam-De/output/final/final_video_probe.json",
  "blackdetect_path": "/data/video-pipeline/Youtube-Video-Maker/Project/01062026-005-Ly-Nam-De/output/final/final_blackdetect.json",
  "package_response": {
    "status": "ok",
    "output_video_path": "/data/video-pipeline/Youtube-Video-Maker/Project/01062026-005-Ly-Nam-De/output/final/final_video.mp4",
    "probe": {
      "programs": [],
      "streams": [
        {
          "index": 0,
          "codec_name": "h264",
          "codec_type": "video",
          "duration": "942.500000"
        },
        {
          "index": 1,
          "codec_name": "aac",
          "codec_type": "audio",
          "sample_rate": "24000",
          "channels": 1,
          "duration": "941.535000"
        }
      ],
      "format": {
        "duration": "942.500000"
      }
    },
    "ffmpeg_tail": ":15:23.60 bitrate=3405.9kbits/s dup=1 drop=0 speed=2.88x    \nframe=27821 fps= 87 q=26.0 size=  384256kB time=00:15:26.67 bitrate=3396.9kbits/s dup=1 drop=0 speed=2.89x    \nframe=27841 fps= 87 q=26.0 size=  384256kB time=00:15:27.36 bitrate=3394.4kbits/s dup=1 drop=0 speed=2.88x    \nframe=27854 fps= 86 q=26.0 size=  384256kB time=00:15:27.78 bitrate=3392.8kbits/s dup=1 drop=0 speed=2.88x    \nframe=27867 fps= 86 q=26.0 size=  384256kB time=00:15:28.21 bitrate=3391.3kbits/s dup=1 drop=0 speed=2.88x    \nframe=27881 fps= 86 q=26.0 size=  384256kB time=00:15:28.68 bitrate=3389.6kbits/s dup=1 drop=0 speed=2.87x    \nframe=27895 fps= 86 q=26.0 size=  384256kB time=00:15:29.15 bitrate=3387.8kbits/s dup=1 drop=0 speed=2.87x    \nframe=27909 fps= 86 q=26.0 size=  384256kB time=00:15:29.62 bitrate=3386.1kbits/s dup=1 drop=0 speed=2.87x    \nframe=27921 fps= 86 q=26.0 size=  384256kB time=00:15:30.00 bitrate=3384.7kbits/s dup=1 drop=0 speed=2.86x    \nframe=27935 fps= 86 q=26.0 size=  384256kB time=00:15:30.47 bitrate=3383.0kbits/s dup=1 drop=0 speed=2.86x    \nframe=27948 fps= 86 q=26.0 size=  384256kB time=00:15:30.90 bitrate=3381.5kbits/s dup=1 drop=0 speed=2.86x    \nframe=27973 fps= 86 q=26.0 size=  384256kB time=00:15:31.75 bitrate=3378.4kbits/s dup=1 drop=0 speed=2.86x    \nframe=28064 fps= 86 q=26.0 size=  384512kB time=00:15:34.78 bitrate=3369.7kbits/s dup=1 drop=0 speed=2.86x    \nframe=28158 fps= 86 q=26.0 size=  384512kB time=00:15:37.89 bitrate=3358.5kbits/s dup=1 drop=0 speed=2.87x    \nframe=28172 fps= 86 q=26.0 size=  384512kB time=00:15:38.36 bitrate=3356.8kbits/s dup=1 drop=0 speed=2.86x    \nframe=28186 fps= 86 q=26.0 size=  384512kB time=00:15:38.83 bitrate=3355.1kbits/s dup=1 drop=0 speed=2.86x    \nframe=28199 fps= 86 q=26.0 size=  384512kB time=00:15:39.26 bitrate=3353.6kbits/s dup=1 drop=0 speed=2.86x    \nframe=28211 fps= 86 q=26.0 size=  384512kB time=00:15:39.69 bitrate=3352.1kbits/s dup=1 drop=0 speed=2.85x    \nframe=28225 fps= 86 q=26.0 size=  384512kB time=00:15:40.16 bitrate=3350.4kbits/s dup=1 drop=0 speed=2.85x    \nframe=28237 fps= 85 q=26.0 size=  384512kB time=00:15:40.54 bitrate=3349.0kbits/s dup=1 drop=0 speed=2.85x    \nframe=28248 fps= 85 q=26.0 size=  384512kB time=00:15:40.92 bitrate=3347.7kbits/s dup=1 drop=0 speed=2.84x    \nframe=28260 fps= 85 q=26.0 size=  384512kB time=00:15:41.31 bitrate=3346.3kbits/s dup=1 drop=0 speed=2.84x    \nframe=28274 fps= 85 q=26.0 size=  384512kB time=00:15:41.44 bitrate=3345.9kbits/s dup=1 drop=0 speed=2.84x    \n[mp4 @ 0x6175ff83d700] Starting second pass: moving the moov atom to the beginning of the file\nframe=28275 fps= 84 q=-1.0 Lsize=  385490kB time=00:15:42.40 bitrate=3350.9kbits/s dup=1 drop=0 speed=2.81x    \nvideo:372419kB audio:12342kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.189399%\n[libx264 @ 0x6175ff834240] frame I:118   Avg QP:16.85  size:414518\n[libx264 @ 0x6175ff834240] frame P:8175  Avg QP:20.54  size: 35852\n[libx264 @ 0x6175ff834240] frame B:19982 Avg QP:24.92  size:  1969\n[libx264 @ 0x6175ff834240] consecutive B-frames:  4.1%  4.1%  2.5% 89.3%\n[libx264 @ 0x6175ff834240] mb I  I16..4:  3.9%  4.8% 91.3%\n[libx264 @ 0x6175ff834240] mb P  I16..4:  0.1%  1.4%  1.4%  P16..4: 47.9% 11.1%  9.1%  0.0%  0.0%    skip:28.9%\n[libx264 @ 0x6175ff834240] mb B  I16..4:  0.0%  0.0%  0.0%  B16..8: 10.4%  1.9%  0.2%  direct: 1.3%  skip:86.3%  L0:37.0% L1:41.4% BI:21.6%\n[libx264 @ 0x6175ff834240] 8x8 transform intra:34.1% inter:58.5%\n[libx264 @ 0x6175ff834240] coded y,uvDC,uvAC intra: 95.8% 56.1% 22.5% inter: 8.4% 4.4% 0.1%\n[libx264 @ 0x6175ff834240] i16 v,h,dc,p: 32%  6% 51% 11%\n[libx264 @ 0x6175ff834240] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 16% 13% 24%  7%  8%  7%  7%  7% 10%\n[libx264 @ 0x6175ff834240] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 15% 14% 12%  9% 11%  9% 10%  9% 10%\n[libx264 @ 0x6175ff834240] i8c dc,h,v,p: 52% 23% 21%  4%\n[libx264 @ 0x6175ff834240] Weighted P-Frames: Y:8.1% UV:2.8%\n[libx264 @ 0x6175ff834240] kb/s:3236.98\n[aac @ 0x6175ff82f6c0] Qavg: 65515.172\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.300000"
        },
        {
          "index": 1,
          "codec_name": "aac",
          "codec_type": "audio",
          "sample_rate": "22050",
          "channels": 1,
          "duration": "16.300000"
        }
      ],
      "format": {
        "duration": "16.301000"
      }
    },
    "main": {
      "programs": [],
      "streams": [
        {
          "index": 0,
          "codec_name": "h264",
          "codec_type": "video",
          "duration": "899.433984"
        },
        {
          "index": 1,
          "codec_name": "aac",
          "codec_type": "audio",
          "sample_rate": "22050",
          "channels": 1,
          "duration": "898.523447"
        }
      ],
      "format": {
        "duration": "899.481000"
      }
    },
    "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": "942.500000"
      },
      {
        "index": 1,
        "codec_name": "aac",
        "codec_type": "audio",
        "sample_rate": "24000",
        "channels": 1,
        "duration": "941.535000"
      }
    ],
    "format": {
      "duration": "942.500000"
    }
  },
  "validation": {
    "final_exists": true,
    "has_audio": true,
    "has_video": true,
    "main_qa_passed": true,
    "order": [
      "intro",
      "main_story",
      "outro"
    ],
    "expected_duration_sec": 942.5160000000001,
    "final_duration_sec": 942.5,
    "duration_diff_sec": -0.016000000000076398,
    "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."
  ]
}