💡 TL;DR: Khi khách hàng yêu cầu "file caption CEA-708", hãy giao SMPTE-TT (ST 2052-1) XML thay vì file MCC xuất từ Subtitle Edit hoặc SeConv. Bộ mã hóa MCC mã nguồn mở tạo ra lớp dịch vụ 708 mà caption-inspector không thể giải mã, trong khi SMPTE-TT XML chứa dữ liệu định thời và định vị có cấu trúc chuẩn. Lệnh:
seconv input.srt SMPTE-TT2052 --output-folder out --fps 29.97 --overwrite.
Ý chính
- Tên định dạng SeConv:
SMPTE-TT2052(không có dấu cách) tạo ra file XML chuẩn ST 2052-1;MacCaption1.0tạo .mcc nhưng lớp dịch vụ 708 bị lỗi trong bản mã nguồn mở. - Kiểm tra QC:
docker run --rm -v <dir>:/data nebulabroadcast/caption-inspector -o /data /data/<file>- nếu output -S1.708 rỗng trên file MCC, dịch vụ 708 không đạt chuẩn broadcast. - SMPTE-TT XML: dùng namespace SMPTE (
xmlns:smpte="http://www.smpte-ra.org/schemas/2052-1/2010/smpte-tt"), khai báo 29.97 drop-frame quattp:frameRateMultiplier="1000 1001", và timing chính xác đến frame trong<p begin="HH:MM:SS:FF">. - MCC 708 gốc: nếu deliverable thực sự yêu cầu MCC với dịch vụ 708 gốc, bạn cần phần mềm thương mại (Telestream MacCaption); không có công cụ miễn phí nào làm được điều này đáng tin cậy.
- 608 không hỗ trợ CJK: SCC và lớp tương thích 608 trong MCC/708 chỉ mã hóa ký tự Latin; các ngôn ngữ khác phải đi dưới dạng track phụ đề riêng, không phải caption nhúng.
Tại sao yêu cầu "caption 708" gây nhầm lẫn, và vấn đề gì với MCC mã nguồn mở?
CEA-708 (nay là CTA-708) là chuẩn closed-caption kỹ thuật số dùng trong phát sóng Mỹ kể từ quá trình chuyển đổi ATSC. Khi khách hàng yêu cầu "708 captions", họ muốn một file mà dữ liệu định thời và văn bản có thể được giải mã bởi thiết bị nhận 708: trạm QC broadcast, trình xác thực ingest streaming, hoặc caption-inspector. Giả định phổ biến là bất kỳ file .mcc nào cũng đáp ứng điều này. Trên thực tế, giả định đó thường gây ra vấn đề.
Tôi gặp trường hợp này lần đầu khi vendor QC của khách hàng từ chối file MCC mà tôi đã chuyển đổi bằng Subtitle Edit. File mở bình thường trong Subtitle Edit và phát lại được trong soft player, nhưng caption-inspector trả về kết quả giải mã 708 rỗng.
Nguyên nhân: Subtitle Edit tạo ra .mcc hợp lệ về cú pháp với đầy đủ header, nhưng luồng byte bên trong lẽ ra phải mang dịch vụ 708 gốc (định nghĩa cửa sổ, thuộc tính bút, lệnh set-pen-location) lại không được điền đúng. Điều nó viết là các byte tương thích 608 - đó là lý do văn bản phát lại được - nhưng không có cửa sổ dịch vụ 708 thực sự. Giao SMPTE-TT XML tránh hoàn toàn vấn đề này vì timing và định vị của nó nằm trong XML có cấu trúc mà mọi trình xác thực hiện đại đều đọc được.
File SMPTE-TT (ST 2052-1) thực sự khai báo những gì?
SMPTE ST 2052-1 là một profile của TTML (W3C Timed Text Markup Language) với các namespace SMPTE bổ sung cho metadata caption. Đây là cấu trúc mà SeConv tạo ra từ input SRT:
<?xml version="1.0" encoding="utf-8"?>
<tt xml:lang="en"
xmlns="http://www.w3.org/ns/ttml"
xmlns:tts="http://www.w3.org/ns/ttml#styling"
xmlns:ttm="http://www.w3.org/ns/ttml#metadata"
xmlns:ttp="http://www.w3.org/ns/ttml#parameter"
ttp:timeBase="media"
ttp:frameRate="29"
ttp:frameRateMultiplier="1000 1001"
xmlns:smpte="http://www.smpte-ra.org/schemas/2052-1/2010/smpte-tt"
xmlns:m608="http://www.smpte-ra.org/schemas/2052-1/2010/smpte-tt#cea608">
<head>
<metadata>
<ttm:title>My Show - Episode 1</ttm:title>
<smpte:information
origin="http://www.smpte-ra.org/schemas/2052-1/2010/smpte-tt#cea608"
mode="Preserved"
m608:channel="CC1"
m608:programName="Demo"
m608:captionService="F1C1CC" />
</metadata>
<styling>
<style xml:id="basic"
tts:color="white"
tts:fontFamily="Arial"
tts:backgroundColor="transparent"
tts:fontSize="21" />
</styling>
<layout>
<region xml:id="bottom"
tts:origin="10% 55%"
tts:extent="80% 80%"
tts:displayAlign="after" />
<region xml:id="top"
tts:origin="10% 10%"
tts:extent="80% 80%"
tts:displayAlign="before" />
</layout>
</head>
<body>
<div>
<p begin="00:00:01:00" end="00:00:04:00"
tts:textAlign="center" region="bottom" style="basic">
Hello, this is a test caption.
</p>
<p begin="00:00:05:00" end="00:00:08:14"
tts:textAlign="center" region="bottom" style="basic">
Second caption line here.
</p>
</div>
</body>
</tt>
Các trường quan trọng:
ttp:frameRate="29" ttp:frameRateMultiplier="1000 1001": khai báo 29.97 drop-frame. Multiplier 1000/1001 là cách TTML chuẩn biểu diễn pulldown 0,1%. Timecode trong body dùng định dạng HH:MM:SS:FF theo tốc độ đó.xmlns:smptevàxmlns:m608: các namespace SMPTE khai báo tuân thủ ST 2052-1 và kênh metadata 608. Trình xác thực broadcast kiểm tra những namespace này.m608:channel="CC1": kênh caption 1, vị trí tiêu chuẩn cho English closed captions tại Mỹ.tts:origin / tts:extenttrên mỗi region: định vị theo phần trăm; 10% 55% giữ caption trong phần ba dưới màn hình.- Timing
begin/endchính xác đến frame: không còn mơ hồ về drop vs non-drop vì tốc độ frame được khai báo một lần trong header.
Chạy lệnh chuyển đổi với SeConv và kiểm tra kết quả như thế nào?
SeConv là bộ chuyển đổi batch dòng lệnh đi kèm với Subtitle Edit. Tên định dạng là SMPTE-TT2052 (không có dấu cách, như liệt kê bởi seconv formats):
# Một file - SRT sang SMPTE-TT ở 29.97 drop-frame
seconv input.srt SMPTE-TT2052 --output-folder out/ --fps 29.97 --overwrite
# Batch - tất cả file SRT trong thư mục hiện tại
seconv "*.srt" SMPTE-TT2052 --output-folder out/ --fps 29.97 --overwrite
SMPTE-TT2052: tên định dạng chính xác; chạyseconv formatsđể xem toàn bộ danh sách.--fps 29.97: báo SeConv đọc và ghi timecode ở 29.97. Không có flag này, mặc định là 24fps; một dự án 29.97 với file SMPTE-TT 24fps sẽ bị lệch ngay lập tức ở đầu nhận.--overwrite: thay thế file .xml đã có trong thư mục output; bỏ qua khi chạy lần đầu.
Để QC, tôi chạy caption-inspector trên SCC nguồn để xác minh giải mã 608, sau đó giao SMPTE-TT XML cho deliverable 708:
# QC-decode một SCC hoặc MCC tham chiếu
docker run --rm -v C:/captions:/data nebulabroadcast/caption-inspector -o /data /data/my-show-ep1.scc
caption-inspector ghi ba file vào thư mục được mount:
my-show-ep1-C1.608: giải mã văn bản của luồng CEA-608, kênh CC1. Đây là file tôi đọc để xác minh hội thoại và ngắt dòng.my-show-ep1-S1.708: giải mã dịch vụ CEA-708 số 1. Nếu file này rỗng khi chạy trên MCC do Subtitle Edit tạo, đó là xác nhận lớp dịch vụ 708 bị lỗi.my-show-ep1.ccd: Closed Caption Descriptor - tóm tắt số packet và lỗi đọc được bằng máy.
Khi nào MCC 708 gốc thực sự được yêu cầu, và phải làm gì?
Hầu hết khách hàng broadcast và streaming nói "708 captions" thực ra đang kiểm tra SMPTE-TT (hoặc chấp nhận SCC + SMPTE-TT kèm theo đó). Một số ít cơ sở - đặc biệt là những nơi dùng hệ thống playout cáp TV cũ hoặc pipeline hậu kỳ dựa trên MacCaption - yêu cầu rõ ràng MCC với dịch vụ 708 gốc. Trong trường hợp đó, câu trả lời thành thật là bạn cần phần mềm thương mại.
Telestream MacCaption là tiêu chuẩn ngành cho việc sản xuất MCC 708 gốc. Các cơ sở broadcast và nhà hậu kỳ thường có license. Nếu bạn thỉnh thoảng làm công việc broadcast và không thể biện minh cho chi phí license, con đường thực tế là: giao SMPTE-TT XML làm baseline và thông báo yêu cầu MCC để khách hàng chuyển sang facility có license MacCaption. Tôi xử lý trường hợp này khoảng một lần mỗi năm với các job giao hàng cáp TV cũ.
Tôi có thể tự làm gì, và khi nào chuyên gia thực sự đáng giá?
Với Subtitle Edit, SeConv và caption-inspector (Docker), bạn có thể xử lý toàn bộ quy trình cho hầu hết streaming và giao hàng internet: SRT sang SMPTE-TT XML, một lượt QC decode trên SCC nguồn, và kiểm tra nhanh hội thoại. Đây là con đường công cụ miễn phí cho English closed captions và English SDH.
Một captioner chuyên nghiệp bổ sung thêm: xác minh tuân thủ tốc độ đọc (CPS) theo Netflix Timed Text Style Guide hoặc BBC subtitling guidelines, định dạng SDH (âm thanh cảnh báo, nhận dạng người nói, ký hiệu nhạc), đồng bộ chính xác với bản mix audio cuối, và khả năng phối hợp với broadcast facility cho giao hàng MCC khi cần. Đối với tuân thủ ADA/CVAA - bắt buộc với broadcast Mỹ và một số video trực tuyến theo luật liên bang - một deliverable được QC độc lập từ captioner biết tiêu chuẩn chất lượng FCC là điều khách hàng cần.
Nếu bạn cần English closed captions hoặc SDH với giao hàng SMPTE-TT, dịch vụ caption QC của tôi bao gồm toàn bộ pipeline: bản ghi có định thời, kiểm tra CPS trong Subtitle Edit, xuất SeConv SMPTE-TT, QC pass bằng caption-inspector và XML sẵn sàng cho broadcast ingest.
Câu hỏi thường gặp
Tôi có thể dùng file SMPTE-TT XML trực tiếp trong hệ thống playout broadcast không?
Phụ thuộc vào hệ thống. Hầu hết trình xác thực broadcast hiện đại và platform ingest streaming (Amazon, Apple, Netflix) chấp nhận SMPTE-TT / TTML làm định dạng giao hàng. Phần cứng playout cũ yêu cầu caption nhúng trong MXF hoặc file SCC vật lý có thể không phân tích TTML trực tiếp - trong trường hợp đó SMPTE-TT là deliverable cho QC và facility thực hiện mux cuối cùng. Kiểm tra spec của facility trước khi giao hàng.
caption-inspector có hoạt động trên file SMPTE-TT XML không, hay chỉ trên SCC và MCC?
caption-inspector được thiết kế để giải mã CEA-608 và CEA-708 từ các luồng caption nhị phân: SCC, MCC và video có caption nhúng (MPEG-2 TS, MP4). Nó không phân tích SMPTE-TT XML trực tiếp. Để QC file SMPTE-TT tôi xác thực cấu trúc XML và phát lại trong VLC; để QC decode 608/708 đầy đủ tôi chạy caption-inspector trên SCC nguồn.
Sự khác biệt giữa lớp tương thích 608 và dịch vụ 708 gốc là gì?
Lớp tương thích 608 là bản sao dữ liệu CEA-608 được nhúng trong cấu trúc packet 708 để các bộ giải mã 608 cũ vẫn hiển thị được caption. Mọi file 708 được mã hóa đúng đều mang lớp này. Dịch vụ 708 gốc đi xa hơn: nó thêm định nghĩa cửa sổ 708, thuộc tính bút và định vị mà bộ thu 708 có thể sử dụng với tính năng nâng cao. Bản xuất MCC của Subtitle Edit ghi lớp 608 (đó là lý do văn bản phát lại được) nhưng không có cửa sổ dịch vụ 708 gốc.
Có công cụ miễn phí nào tạo ra MCC 708 gốc đạt chuẩn broadcast không?
Không đáng tin cậy, theo thử nghiệm của tôi. caption-inspector có thể chuyển đổi SCC sang MCC, nhưng kết quả chỉ mang lớp tương thích 608, giống như Subtitle Edit. Các công cụ duy nhất tôi biết tạo ra MCC với dịch vụ 708 gốc đúng là Telestream MacCaption và một số hệ thống tác giả caption thương mại khác dùng bởi các facility hậu kỳ broadcast.
Flag --fps trong SeConv có ảnh hưởng đến timecode trong file SMPTE-TT XML không?
Có. SeConv dùng --fps để vừa đọc timecode input vừa ghi các giá trị ttp:frameRate và ttp:frameRateMultiplier trong XML output. Nếu SRT nguồn dùng timing millisecond (như tất cả SRT đều vậy) và dự án là 29.97, --fps 29.97 chuyển đổi sang frame boundary 29.97 gần nhất. Ở 24fps các giá trị sẽ sai cho dự án 29.97, dẫn đến lỗi offset không đổi ở đầu nhận.
Nguồn
- Subtitle Edit của Nikolaj Lynge Olsen (nikse.dk) - Tên định dạng SeConv và xuất SMPTE-TT2052. Đã xác minh tháng 10/2026.
- caption-inspector của Comcast (GitHub) - Công cụ QC decode Docker, các file output (-C1.608, -S1.708, .ccd). Đã xác minh tháng 10/2026.
- W3C Timed Text Markup Language 2 (TTML2) - Đặc tả TTML cơ sở cho SMPTE-TT ST 2052-1. Đã xác minh tháng 10/2026.
- FCC Closed Captioning on Television - Yêu cầu giao hàng caption broadcast Mỹ. Đã xác minh tháng 10/2026.

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 →
