Cách chỉnh lệch giờ phụ đề SRT và chuyển sang WebVTT: Thuật toán tịnh tiến thời gian +500ms
Mục lục nội dung
1. Hiện tượng lệch pha âm thanh – hình ảnh trong phụ đề video
Khi xem phim hoặc video bài giảng, không có gì gây khó chịu hơn việc giọng nói của nhân vật phát ra trước nhưng dòng phụ đề chữ lại xuất hiện sau 1–2 giây, hoặc ngược lại. Sự lệch pha này thường xảy ra khi tệp video và tệp phụ đề được xuất từ hai nguồn có tốc độ khung hình (frame rate) khác nhau (ví dụ: 23.976 fps so với 25.000 fps) hoặc do phần mở đầu video (intro) bị cắt xén.
Lưu ý kỹ thuật quan trọng: Công cụ điều chỉnh phụ đề này thực hiện việc tịnh tiến mốc thời gian toán học (Mathematical Timestamp Shifting) dựa trên tệp văn bản có sẵn; đây hoàn toàn không phải là nhận dạng giọng nói AI tự động (ASR – Automated Speech Recognition) hay công cụ phiên âm từ âm thanh thô.
2. Giải phẫu cấu trúc: SubRip (.SRT) vs WebVTT (.VTT)
| Đặc điểm cấu trúc | Định dạng SubRip (.SRT) | Định dạng WebVTT (.VTT) |
|---|---|---|
| Dòng tiêu đề mở đầu | Không có tiêu đề, mở đầu trực tiếp bằng số thứ tự 1. |
Bắt buộc phải mở đầu bằng dòng văn bản WEBVTT ở dòng đầu tiên. |
| Dấu phân cách mili-giây | Bắt buộc dùng dấu phẩy (,) (ví dụ: 00:00:01,000). |
Bắt buộc dùng dấu chấm (.) (ví dụ: 00:00:01.000). |
| Khả năng tương thích | Phổ biến trên VLC, Media Player Classic và các ứng dụng máy tính. | Chuẩn của W3C dành cho thẻ HTML5 <track> trên mọi trình duyệt web. |
3. Thuật toán tịnh tiến mốc thời gian (+500 ms Benchmark)
Để điều chỉnh tệp phụ đề hiển thị chậm hơn đúng nửa giây (+500 ms), thuật toán xử lý chuỗi thực hiện các bước toán học tuần tự:
- Phân tích chuỗi mốc thời gian: Tách chuỗi
HH:MM:SS,mmmthành các thành phần giờ, phút, giây và mili-giây. - Quy đổi thành tổng số mili-giây (Total Milliseconds):
t_ms = (HH * 3600 + MM * 60 + SS) * 1000 + mmm. - Cộng độ lệch thời gian:
t_ms_new = t_ms + delta_ms(ví dụ: $+500\text{ ms}$). - Quy tắc kẹp giá trị không âm (Clamping): Nếu mốc thời gian bị lùi lại một khoảng quá lớn khiến
t_ms_new < 0, giá trị bắt buộc phải được kẹp về giá trị tối thiểu là $0\text{ ms}$ (00:00:00,000). Mốc thời gian âm hoàn toàn không hợp lệ trong cả chuẩn SRT lẫn WebVTT. - Định dạng lại chuỗi chuẩn: Chia lấy dư để chuyển tổng mili-giây trở lại định dạng chuỗi 2 chữ số có số 0 ở đầu (Zero-Padded String).
4. Minh họa chuyển đổi thực tế
1
00:00:01,000 --> 00:00:04,000
Chào mừng bạn đến với GoToolstack Subtitle Studio.WEBVTT
1
00:00:01.500 --> 00:00:04.500
Chào mừng bạn đến với GoToolstack Subtitle Studio.