{
  "project_id": "05062026-003-Hai-Ba-Trung",
  "step": 15,
  "status": "completed",
  "endpoint": "http://192.168.1.104:8016/concat-mp4",
  "concat_response": {
    "status": "ok",
    "output_path": "/data/video-pipeline/Youtube-Video-Maker/Project/05062026-003-Hai-Ba-Trung/output/main_story.mp4",
    "size": 348815181,
    "inputs": 6,
    "reencode": false
  },
  "input_parts": [
    {
      "part_id": "part_01",
      "path": "/data/video-pipeline/Youtube-Video-Maker/Project/05062026-003-Hai-Ba-Trung/render_parts/part_01.mp4",
      "target_duration_sec": 175.822,
      "validated_duration_sec": 176.8
    },
    {
      "part_id": "part_02",
      "path": "/data/video-pipeline/Youtube-Video-Maker/Project/05062026-003-Hai-Ba-Trung/render_parts/part_02.mp4",
      "target_duration_sec": 91.869,
      "validated_duration_sec": 92.834
    },
    {
      "part_id": "part_03",
      "path": "/data/video-pipeline/Youtube-Video-Maker/Project/05062026-003-Hai-Ba-Trung/render_parts/part_03.mp4",
      "target_duration_sec": 171.787,
      "validated_duration_sec": 172.767
    },
    {
      "part_id": "part_04",
      "path": "/data/video-pipeline/Youtube-Video-Maker/Project/05062026-003-Hai-Ba-Trung/render_parts/part_04.mp4",
      "target_duration_sec": 155.259,
      "validated_duration_sec": 156.234
    },
    {
      "part_id": "part_05",
      "path": "/data/video-pipeline/Youtube-Video-Maker/Project/05062026-003-Hai-Ba-Trung/render_parts/part_05.mp4",
      "target_duration_sec": 146.202,
      "validated_duration_sec": 147.167
    },
    {
      "part_id": "part_06",
      "path": "/data/video-pipeline/Youtube-Video-Maker/Project/05062026-003-Hai-Ba-Trung/render_parts/part_06.mp4",
      "target_duration_sec": 123.897,
      "validated_duration_sec": 124.834
    }
  ],
  "output_path": "/data/video-pipeline/Youtube-Video-Maker/Project/05062026-003-Hai-Ba-Trung/output/main_story.mp4",
  "probe_path": "/data/video-pipeline/Youtube-Video-Maker/Project/05062026-003-Hai-Ba-Trung/output/main_story_probe.json",
  "duration_tolerance_sec": 0.5,
  "validation": {
    "output_exists": true,
    "has_audio": true,
    "has_video": true,
    "parts_count": 6,
    "duration_diff_vs_validated_parts_sec": 0.046,
    "duration_diff_vs_target_ranges_sec": 5.846,
    "valid": true
  }
}