SCC vs MCC vs SMPTE-TT: file caption nào cho broadcast hay streaming?
← Blog
🎬 Phụ đề & Caption6 phút đọc

SCC vs MCC vs SMPTE-TT: file caption nào cho broadcast hay streaming?

💡 SCC (Scenarist Closed Captions) chứa byte CEA-608: chỉ ký tự Latin, 32 cột và 15 hàng, dùng cho phát sóng Mỹ. MCC (MacCaption) đóng gói VANC gồm cả 608 và 708 trong một file. SMPTE-TT (ST 2052-1) là file XML dạng TTML cho phát trực tuyến và OTT. Giao SCC cho broadcast, SMPTE-TT cho streaming hoặc 708-class. SCC không thể mã hóa tiếng Trung, tiếng Việt, tiếng Nhật hay ký tự CJK.

Ý chính

  • SCC là 608 thuần: ký tự Latin, 32 cột, 15 hàng. Tạo file bằng lệnh seconv.exe in.srt ScenaristClosedCaptions --fps 29.97 --output-folder out --overwrite. Luôn kiểm tra decode bằng caption-inspector.
  • MCC đóng gói cả lớp dịch vụ 608 và 708 trong một envelope MacCaption. Trong quá trình thử nghiệm của tôi, export MCC từ Subtitle Edit có lớp 708 bị lỗi: caption-inspector không decode được dữ liệu 708. Không dùng cho giao hàng 708.
  • SMPTE-TT (ST 2052-1) là định dạng phù hợp để giao hàng streaming và 708-class: seconv.exe in.srt SMPTE-TT2052 --output-folder out --overwrite. Dùng Unicode và mang thông tin style đầy đủ trong XML.
  • Luôn QC-decode file SCC hoặc MCC hoàn thiện bằng caption-inspector trước khi giao hàng: docker run --rm -v <dir>:/data nebulabroadcast/caption-inspector -o /data /data/out.scc.
  • SCC không mã hóa được ký tự CJK. Caption tiếng Anh giao dưới dạng SCC; ngôn ngữ khác giao dưới dạng subtitle track riêng (SRT, SMPTE-TT), không phải luồng 608 thứ hai.

SCC, MCC và SMPTE-TT là gì - và mỗi định dạng dùng ở đâu?

Ba định dạng này đều mang dữ liệu caption hoặc subtitle có đồng bộ thời gian, nhưng chúng hoạt động ở các lớp rất khác nhau trong hạ tầng broadcast và streaming. Từ khóa chính của bài này là "định dạng caption SCC MCC SMPTE-TT," và nhầm lẫn thường xuất hiện vì mỗi nền tảng broadcast hay streaming đều có container ưa thích riêng, cần các công cụ khác nhau để tạo ra đúng cách.

SCC (Scenarist Closed Captions) là container broadcast cổ điển dành cho caption CEA-608. File này chứa các cặp byte thô mà bộ giải mã 608 đọc theo từng dòng. Bộ mã ký tự giới hạn ở Latin-1 cộng một số ký tự mở rộng được định nghĩa trong chuẩn CTA-608. Mọi deliverable broadcast Mỹ tôi làm trong nhiều năm qua đều bắt đầu với một file SCC ở timecode drop-frame 29.97.

MCC (MacCaption) là định dạng envelope độc quyền của Telestream, nén dữ liệu VANC (Vertical Ancillary Data). Về lý thuyết, file này mang được cả byte CEA-608 ở lớp tương thích 608 và dữ liệu CEA-708 ở lớp dịch vụ riêng. Trên thực tế, lớp dịch vụ 708 trong MCC chính là điểm yếu của công cụ mã nguồn mở.

SMPTE-TT (SMPTE ST 2052-1) là một profile TTML thiết kế cho trao đổi chuyên nghiệp và giao hàng OTT. Đây là file XML hợp lệ dùng namespace W3C TTML, với namespace mở rộng SMPTE tùy chọn. Các nền tảng streaming ngày càng yêu cầu TTML hoặc subset IMSC 1.x thay vì SCC.

Đây là bảng quyết định tôi dùng khi nhận spec deliverable mới:

Định dạngChuẩnChứa gìBộ ký tựMục tiêu giao hàngCông cụ tạo
SCCCTA-608 (EIA-608)Chỉ byte caption 608Latin-1 + CTA-608 mở rộngBroadcast Mỹ, cable, đài truyền hìnhSeConv ScenaristClosedCaptions
MCCMacCaption proprietary608 + VANC 708 tùy chọnLớp 608: Latin; Lớp 708: UnicodeBroadcast cũ (608 + 708 trong một file)CCExtractor --out=mcc
SMPTE-TTSMPTE ST 2052-1 (TTML)Văn bản có thời gian + style XMLUnicode (mọi ngôn ngữ)Streaming, OTT, giao hàng 708-classSeConv SMPTE-TT2052
SRT / WebVTTDe-facto / W3CVăn bản thuần có thời gianUnicodeWeb video, YouTube, catch-upSeConv SubRip / WebVTT

Tại sao SCC vẫn là deliverable broadcast tiêu chuẩn?

SCC tồn tại vì một lý do: mọi bộ giải mã phần cứng trong mọi TV và set-top box ở Bắc Mỹ đều biết đọc byte CEA-608. Các đài truyền hình nhúng byte đó vào dữ liệu VANC của tín hiệu video, và mọi thiết bị nhận đều hiểu định dạng này. Thay đổi hạ tầng đó đòi hỏi một quyết định đồng thuận cấp ngành chưa xảy ra.

Trong thực tế: khi một hãng hậu kỳ hoặc đài truyền hình Mỹ gửi tôi spec caption, hầu như lúc nào cũng yêu cầu SCC ở drop-frame 29.97. Định dạng timecode là HH;MM;SS;FF với dấu chấm phẩy, chỉ ra drop-frame, khác với dấu hai chấm dùng trong non-drop. SeConv với --fps 29.97 mặc định tạo SCC drop-frame, đúng cho broadcast NTSC.

Một file SMPTE-TT trông như thế nào?

SMPTE-TT là XML, vì vậy cấu trúc của nó hiển thị và có thể chỉnh sửa mà không cần công cụ độc quyền. Đây là một tài liệu SMPTE-TT tối thiểu nhưng đầy đủ dựa trên schema ST 2052-1:

<?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:smpte="http://www.smpte-ra.org/schemas/2052-1/2010/smpte-tt">
  <head>
    <metadata>
      <ttm:title>Feature Film Captions</ttm:title>
    </metadata>
    <styling>
      <style xml:id="s1"
             tts:fontFamily="proportionalSansSerif"
             tts:fontSize="100%"
             tts:color="white"
             tts:backgroundColor="transparent"
             tts:textAlign="center"/>
    </styling>
    <layout>
      <region xml:id="r1"
              tts:origin="10% 80%"
              tts:extent="80% 15%"
              tts:displayAlign="after"/>
    </layout>
  </head>
  <body>
    <div>
      <p begin="00:00:01.000" end="00:00:04.000" style="s1" region="r1">
        Dòng caption đầu tiên.
      </p>
      <p begin="00:00:05.000" end="00:00:08.000" style="s1" region="r1">
        Dòng caption thứ hai.
      </p>
    </div>
  </body>
</tt>

Các trường cần chú ý:

  • xml:lang="en": tag ngôn ngữ BCP 47 cho tài liệu. Đổi thành vi cho tiếng Việt hoặc zh-Hans cho tiếng Trung giản thể.
  • xmlns:smpte=...: namespace mở rộng SMPTE ST 2052-1. Chỉ cần nếu bạn dùng các phần tử SMPTE-specific như smpte:backgroundImage. Với giao hàng văn bản thuần, namespace TTML cơ bản là đủ.
  • tts:origin và tts:extent: định vị dựa trên phần trăm. Netflix yêu cầu giá trị phần trăm trong file TTML, không dùng giá trị pixel.
  • begin và end trong <p>: wall-clock time theo định dạng HH:MM:SS.mmm. SMPTE-TT cũng hỗ trợ timecode SMPTE nếu khai báo trong phần tử <tt>.

Trong thực tế, tôi không viết tay SMPTE-TT. Tôi soạn thảo file caption trong Subtitle Edit, kiểm tra CPS và timing, rồi xuất qua SeConv.

Cách tạo từng định dạng từ dòng lệnh?

Ba định dạng broadcast và streaming đều có thể tạo từ SRT nguồn bằng SeConv hoặc CCExtractor. Đây là các lệnh tôi chạy:

# SCC cho broadcast (CEA-608, drop-frame 29.97)
seconv.exe in.srt ScenaristClosedCaptions --fps 29.97 --output-folder out --overwrite

# SMPTE-TT cho streaming và giao hàng 708-class
seconv.exe in.srt SMPTE-TT2052 --output-folder out --overwrite

# MCC từ video nguồn có caption nhúng (CCExtractor)
ccextractor input.mp4 --out=mcc -o output.mcc

# QC-decode SCC hoàn thiện bằng caption-inspector
docker run --rm -v C:/captions:/data nebulabroadcast/caption-inspector ^
  -o /data /data/output.scc

Lưu ý về tên định dạng SeConv:

  • ScenaristClosedCaptions: tạo file .scc. Luôn truyền --fps 29.97 cho broadcast NTSC; đặt 25 cho PAL.
  • SMPTE-TT2052: tạo file .ttml hoặc .xml. Không cần flag FPS; timing mặc định dùng millisecond wall-clock.
  • --overwrite: ngăn SeConv bỏ qua file đã tồn tại trong thư mục output. Tôi luôn thêm flag này.
  • Flag --out=mcc của CCExtractor được xác nhận từ output --help của CCExtractor 0.96.5 trên máy này.

Bẫy MCC: tại sao tôi giao SMPTE-TT cho 708 thay vì MCC

Trong quá trình thử nghiệm của tôi, file MCC xuất từ Subtitle Edit khiến caption-inspector không decode được lớp dịch vụ 708: output chỉ hiện dữ liệu 608 tương thích. Các công cụ mã nguồn mở, kể cả flag --out=mcc của CCExtractor, có thể bọc nội dung 608 trong một envelope MCC, nhưng một dịch vụ CEA-708 gốc với font, window và định vị riêng vượt quá khả năng đáng tin cậy của công cụ miễn phí hiện tại.

Quy tắc làm việc của tôi: nếu spec yêu cầu "708 file," tôi giao file XML SMPTE-TT (ST 2052-1) và ghi rõ trong delivery notes. SMPTE-TT mang văn bản Unicode kèm định vị và styling phù hợp với yêu cầu giao hàng 708-class cho streaming và OTT. Với spec broadcast yêu cầu cụ thể MCC có lớp 708 hoạt động đúng, cần đến phần mềm thương mại như Telestream MacCaption, và tôi nói thẳng điều đó thay vì giao file trông đúng nhưng fail QC decode.

Bạn tự làm được gì và khi nào nên nhờ chuyên gia?

Với phần lớn công việc creator và web-streaming, quy trình khá thẳng: tạo SRT trong Subtitle Edit, xuất sang SMPTE-TT hoặc WebVTT bằng SeConv, và nền tảng streaming xử lý phần còn lại. CCExtractor có thể trích xuất byte 608 đã nhúng trong video và chuyển thành SCC hoặc SRT. Caption-inspector qua Docker miễn phí và cho kết quả decode đáng tin cậy cho bất kỳ SCC hoặc MCC nào bạn nhận hoặc tạo ra.

Thời điểm chuyên gia hoặc công cụ thương mại tạo ra giá trị:

  • Broadcast SCC ở quy mô lớn: file SCC có yêu cầu cứng về timecode drop-frame 29.97. Bất kỳ sai lệch frame rate nào cũng dịch chuyển toàn bộ caption phía sau. Nếu timing nguồn là non-drop hoặc 23.976, việc chuyển đổi cần kiểm tra frame rate cẩn thận.
  • MCC với lớp CEA-708 gốc: công cụ mã nguồn mở không tạo được lớp dịch vụ 708 decode được đáng tin cậy. Công cụ thương mại là tiêu chuẩn cho yêu cầu này.
  • Tuân thủ CVAA và FCC: video internet Mỹ theo CVAA yêu cầu caption đạt bốn tiêu chí: độ chính xác, đồng bộ, đầy đủ và định vị. Hồ sơ tuân thủ có thể cần file caption được xác minh. Xem dịch vụ QC caption của tôi để biết quy trình kiểm tra.
  • Subtitle ngôn ngữ khác: tôi giao subtitle tiếng Việt và các ngôn ngữ khác dưới dạng track SMPTE-TT hoặc SRT riêng, không phải luồng SCC thứ hai. SCC là định dạng chỉ dùng Latin và không mã hóa được dấu tiếng Việt.

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

Có thể chuyển trực tiếp từ SCC sang SMPTE-TT không?

Có. CCExtractor có thể decode SCC và xuất SMPTE-TT bằng flag --out=smptett. Ngoài ra, bạn có thể chuyển SCC sang SRT trước bằng CCExtractor (--out=srt), rồi dùng SeConv xuất sang SMPTE-TT2052. Quy trình hai bước giúp bạn chỉnh sửa và QC văn bản trong Subtitle Edit trước khi xuất cuối cùng.

SMPTE-TT có hỗ trợ tiếng Việt hay tiếng Trung không?

Có. SMPTE-TT là XML UTF-8 và dùng Unicode cho toàn bộ nội dung văn bản. Bạn có thể đưa ký tự có dấu tiếng Việt, ký tự Hán, hoặc bất kỳ script Unicode nào vào trong phần tử <p>. Đặt xml:lang ở phần tử gốc <tt> theo tag BCP 47 đúng: vi cho tiếng Việt, zh-Hans cho tiếng Trung giản thể.

SMPTE-TT và IMSC khác nhau như thế nào?

IMSC (Internet Media Subtitles and Captions, W3C TTML-IMSC) là profile hạn chế của TTML2 dành cho giao hàng streaming. SMPTE-TT (ST 2052-1) cũng là profile TTML, thêm namespace SMPTE-specific cho các tính năng như nền hình ảnh. IMSC 1.x tích hợp các extension của SMPTE-TT cho image profile. Một tài liệu hợp lệ theo yêu cầu SMPTE-TT thường cũng là TTML2 hợp lệ và tương thích với IMSC khi giá trị định vị dùng phần trăm.

Làm sao biết file SCC của tôi dùng drop-frame hay non-drop timecode?

Mở file SCC trong text editor và xem timestamp đầu tiên. Drop-frame dùng dấu chấm phẩy ở phân cách cuối: 00;00;01;00. Non-drop dùng dấu hai chấm: 00:00:01:00. Với broadcast NTSC 29.97 fps, timecode phải là drop-frame. SeConv với --fps 29.97 mặc định tạo SCC drop-frame.

Khi nào cần giao cả SCC lẫn SMPTE-TT cho cùng một chương trình?

Tùy theo delivery spec. Một số streamer và nhóm broadcast yêu cầu cả hai: SCC cho luồng broadcast cũ và SMPTE-TT cho nền tảng streaming. Đọc kỹ spec trước khi bắt đầu sản xuất. Việc điều chỉnh từ non-drop sang drop-frame sau khi hoàn thiện dễ gây lỗi nếu không kiểm tra kỹ, vì vậy hãy xác nhận yêu cầu sớm.

Nguồn

  • W3C TTML2 Specification - cấu trúc tài liệu, namespace và định nghĩa phần tử cho TTML. Kiểm tra tháng 10/2026.
  • W3C IMSC 1.3 (TTML-IMSC) - profile TTML cho streaming; namespace SMPTE ST 2052-1 được xác nhận trong Phụ lục I.4. Kiểm tra tháng 10/2026.
  • Netflix Timed Text Style Guide - Yêu cầu chung - yêu cầu định vị dựa trên phần trăm cho file TTML. Kiểm tra tháng 10/2026.
  • CCExtractor (GitHub) - các flag output --out=scc, --out=mcc và --out=smptett xác nhận qua --help (phiên bản 0.96.5 trên máy này). Kiểm tra tháng 10/2026.
  • Subtitle Edit / SeConv (nikse.dk) - tên định dạng ScenaristClosedCaptions và SMPTE-TT2052 xác nhận qua batch converter trên máy này. Kiểm tra tháng 10/2026.

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

Báo giáWhatsApp