Chuyển phụ đề sang văn bản — SRT, VTT, SBV, ASS

Chuyển phụ đề SRT, VTT, SBV và ASS thành bản ghi sạch. Bỏ mã thời gian, nối lại câu bị cắt và xoá phần lặp của phụ đề tự động.

Chuyển phụ đề thành bản ghi lời thoại: gỡ mã thời gian mới là nửa dễ

Mọi định dạng phụ đề đều mã hóa cùng một thứ: những đoạn lời nói ngắn ghim vào mã thời gian. Đưa chúng trở lại thành văn xuôi đọc được trông như việc của một script năm dòng — xóa số thứ tự, xóa mũi tên, nối phần còn lại. Chạy script đó trên một tệp phụ đề thật thì bạn được thứ gần đúng, mà gần đúng còn tệ hơn sai lộ liễu, vì phải đọc mới nhận ra.

Có hai chỗ làm nó gãy. Phụ đề được ngắt cho vừa màn hình chứ không phải để kết thúc một câu, nên nối kiểu ngây thơ sẽ cho ra văn xuôi bị băm cứ sáu chữ một nhát. Và phụ đề tự động thì chạy cuốn chiếu, lặp lại chữ từ khung này sang khung kia, nên nối chúng lại là mỗi câu xuất hiện hai ba lần. Công cụ này xử lý cả hai. Tải lên hoặc dán một tệp vào ô phía trên, kết quả hiện ra ngay lập tức, trong tab trình duyệt này.

Chuyện lặp chữ do phụ đề cuốn chiếu

Đây là chỗ khiến nhiều người mắc bẫy. Phụ đề tự động của YouTube và phần lớn hệ thống trực tiếp không phát ra từng khối chữ rời rạc. Nó phát ra một cửa sổ trượt, để người xem thấy chữ dồn dần lên. Trong tệp, nó trông như thế này:

  • Khung 1: có công mài sắt
  • Khung 2: có công mài sắt có ngày
  • Khung 3: sắt có ngày nên kim

Nối lại mà không nghĩ ngợi, bạn được “có công mài sắt có công mài sắt có ngày sắt có ngày nên kim” — mười lăm chữ cho tám chữ đã nói. Trên một bài nói dài một tiếng, chuyện đó làm độ dài phồng lên khoảng ba lần và khiến bản ghi vô dụng với việc đọc, tìm kiếm hay tóm tắt.

Cách sửa là chỉ giữ phần mà mỗi khung mới thêm vào. Với mỗi khung mới, công cụ tìm chuỗi từ dài nhất vừa là hậu tố của phần chữ đã có vừa là tiền tố của khung mới, rồi bỏ nó đi. Áp vào ví dụ trên, bạn thu lại đúng một lần “có công mài sắt có ngày nên kim”. Phép so sánh chỉ chạy trên một cửa sổ giới hạn các từ gần đây chứ không phải toàn bộ bản ghi, nhờ vậy vẫn nhanh với tệp ba tiếng và không xóa nhầm một câu được lặp lại hợp lệ hai mươi phút sau đó.

Ghép câu lại với nhau

Một dòng phụ đề được đo cho màn hình: khoảng bốn mươi ký tự, hai dòng một lần, ngắt ở chỗ chữ chạm mép. Câu văn thường trải qua ba bốn khung. Giữ mỗi khung một dòng thì bạn có một tài liệu về mặt kỹ thuật là bản ghi và về mặt thực tế là không đọc nổi.

Chế độ đoạn văn gom các khung lại và chỉ ngắt khi hai điều kiện gặp nhau: đã đủ chữ để thành một đoạn, và khung hiện tại kết thúc bằng dấu câu kết thúc câu. Nhờ vậy chỗ ngắt không bao giờ rơi vào giữa một ý. Một trần cứng vẫn ép ngắt khi cần, vì có người nói rất lâu mà không chấm câu, và một khối chữ liền mạch cũng là một kiểu không đọc nổi. Đổi người nói thì luôn mở đoạn mới — điều này quan trọng với phỏng vấn và tọa đàm.

Bốn định dạng phụ đề, cùng một cách chuyển sang văn bản

Định dạng được nhận ra từ chính nội dung tệp chứ không phải từ phần mở rộng, bởi tệp phụ đề bị đổi tên suốt, và chuyện một tệp .txt chứa dữ liệu SubRip là bình thường.

  • SubRip (.srt) — một số thứ tự, một khoảng mã thời gian dùng dấu phẩy cho phần thập phân, rồi đến chữ. Định dạng được sinh ra nhiều nhất và cũng đơn giản nhất.
  • WebVTT (.vtt) — chuẩn của trình duyệt. Dùng dấu chấm thay dấu phẩy cho phần thập phân, cộng thêm các khối NOTE, STYLEREGION tùy chọn vốn không phải lời nói và bị gỡ trước khi phân tích. VTT còn cho phép đánh dấu nội tuyến: <v Speaker> ghi ai đang nói, <c.classname> áp kiểu hiển thị, và các mốc thời gian trần bên trong một khung điều khiển kiểu tô chữ karaoke. Tất cả đều được bóc ra, còn thẻ giọng nói trở thành nhãn người nói.
  • YouTube (.sbv) — một cặp mã thời gian ngăn bằng dấu phẩy trên dòng riêng, rồi đến chữ. Không số thứ tự, không đánh dấu.
  • Advanced SubStation (.ass và .ssa) — một danh sách sự kiện có khai báo thứ tự cột. Bộ phân tích đọc đúng dòng Format: đó thay vì đoán vị trí, vì trường Text được xếp cuối cùng chính là để nó có thể chứa dấu phẩy. Các khối ghi đè trong ngoặc nhọn là chỉ thị định dạng và bị gỡ; ngắt dòng \N thành dấu cách. Cột Name, khi có dữ liệu, chính là người nói.

Người nói, tiếng động, và nên giữ lại gì

Việc gán người nói đến theo ba đường khác nhau tùy định dạng: một trường riêng trong ASS, một thẻ giọng nói trong VTT, hoặc quy ước trần trụi TÊN: ở đầu dòng trong SRT, vốn không có trường người nói nào cả. Cả ba đều được nhận ra và chuẩn hóa về cùng một dạng đầu ra. Heuristic cho trường hợp thứ ba được cố ý làm hẹp — một chuỗi chữ in hoa theo sau là dấu hai chấm — vì tiền tố chữ thường sẽ khớp với những câu bình thường có dấu hai chấm và băm nát bản ghi.

Các chỉ dẫn âm thanh trong ngoặc như [MUSIC], (laughter)[APPLAUSE] mặc định được giữ và có thể bỏ bằng một công tắc. Cái nào đúng thì tùy hoàn toàn vào việc bạn đang làm: với một kho lưu trữ tra cứu được hay một hồ sơ trợ năng, chúng là một phần nội dung; còn với việc đưa bài nói cho mô hình tóm tắt, chúng là nhiễu.

Ba kiểu kết quả

Các thiết lập sẵn bao trọn thứ người ta thực sự cần. Bản ghi sạch là những đoạn văn liền mạch không mã thời gian, để đọc, để trích dẫn hoặc để đưa cho mô hình. Có mốc thời gian giữ nguyên các đoạn nhưng đánh dấu thời điểm bắt đầu của từng đoạn, đúng thứ bạn cần khi bản ghi là phương tiện quay lại một khoảnh khắc trong video. Dòng phụ đề giữ mỗi khung một dòng kèm mã thời gian và không khử trùng lặp — gần với tệp gốc nhất, hữu ích khi bạn đang kiểm chính phần phụ đề chứ không phải đọc hết từ đầu đến cuối.

Cùng với kết quả, công cụ báo lại định dạng đã nhận ra, số khung, số chữ, tổng thời lượng được phủ và bao nhiêu chỗ lặp đã gỡ. Con số cuối cùng là con số thật thà: nếu nó lớn, nguồn là phụ đề tự động kiểu cuốn chiếu, và bạn thấy chính xác bao nhiêu phần của tệp gốc là lặp lại.

Không có gì rời khỏi trình duyệt

Tệp phụ đề không phải lúc nào cũng công khai. Bản ghi phỏng vấn, họp toàn công ty, phiên tòa, buổi khám bệnh và phim chưa phát hành đều sinh ra chúng. Việc phân tích chạy bằng JavaScript trong tab này, nên tệp được đọc tại chỗ và không bao giờ được tải lên. Đó cũng là lý do việc chuyển đổi diễn ra tức thì, và vì sao đổi một tùy chọn là kết quả vẽ lại ngay chứ không phải chờ thêm một vòng gọi máy chủ.