Thêm BOM vào tệp phụ đề
Hoặc dán văn bản phụ đề
Tùy chọn
BOM là ba byte ở đầu tệp nói rõ tệp đang dùng encoding nào. Nó vô hình trong mọi trình soạn thảo và trình phát, không chiếm chỗ trên màn hình, và không có gì trong phụ đề thay đổi khi thêm hoặc bỏ nó. Hai loại công cụ quan tâm đến nó: các chương trình Windows ghi phụ đề, vốn mặc định thêm một BOM, và các bộ phân tích nghiêm ngặt trong đường ống build, vốn từ chối tệp bắt đầu bằng BOM. Trang này mở ô ở trạng thái mà tiêu đề của nó gọi tên, nên bạn có thể đảo lại nếu hóa ra tệp của mình ở trạng thái ngược lại. Một tệp UTF-16 luôn mang BOM, vì đó là cách trình đọc biết nó đang nhìn thấy thứ tự byte nào trong hai thứ tự — yêu cầu xóa BOM ở đó sẽ để nó nguyên tại chỗ.
Các mốc thời gian được tính theo frame rate nào. Trên các trang định dạng, đây là thông số MicroDVD cần, vì định dạng này lưu thời gian dưới dạng số khung hình. Trên các trang frame rate, đây là tốc độ mà tệp được tính theo — phiên bản mà phụ đề được làm cho — và ô thứ hai của trang nhận tốc độ của video mà bạn sẽ dùng phụ đề cùng. 23.976, 24, 25, 29.97, 30, 50, 59.94 và 60 là những giá trị thường gặp. Điền sai sẽ làm lệch toàn bộ dòng thời gian, và trên các trang frame rate, nó làm lệch theo một tỉ lệ chứ không phải một lượng cố định.
Trang này thêm một dấu BOM vào đầu tệp phụ đề, đúng ký tự U+FEFF; với tệp UTF-8, dấu đó được ghi thành ba byte `EF BB BF`. Tệp được xử lý trong trình duyệt, không tải lên máy chủ, và chạy được hàng loạt.
Trang đếm cả các dấu BOM đã có ở đầu tệp trước khi thêm, nên kết quả luôn có đúng một dấu dù tệp đã có một hay nhiều dấu từ những lần chạy trước. Kiểu kết thúc dòng được giữ nguyên: tệp dùng LF vẫn dùng LF, tệp dùng CRLF vẫn dùng CRLF. Các trang chuyển đổi định dạng không mang dấu này sang định dạng khác, nên đây là cách duy nhất để chắc chắn nó có mặt.
BOM không phải nội dung và không hiện ra khi mở tệp bằng trình soạn thảo. Trang không tự đổi bảng mã: tệp UTF-8 vẫn là UTF-8, tệp UTF-16 vẫn là UTF-16, và mỗi tệp chỉ còn đúng một dấu ở đầu. Văn bản, timecode, số cue và thứ tự cue không đổi; mười hai định dạng đều được nhận và không có byte nào rời khỏi máy.
Ví dụ
Một tệp SRT chưa có BOM
Đầu vào
1
00:00:01,000 --> 00:00:02,000
The room is dark.
2
00:00:03,000 --> 00:00:04,000
A cold night.
Kết quả
1
00:00:01,000 --> 00:00:02,000
The room is dark.
2
00:00:03,000 --> 00:00:04,000
A cold night.
Đầu ra trở về không đổi ở mọi chỗ trừ ba byte đầu tiên. Ba byte đó là dấu BOM UTF-8, thứ mà một số hệ thống phát sóng và một số trình phát yêu cầu để nhận ra tệp là UTF-8. Timecode và văn bản không bị chạm, và kiểu xuống dòng giữ nguyên.
Một tệp đã có một dấu
Đầu vào
1
00:00:01,000 --> 00:00:02,000
The room is dark.
Kết quả
1
00:00:01,000 --> 00:00:02,000
The room is dark.
Không có dấu thứ hai. Trang đếm và bỏ các dấu đã có trước khi thêm đúng một dấu, nên kết quả luôn có một — không phải hai, và cũng không phải ba nếu tệp từng bị chạy qua nhiều công cụ. Phần còn lại của tệp trở về nguyên vẹn.
Một tệp dùng CRLF
Đầu vào
1
00:00:01,000 --> 00:00:02,000
Already marked.
Kết quả
1
00:00:01,000 --> 00:00:02,000
Already marked.
Ba byte đầu là dấu mới, và mọi dòng vẫn kết thúc bằng CRLF như trước. Trang này chỉ đụng vào phần đầu tệp; nó không đổi kiểu xuống dòng, không đổi nội dung và không đổi thứ tự. Nếu tệp đã có BOM, đầu ra giống hệt từng byte.
Câu hỏi thường gặp
BOM UTF-8 là gì và trang thêm BOM vào phụ đề ghi nó bằng gì?
Đó là ký tự U+FEFF đứng ở đầu tệp; với UTF-8 nó được ghi thành ba byte `EF BB BF`. Nó báo cho phần mềm đọc tệp biết nội dung là UTF-8. Bản thân nó không phải văn bản và không hiện ra trên màn hình; trang chỉ thêm dấu chứ không đổi bảng mã của tệp.
Chuyện gì xảy ra nếu tệp phụ đề của tôi đã có BOM trước khi thêm?
Trang loại bỏ mọi dấu BOM đang có ở đầu tệp rồi thêm đúng một dấu. Vì thế đầu ra luôn có một BOM, không phải hai, kể cả khi tệp đã bị chạy qua vài công cụ trước đó. Đây là lý do thao tác này chạy lại nhiều lần vẫn cho cùng kết quả.
Thêm BOM có làm thay đổi kiểu xuống dòng của tệp phụ đề không?
Không. Tệp dùng LF vẫn dùng LF và tệp dùng CRLF vẫn dùng CRLF; trang chỉ đặt thêm ký tự U+FEFF ở đầu (ba byte với UTF-8). Muốn đổi kiểu xuống dòng, hãy dùng trang đổi kết thúc dòng LF và CRLF cho phụ đề.
Vì sao một số hệ thống lại cần BOM UTF-8 trong tệp phụ đề?
Vì một số trình phát và hệ thống phát sóng dựa vào BOM để nhận ra tệp là UTF-8 thay vì đoán. Thiếu nó, chữ có dấu hoặc chữ ngoài bảng Latinh có thể hiện sai. Yêu cầu này tùy hệ thống, nên chỉ thêm khi đích đến đòi.
Thêm BOM có làm hỏng phụ đề trên những trình phát không hiểu BOM không?
Phần lớn trình phát bỏ qua dấu này, nhưng một số công cụ cũ có thể hiện nó thành ký tự lạ ở đầu dòng đầu tiên. Nếu đích đến không yêu cầu BOM, hãy dùng trang xóa BOM thay vì thêm; đây là lựa chọn theo nơi tệp sẽ đi, không phải theo sở thích.
Thêm BOM có áp dụng cho mọi định dạng phụ đề không?
Có, cả mười hai định dạng mà trang này đọc: SRT, WebVTT, ASS, SSA, SBV, SAMI, LRC, MicroDVD, TTML, JSON, văn bản trơn và CSV. BOM nằm ngoài nội dung định dạng nên nó được thêm vào byte đầu của tệp trong mọi trường hợp.