Sửa phụ đề lệch đồng bộ: lệch cố định và sai số frame rate
← Blog
🎬 Phụ đề & Caption7 phút đọc

Sửa phụ đề lệch đồng bộ: lệch cố định và sai số frame rate

💡 Nếu mọi phụ đề đều lệch cùng một lượng, hãy dùng Adjust all times trong Subtitle Edit để sửa trong chưa đầy một phút. Nếu sai số tăng dần khi phim chạy, đó là không khớp frame rate: dùng Change frame rate với hệ số đúng. Ví dụ, 1.04271 kéo giãn timestamp từ 23.976 fps sang 25 fps, và 0.95904 nén lại.

Ý chính

  • Chẩn đoán trước: kiểm tra độ lệch ở 10% và 90% thời lượng file. Lệch bằng nhau = lệch cố định. Lệch tăng dần = sai số frame rate. Mỗi trường hợp cần cách sửa khác nhau.
  • Lệch cố định: Subtitle Edit Synchronization > Adjust all times; ms dương hoãn tất cả phụ đề, ms âm đẩy sớm.
  • Sai số frame rate: Subtitle Edit Synchronization > Change frame rate. 23.976 sang 25 fps: nhân với 1.04271. 25 sang 23.976 fps: nhân với 0.95904.
  • ffmpeg soft track: -itsoffset [giây] trước subtitle input sẽ trễ track khi mux. Chỉ dùng giá trị dương. Để đẩy sớm, sửa trong Subtitle Edit trước.
  • Hai điểm neo: drift không đều thì dùng Subtitle Edit Synchronization > Visual sync với hai điểm tham chiếu để áp cả scale lẫn offset cùng lúc.

Làm thế nào để biết đây là lệch cố định hay sai số frame rate?

Tôi luôn kiểm tra hai điểm tham chiếu trước khi chọn cách sửa. Tìm một dòng phụ đề gần đầu và một dòng gần cuối file, rồi so sánh độ lệch ở cả hai.

Nếu độ lệch ở cả hai điểm xấp xỉ bằng nhau, mọi phụ đề đều lệch một lượng cố định. Đây là lệch cố định và cách sửa rất nhanh. Nếu độ lệch ở cuối file lớn hơn đáng kể so với đầu file, phụ đề đã được căn giờ theo frame rate khác và sai số tích lũy theo thời gian. Áp một offset cố định cho file bị drift chỉ sửa được giữa video, hai đầu vẫn lệch.

Trong thực tế: nhảy đến khoảng phút thứ 5 và ghi độ lệch, rồi nhảy đến khoảng phút 45 và ghi lại. Lệch bằng nhau: dùng Adjust all times. Một là 2 giây còn cái kia là 12 giây: dùng Change frame rate.

Sửa lệch cố định bằng Subtitle Edit và tùy chọn batch SeConv

Mở file trong Subtitle Edit, vào Synchronization > Adjust all times và nhập offset bằng millisecond:

  • Phụ đề xuất hiện quá sớm (trước lời thoại): nhập giá trị dương để hoãn tất cả. Ví dụ, +2500 trễ mọi dòng 2,5 giây.
  • Phụ đề xuất hiện quá muộn (sau lời thoại): nhập giá trị âm để đẩy sớm. Ví dụ, -1800 đưa mọi dòng lên sớm 1,8 giây.

Thao tác áp cho toàn bộ file trong một bước. Lưu theo định dạng gốc.

Để xử lý hàng loạt từ dòng lệnh, SeConv hỗ trợ flag --offset:

seconv subs.srt SubRip --offset:0:0:2:500 --output-folder out/ --overwrite

Định dạng offset là hh:mm:ss:ms. Lệnh trên cộng 2 giây 500 ms vào mọi timestamp. Flag --overwrite ghi đè file output đã có.

Sửa sai số frame rate: tôi cần hệ số nào?

Không khớp frame rate nghĩa là mỗi timestamp sai một lượng khác nhau. Sai số ở phút 1 còn nhỏ; đến phút 50 đã tích lũy lớn. Một offset cố định không thể sửa được vì lượng hiệu chỉnh cần thiết thay đổi theo từng dòng.

Trong Subtitle Edit, vào Synchronization > Change frame rate. Nhập frame rate mà phụ đề được căn giờ vào ô From, và frame rate thực tế của video vào ô To. Subtitle Edit nhân toàn bộ timestamp với tỷ số (To / From).

Không khớp phổ biến nhất là giữa 23.976 fps (NTSC, streaming Mỹ, Blu-ray) và 25 fps (PAL, broadcast châu Âu). Bảng sau liệt kê các hệ số tôi tra trước tiên:

Phụ đề căn giờ theoVideo chạy ởHệ sốTình huống thường gặp
23.976 fps25 fps1.04271SRT streaming Mỹ dùng trên bản PAL
25 fps23.976 fps0.95904SRT PAL dùng trên bản streaming Mỹ hoặc Blu-ray
24 fps25 fps1.04167Export cinema dùng trên broadcast PAL
25 fps24 fps0.96000SRT PAL dùng trên DCP cinema hoặc stream 24 fps
23.976 fps24 fps1.00100Drift rất nhỏ, dễ bỏ sót ở file ngắn

Mỗi hệ số là frame rate đích chia cho frame rate nguồn. Để xác nhận frame rate thực của video, chạy:

ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate -of default=noprint_wrappers=1 video.mp4

Nếu hệ số không khớp với bất kỳ cặp fps tiêu chuẩn nào, video có thể đã bị cắt ghép sau khi làm phụ đề. Thử Subtitle Edit Synchronization > Visual sync: đặt một điểm tham chiếu gần đầu và một gần cuối, công cụ sẽ tự tính scale và offset kết hợp cho toàn file.

Làm thế nào để trễ soft track phụ đề bằng ffmpeg -itsoffset?

Khi phụ đề đã được nhúng dưới dạng soft track trong MKV hoặc MP4, tôi có thể thêm độ trễ cố định khi mux mà không cần tách SRT ra. Tùy chọn -itsoffset trong ffmpeg cộng offset thời gian vào timestamp của một input trước khi mux. Giá trị dương trễ stream. Dùng khi phụ đề xuất hiện quá sớm:

# Trễ track phụ đề 3.5 giây khi mux vào MKV
ffmpeg -i video.mkv \
  -itsoffset 3.5 -i subs.srt \
  -map 0:v -map 0:a -map 1:s \
  -c:v copy -c:a copy -c:s srt \
  output.mkv

# Với MP4, thay -c:s srt bằng -c:s mov_text
ffmpeg -i video.mp4 \
  -itsoffset 3.5 -i subs.srt \
  -map 0:v -map 0:a -map 1:s \
  -c:v copy -c:a copy -c:s mov_text \
  output.mp4

Ý nghĩa các flag:

  • -itsoffset 3.5: cộng 3.5 giây vào timestamp của input -i ngay sau. Option này phải đặt trực tiếp trước -i cần áp dụng.
  • -map 0:v -map 0:a: lấy video và audio từ input thứ nhất, không re-encode.
  • -map 1:s: lấy phụ đề từ input thứ hai (đã trễ 3.5 giây).
  • -c:s srt: ghi track phụ đề dạng SubRip trong MKV. Dùng mov_text cho MP4.

Giới hạn quan trọng: -itsoffset chỉ đáng tin cậy với giá trị dương. Giá trị âm có thể tạo timestamp âm, làm hỏng output ở nhiều container và player. Để đẩy phụ đề lên sớm hơn, sửa SRT trong Subtitle Edit trước rồi mới remux bằng ffmpeg.

Khi nào nên nhờ chuyên gia xử lý đồng bộ phụ đề?

Với lệch cố định đơn thuần hoặc không khớp frame rate theo tỷ lệ chuẩn, các công cụ trên đủ để xử lý trong vài phút. Tôi tự dùng các bước này trước mỗi lần giao hàng.

Có ba trường hợp tôi sẽ nhờ chuyên gia hoặc khuyến nghị thuê dịch vụ:

  • Deliverable cho broadcast hoặc streaming cần QC sign-off: lỗi sync trong bản giao hàng chuyên nghiệp có thể không qua kiểm tra kỹ thuật. Cần QC pass riêng để xác nhận, không chỉ xem mắt thường.
  • Drift không đều do chỉnh sửa hậu kỳ: nếu video bị cắt ghép sau khi làm phụ đề và có đoạn được chèn hoặc cắt bỏ, drift sẽ không đồng đều. Cần re-time từng đoạn thay vì áp một scale toàn cục.
  • Định dạng broadcast SCC, MCC hoặc SMPTE-TT: SCC mã hóa dữ liệu CEA-608 với timecode nhúng trong broadcast stream. Điều chỉnh sync SCC đúng cách đòi hỏi công cụ hiểu drop-frame timecode và cấu trúc kênh caption, không phải trình soạn thảo subtitle thông thường.

Nếu cần phụ đề tiếng Việt được re-time và kiểm tra lại cho bản giao streaming hoặc broadcast, đó là việc tôi thực hiện trong dịch vụ dịch và đồng bộ phụ đề của mình.

Câu hỏi thường gặp

Phụ đề của tôi khớp ở đầu nhưng trễ vài phút về cuối. Lỗi gì vậy?

Gần như chắc chắn là sai số frame rate. Phụ đề được căn giờ theo bản video chạy ở frame rate khác. Vào Subtitle Edit Synchronization > Change frame rate. Nếu video là 25 fps và SRT viết cho bản 23.976 fps, nhập 23.976 vào From và 25 vào To. Hệ số 1.04271 sẽ kéo giãn toàn bộ timestamp cho khớp.

Dùng ffmpeg -itsoffset để đẩy phụ đề lên sớm hơn được không?

Không đáng tin cậy. -itsoffset cộng vào timestamp nên giá trị dương làm trễ stream. Giá trị âm trừ khỏi timestamp, nhưng các sự kiện gần đầu file có thể trở thành âm và nhiều container cùng player sẽ từ chối file output. Để đẩy phụ đề lên sớm, dùng Adjust all times trong Subtitle Edit với giá trị ms âm, lưu SRT đã sửa, rồi remux bằng ffmpeg nếu cần.

Flag --offset của SeConv có dùng được cho file SCC không?

SeConv có thể xử lý SCC để chuyển đổi định dạng, nhưng SCC mã hóa dữ liệu CEA-608 với timecode gắn với drop-frame 29.97 của broadcast. Áp một offset ms đơn giản qua công cụ subtitle thông thường có thể không cho kết quả chính xác với SCC broadcast chuyên nghiệp. Với SCC, tôi dùng công cụ caption broadcast chuyên dụng hiểu drop-frame timecode và cấu trúc kênh.

Nguyên nhân phổ biến của không khớp 23.976 fps và 25 fps là gì?

Một trường hợp thường gặp: người dùng nhận screener PAL 25 fps từ nhà phát hành châu Âu và căn giờ phụ đề theo bản đó. Bản giao nộp cuối lại là streaming Mỹ ở 23.976 fps. Vì 23.976 fps chạy chậm hơn 25 fps, video kết thúc muộn hơn và phụ đề viết cho bản nhanh hơn sẽ ngày càng trễ so với bản chậm hơn. Tỷ số giữa hai frame rate cho chính xác hệ số cần dùng để sửa.

Nguồn

  • Tài liệu FFmpeg: tùy chọn -itsoffset - xác nhận -itsoffset là input option và giá trị dương làm trễ stream. Kiểm tra tháng 10 năm 2026.
  • Subtitle Edit (Nikse.dk) - tính năng Adjust all times, Change frame rate và Visual sync; flag --offset của SeConv xác minh từ phiên bản 5.0 đã cài trên máy. Kiểm tra tháng 10 năm 2026.

Written by Dao Huy (Lucas), Vietnamese translator & localization specialist (EN · ZH · FR → Vietnamese). See translation services →

Báo giáWhatsApp