Bạn biết tôi qua Upwork? Nếu bạn biết tôi qua Upwork và muốn sử dụng dịch vụ, vui lòng liên hệ qua Upwork. Tin nhắn từ khách Upwork gửi ngoài Upwork sẽ không được trả lời.
Ghi chú bản địa hóa🎬 Phụ đề & Caption

Phụ Đề Bắt Buộc (Forced Narrative): Định Nghĩa và Cách Gán Cờ

Phụ đề forced narrative luôn hiển thị dù tắt phụ đề. Gán -disposition:s:0 forced trong ffmpeg hoặc --forced-display-flag 0 trong mkvmerge - file riêng.

Dao Huy (Lucas)8 phút đọc7 mục
Phụ Đề Bắt Buộc (Forced Narrative): Định Nghĩa và Cách Gán Cờ

💡 Phụ đề bắt buộc (Forced Narrative - FN) là track phụ đề nhỏ, luôn hiển thị, chỉ chứa hội thoại ngôn ngữ nước ngoài và văn bản trên màn hình cần dịch. Chúng hiển thị kể cả khi người xem đã tắt phụ đề. Gán cờ track bằng -disposition:s:0 forced trong ffmpeg hoặc --forced-display-flag 0 trong mkvmerge để player hiển thị track này bất kể cài đặt phụ đề của người dùng.

Ý chính

  • FN là tập con của file phụ đề đầy đủ: chỉ hội thoại ngoại ngữ và văn bản trên màn hình người xem không có phụ đề cần đến - không phải toàn bộ hội thoại.
  • Giao hàng FN như một file riêng cùng với track phụ đề đầy đủ; streamers và player xử lý chúng độc lập.
  • MKV: mkvmerge -o out.mkv video.mkv --forced-display-flag 0 fn.srt
  • MP4: ffmpeg -i video.mp4 -i fn.srt -map 0 -map 1 -c:v copy -c:a copy -c:s mov_text -disposition:s:0 forced out.mp4
  • Xác minh bằng ffprobe: tìm DISPOSITION:forced=1 trên stream phụ đề.

Phụ đề bắt buộc (Forced Narrative) là gì?

Thông số kỹ thuật W3C TTML2 định nghĩa phụ đề bắt buộc là "phụ đề được thiết kế để luôn hiển thị kể cả khi phụ đề không được bật." Đặc tả Matroska cho biết phần tử FlagForced (EBML ID 0x55AA) dùng cho track chỉ chứa "bản dịch âm thanh bằng ngôn ngữ nước ngoài hoặc văn bản trên màn hình."

Trong thực tế, forced narratives giải quyết một vấn đề cụ thể: một bộ phim chủ yếu tiếng Anh có vài cảnh tiếng Pháp, nhân vật nhận tin nhắn tiếng Hàn, hoặc biển hiệu ở thành phố nước ngoài cần dịch. Người xem đã tắt phụ đề vẫn cần hiểu những khoảnh khắc đó để theo dõi câu chuyện. File phụ đề đầy đủ, tức toàn bộ hội thoại được phụ đề để hỗ trợ tiếp cận, là sản phẩm giao hàng khác với cờ riêng. Tôi luôn xử lý đây là hai file riêng biệt từ đầu dự án.

File FN chỉ nên chứa những sự kiện người xem không có phụ đề thực sự cần. Đưa vào: hội thoại bằng ngôn ngữ khác với âm thanh chính; văn bản trên màn hình liên quan đến cốt truyện (biển hiệu, thư, tin nhắn, tiêu đề báo). Loại bỏ: hội thoại bằng ngôn ngữ chính (thuộc file phụ đề đầy đủ hoặc SDH). Phim tiếng Anh thông thường có một cảnh ngoại ngữ thường chỉ cần 15 đến 40 sự kiện FN. Nếu có hàng trăm sự kiện, bạn đang viết file phụ đề đầy đủ, không phải FN.

Cách tạo file FN từ nguồn phụ đề văn bản?

Với nguồn văn bản (SRT, VTT, ASS), không có cờ "forced" bên trong file - nó nằm trong metadata track của container. Tạo file FN có nghĩa là tách các sự kiện FN vào file riêng, sau đó gán cờ cho track khi mux vào container.

Quy trình của tôi trong Subtitle Edit: mở file phụ đề đầy đủ, xác định mọi sự kiện FN, đánh dấu những dòng đó (tôi dùng cột ghi chú), sao chép các cue vào file trống mới, xác minh thời gian và lưu thành fn.srt cạnh file full.srt.

Nếu nguồn của bạn là DVD hoặc Blu-ray VobSub hoặc PGS image subtitle đã có cờ forced, bộ chuyển đổi dòng lệnh của Subtitle Edit (SeConv) có thể trích xuất chỉ những sự kiện đó:

# Trích xuất chỉ các sự kiện có cờ forced từ nguồn image subtitle
seconv.exe "input.sub" SubRip --forced-only --output-folder "out/"
  • --forced-only: bỏ qua mọi sự kiện không có cờ forced trong nguồn image subtitle.
  • Chỉ hoạt động với nguồn hình ảnh (VobSub, PGS/HDMV) đã mang cờ - không có tác dụng với input SRT thuần nơi tất cả sự kiện đều tương đương.
  • Output là SRT chỉ chứa các sự kiện bắt buộc, sẵn sàng để gán cờ và mux.

Cách gán cờ forced cho track FN trong MKV và MP4?

Với MKV, dùng mkvmerge từ MKVToolNix. Tùy chọn --forced-display-flag gán phần tử FlagForced Matroska (EBML ID 0x55AA) cho track:

mkvmerge \
  -o output.mkv \
  video.mkv \
  --language 0:eng --track-name 0:"English" \
  --default-track-flag 0 \
  full.srt \
  --language 0:eng --track-name 0:"English [Forced]" \
  --forced-display-flag 0 \
  --default-track-flag 0:0 \
  fn.srt
  • --forced-display-flag 0: gán FlagForced=1 cho track ID 0 của input tiếp theo (fn.srt).
  • --default-track-flag 0 trên phụ đề đầy đủ: đánh dấu nó là mặc định cho người xem bật phụ đề.
  • --default-track-flag 0:0 trên track FN: xóa cờ default trên track FN. Player tự chọn nó vì cờ forced; không cần đặt cả default.
  • --language 0:eng: mã ISO 639-1; mkvmerge cũng chấp nhận ISO 639-2 ba chữ cái như vie cho tiếng Việt.

Với MP4, ffmpeg gán bit disposition forced. Các cờ disposition được xác nhận trong ffmpeg 8.1.1 bao gồm forced (chạy ffmpeg -dispositions để xem danh sách đầy đủ):

ffmpeg \
  -i video.mp4 \
  -i fn.srt \
  -map 0 -map 1 \
  -c:v copy -c:a copy \
  -c:s mov_text \
  -metadata:s:s:0 language=eng \
  -metadata:s:s:0 title="English [Forced]" \
  -disposition:s:0 forced \
  out.mp4
  • -c:s mov_text: bắt buộc cho track phụ đề văn bản trong MP4 (MP4 chỉ chấp nhận 3GPP Timed Text cho phụ đề văn bản).
  • -disposition:s:0 forced: gán cờ forced cho stream phụ đề đầu tiên. Dùng +forced để thêm cờ trong khi giữ nguyên các cờ disposition khác.
  • Để bao gồm cả phụ đề đầy đủ và track FN trong một MP4, map chúng theo thứ tự và dùng stream index: -disposition:s:1 forced cho stream phụ đề thứ hai.

Sau đó xác minh cờ bằng ffprobe:

ffprobe -v error \
  -select_streams s \
  -show_entries stream=index,codec_name,disposition \
  -of default=noprint_wrappers=1 \
  output.mkv

Track forced narrative được gán đúng hiển thị DISPOSITION:forced=1 và DISPOSITION:default=0. Nếu thấy DISPOSITION:forced=0, cờ chưa được gán. Kiểm tra lại index stream: index bao gồm cả stream video và audio, vì vậy phụ đề đầu tiên trong file có một video và một audio ở index 2 (ký hiệu s:0 trong stream specifier của ffmpeg).

Khi nào tự làm, khi nào cần chuyên gia?

Tạo và gán cờ file FN hoàn toàn nằm trong tầm tay của bất kỳ người thực hành nào có Subtitle Edit, ffmpeg hoặc mkvmerge. Các bước kỹ thuật trên khá đơn giản một khi đã hiểu FN chứa gì và cờ hoạt động như thế nào.

Phức tạp nằm ở chỗ: quyết định sự kiện nào thực sự đủ điều kiện là forced narrative cho một dự án cụ thể. Đây là phán đoán biên tập phụ thuộc vào ngôn ngữ gốc, bối cảnh câu chuyện và điều khán giả cần để theo dõi. Với phim có hội thoại đa ngôn ngữ phức tạp, xác định ranh giới FN đòi hỏi sự quen thuộc thực sự với nội dung.

Giao hàng cho streaming platforms thường yêu cầu track FN và phụ đề đầy đủ dưới dạng file riêng biệt trong gói submission, với quy ước đặt tên cụ thể. Nếu bạn giao hàng cho một streamer lần đầu, hãy kiểm tra tài liệu yêu cầu giao hàng để biết quy ước đặt tên file và các mục manifest họ yêu cầu kèm theo track FN.

Nếu bạn cần track phụ đề FN tiếng Việt tạo từ phim tiếng Anh có văn bản tiếng Việt trên màn hình, hoặc bản dịch phụ đề đầy đủ với FN được tách và gán cờ chính xác, đó là công việc tôi thực hiện. Xem trang dịch thuật phụ đề để biết tôi xử lý giao hàng cho streamers như thế nào.

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

Phụ đề forced narrative có thay thế file phụ đề đầy đủ không?

Không. Chúng là track riêng biệt, nhỏ hơn. File phụ đề đầy đủ chứa toàn bộ hội thoại để hỗ trợ tiếp cận; track FN chỉ chứa văn bản ngoại ngữ và trên màn hình mà người xem không có phụ đề cần đến. Cả hai đều đi kèm trong gói giao hàng. Khi người xem bật phụ đề, player hiển thị track phụ đề đầy đủ. Khi tắt phụ đề, player chỉ hiển thị track FN nhờ cờ forced.

Sự khác biệt giữa phụ đề forced và phụ đề default là gì?

Track "default" là track player chọn trước khi người xem bật phụ đề. Track "forced" hiển thị bất kể người xem bật hay tắt phụ đề - không thể tắt bằng công tắc phụ đề thông thường. Đây là hai cờ độc lập. Với track FN: forced=1 và default=0. Với track phụ đề đầy đủ: default=1 và forced=0.

Có thể đưa các sự kiện FN vào file phụ đề đầy đủ và đánh dấu chúng không?

Không, theo cách mà hầu hết player sẽ xử lý được. Cờ forced là cờ cấp track trong container MKV (phần tử FlagForced EBML 0x55AA) và MP4 (atom tkhd), không phải annotation cấp cue. Player đọc nó ở cấp track và quyết định có hiển thị toàn bộ track không. Cách đúng là hai file riêng, hai track riêng, mỗi track có cờ riêng.

Dùng language tag nào cho track forced narrative tiếng Việt?

Dùng mã ISO 639-2 ba chữ cái vie trong ffmpeg (-metadata:s:s:0 language=vie) và trong mkvmerge (--language 0:vie). Đặt tiêu đề track thành thứ gì đó mô tả rõ như "Vietnamese [Forced]" để đội QC giao hàng nhận ra ngay mà không cần mở file.

SeConv có thể trích xuất sự kiện FN từ file SRT không?

Không. Cờ --forced-only của SeConv trích xuất các sự kiện đã có cờ forced trong nguồn subtitle dạng hình ảnh (VobSub, PGS). Với file SRT văn bản, không có cờ forced cấp sự kiện. Để tạo SRT FN từ nguồn văn bản, hãy tách các sự kiện FN thủ công trong Subtitle Edit, lưu thành file riêng, rồi gán cờ cho toàn bộ track khi mux vào container.

Nguồn

Dao Huy (Lucas)
Dao Huy (Lucas)
Tốt nghiệp Trường Đại học Ngoại ngữ, Đại học Đà Nẵng. Ký cam kết chính xác trên mọi bản dịch có xác nhận (USCIS, IRCC).

Bài viết bởi Đào Huy (Lucas), biên dịch viên và chuyên viên bản địa hóa tiếng Việt (Anh, Trung, Pháp sang Việt). See translation services →

Báo giáWhatsApp