Bước 8 — Build master narration timeline trên worker Mục tiêu: - Gom tất cả audio scene từ bước 7. - Chèn pause/khoảng nghỉ theo workflow. - Khoảng nghỉ trước heading scene: 1.0s. - Khoảng nghỉ sau heading scene: 1.0s. - Tạo audio/master_narration.wav. - Tạo audio/master_narration_timeline.json. - Tạo logs/step8_compose_tts_manifest.json. Worker bắt buộc: - Không dùng ffmpeg local để ghép master narration. - Không compose audio-heavy trên host Erza. - Phải gọi worker endpoint: http://192.168.1.104:8005/compose-tts Input: - script/scenes.json - audio/scenes/scene_001.wav - audio/scenes/scene_002.wav - ... Output: - audio/master_narration.wav - audio/master_narration_timeline.json - logs/step8_compose_tts_manifest.json Timeline item tối thiểu: { "scene_id": "scene_001", "audio_path": "audio/scenes/scene_001.wav", "start": 0.0, "end": 8.74, "duration": 8.74 } Compose endpoint request shape: { "job_id": "_step8_master_narration", "work_dir": "/data/video-pipeline/Youtube-Video-Maker/Project/", "output_audio_path": "/data/video-pipeline/Youtube-Video-Maker/Project//audio/master_narration.wav", "tts_segments": [ { "segment_index": 1, "start": 0.0, "end": 8.74, "audio_path": "/data/video-pipeline/Youtube-Video-Maker/Project//audio/scenes/scene_001.wav", "source_text": "...", "translated_text": "", "status": "ok" } ] } Rule quan trọng: - File master_narration.wav là nguồn timing chính cho ASR/subtitle/split parts. - Nhưng khi render từng part về sau, chuẩn mới là dùng exact part_XX.wav + exact part_XX.srt, không render bằng full master audio + offset nữa. Checklist: 8. Build audio/master_narration.wav and scene timeline on worker using 192.168.1.104:8005/compose-tts from the per-scene TTS files generated in Step 7.