Bước 10 — Chạy ASR trên master narration để lấy word timestamps Mục tiêu: - Chạy ASR trên audio/master_narration.wav sau khi đã probe xong ở bước 9. - Lấy mốc thời gian ở mức từng từ cho toàn bộ narration. - Tạo dữ liệu timing đủ chi tiết để bước 11 map subtitle theo đúng nhịp đọc thực tế. Vì sao bắt buộc: - Subtitle của workflow story video không được bám theo ước lượng thủ công. - Muốn subtitle khớp lời đọc thật thì phải có word timestamps từ audio narration thật. - ASR dùng để lấy timing, không dùng để thay thế nội dung subtitle gốc. Nguyên tắc quan trọng: - Text hiển thị subtitle phải lấy từ scene.narration / narration.txt gốc. - Không dùng raw transcript ASR làm subtitle hiển thị nếu ASR nghe sai tên riêng, từ lịch sử, địa danh hoặc wording. - ASR chỉ là nguồn timing; text gốc mới là nguồn nội dung subtitle. Input: - audio/master_narration.wav - audio/master_audio_probe.json - source narration gốc từ scene/script Service: - ASR faster-whisper: http://192.168.1.103:8001 - Endpoint: /transcribe-and-save - Bắt buộc bật: word_timestamps=true Request shape: { "input_path": "/data/video-pipeline/Youtube-Video-Maker/Project//audio/master_narration.wav", "output_path": "/data/video-pipeline/Youtube-Video-Maker/Project//subtitles/master_narration_asr_words.json", "language": "vi", "task": "transcribe", "word_timestamps": true } Cách làm: 1. Gửi audio/master_narration.wav lên ASR worker bằng input_path dùng shared filesystem. 2. Chạy /transcribe-and-save với word_timestamps=true. 3. Nhận transcript + word-level timestamps trả về. 4. Lưu output ASR thành JSON chuẩn để dùng ở bước 11. 5. Kiểm tra nhanh: file output tồn tại, có segments, có words, timestamps tăng dần và không rỗng. Output bắt buộc: - subtitles/master_narration_asr_words.json - logs/step10_asr_master_manifest.json Output ASR phải chứa ít nhất: - transcript tổng - segments - word timestamps - thông tin ngôn ngữ/model nếu service trả về Điều không được làm: - Không lấy transcript ASR rồi dùng nguyên văn làm subtitle hiển thị. - Không bỏ qua word_timestamps=true. - Không chạy subtitle mapping khi ASR output chưa được kiểm tra hợp lệ. Bước này phục vụ trực tiếp: - Bước 11: tạo subtitle từ text gốc map theo timing ASR - Bước 12: clamp subtitle safe gaps và kiểm tra overlap - Bước 13: chia part sync-safe với mốc lời đọc chuẩn Checklist: 10. Run ASR on audio/master_narration.wav via 192.168.1.103:8001/transcribe-and-save with word_timestamps=true; use ASR only for timing and keep subtitle text from original narration.