Đăng ngày 07/11/2026
Làm 16 video dọc bằng code và để script kiểm tra: những gì mình đo được
Kinh nghiệm dựng 16 reel dọc bằng code HTML và Python, cắt cảnh theo nhịp nhạc, phối hợp hai agent và đo kiểm tự động trước khi xuất bản.
- Video
- Tự động hóa
- Python
- Âm thanh

Mình dựng video dọc bằng code. Câu hỏi là làm sao để khung hình khớp nhịp nhạc và video đạt chuẩn kỹ thuật? Đến ngày 07/11/2026, mình đã làm được 16 reel dọc theo hướng này. Bài này ghi lại cách dựng bằng code, quy trình hai agent, đo kiểm tự động và bài học rút ra.
Quy mô và cách dựng bằng code
16 reel dọc đều xuất ở 1080x1920, 60 khung hình mỗi giây, H.264, dài từ khoảng 31,5 giây đến 176,5 giây. Phần lớn reel giới thiệu dự án mã nguồn mở của người khác; riêng reel Irodori-Sen nói về mô hình giọng nói tiếng Việt của chính mình.
Mỗi reel là một tệp composition.html do script Python sinh ra từ template và kịch bản; các hoạt cảnh là hàm thuần của thời gian t, kết xuất thành chuỗi khung hình rồi ghép thành mp4. Khuôn "flat2d" chứa chuyển cảnh và hiệu ứng dùng lại giữa các reel. Ở reel Irodori-Sen, mình thêm chuyển cảnh lật trang ngang (page) và hiệu ứng chữ hiện theo nét bút (wipe), giữ nguyên mặc định để video cũ không đổi.
Cắt cảnh theo nhịp nhạc: nhạc được chia thành các ô nhịp theo BPM (ví dụ 121,7 BPM ở reel Irodori-Sen) và mốc mỗi cảnh đặt đúng beat. Mỗi reel có hai bản: bản có nhạc để đăng, và bản "giọng nháp" dùng giọng đọc tổng hợp chỉ để nội bộ vì trọng số theo giấy phép CC-BY-NC (không thương mại).
Quy trình hai agent viết và kiểm kịch bản
Reel Irodori-Sen chạy đủ quy trình tự động từ bước B0 đến B8, dùng hai agent: một agent viết kịch bản và một agent kiểm kịch bản. Ở lượt đầu, kết quả kiểm bị BLOCK vì hai bản kịch bản bị lẫn nhau; kịch bản viết lại bị REVISE ở vòng 1 và PASS ở vòng 2.
Mình vẫn là người chốt cuối: ví dụ quyết định độ dài 98,6 giây và những điều kiện chặn đăng như sửa README trên Hugging Face.
Kiểm tự động trên video xuất ra
Bản nhạc của reel Irodori-Sen (98,60 giây) được kiểm các hạng mục sau, kết quả thật:
| Hạng mục kiểm tra | Kết quả | Ghi chú thực tế |
|---|---|---|
| Luồng hình h264 1080x1920, 60 fps | PASS | Có luồng hình đúng chuẩn |
| Luồng âm thanh | PASS | Có luồng âm thanh |
| Khớp độ dài nhạc | PASS | 98,60 giây so với 98,60 giây |
| Mốc bắt đầu cảnh có đỉnh đổi hình đúng lúc | PASS | 9 trên 9 mốc đo được trong 11 mốc |
| Độ to gần -14 LUFS, true peak không vượt -1 dBTP | PASS | Bản nhạc: -14,88 LUFS, -2,57 dBTP |
| Đoạn đen và đứng hình | PASS | Không đoạn đen, không đứng hình quá 1,2 giây |
| Dò cú cắt để đo | WARN | Không dò được cú cắt nào để đo |
Bản giọng nháp chỉ WARN (-15,97 LUFS, -2,90 dBTP). Dòng kết của báo cáo: "ĐẠT toàn bộ hạng mục tự động. Vẫn phải xem ảnh duyệt hình bằng mắt trước khi giao."
Một lần sửa theo số đo
Ở chuyển cảnh lật trang của reel Irodori-Sen, việc đo giúp sửa lỗi lệch nhịp qua từng bước:
- Lần đầu dùng ease-in-out khiến đỉnh thay đổi hình lệch khoảng 190 ms so với mốc beat; audit báo FAIL 4/9 mốc.
- Đổi sang ease-in thì còn một mốc lệch 114 ms (6/7, dưới ngưỡng 90%).
- Thêm độ trễ
pageDelay0,05 giây (trang hạ cánh muộn 3 khung sau mốc cảnh) thì audit đạt 9/9.
Các lỗi và bài học
Trong ghi chú sản xuất của mình, có một số bài học thực tế:
- Công cụ nhận dạng giọng nói (Whisper) nghe sai tên riêng và số, ví dụ "Irodori" thành "Irojori", "README" thành "Readme", số "hai trăm ba mươi hai nghìn" thành 230.000. Mình kết luận đây là lỗi nhận dạng chứ chưa chắc do giọng đọc, nên vẫn phải nghe lại bằng tai.
- Một bản nhạc nền lấy từ Pixabay dính Content ID trên YouTube (ghi chú ngày 02/11/2026), nên reel Handy được làm hoàn toàn không nhạc, chỉ có hiệu ứng âm thanh tổng hợp bằng mã.
- Ở một reel khác, mình ghi rõ bộ cổng kiểm có sáu cổng G0 đến G5, trong đó chỉ bốn cổng (G0, G2, G3, G5) có script; và nguyên văn: "Cổng đạt chỉ là mức sàn."
- Mình vẫn còn các mục "Chưa kiểm": xem trên điện thoại thật, nghe bản giọng nháp bằng tai.
Hạn chế cần nói rõ
Nếu bạn cũng đang dựng video bằng code hoặc có cách kiểm tự động trước khi xuất bản, mình rất muốn nghe chia sẻ từ bạn.