BookTranslator
BookTranslator

Cách tạo phụ đề song ngữ: Hai ngôn ngữ trong một tệp SRT hoặc VTT

Tạo tệp SRT hoặc VTT song ngữ dễ đọc: gộp theo thời gian, đưa hai ngôn ngữ vào một cue, chọn ngôn ngữ nào ở trên, và chạy công cụ kiểm tra miễn phí.

BookTranslator

BookTranslator Team

15 phút đọc

Để tạo phụ đề song ngữ, bạn cần một tệp phụ đề đã định thời gian, bản dịch của nó giữ nguyên thời gian, và một cue cho mỗi thời điểm chứa cả hai ngôn ngữ: dòng gốc trước, rồi đến dòng dịch, dưới cùng một mốc thời gian. Bất kỳ công cụ dịch nào tạo tệp song ngữ đều làm việc này giúp bạn, và công cụ gộp sẽ làm nếu bạn đã có hai tệp. SRT thông thường không cần cú pháp đặc biệt nào cho việc này.

Tạo tệp là phần dễ. Phần khó hơn là thời gian được viết cho một ngôn ngữ. Một cue vừa đủ hai dòng tiếng Anh giờ phải chứa bốn dòng, trong cùng vài giây, trên cùng khung hình. Vì vậy hướng dẫn này dành phần lớn thời gian cho những gì cần sửa sau khi gộp.

Chúng tôi đã viết một tệp kiểm tra 12 cue, tạo các phiên bản tiếng Tây Ban Nha, tiếng Trung và tiếng Ả Rập, và viết một công cụ kiểm tra miễn phí. Các tệp này được tạo từ mã viết phụ đề của chính BookTranslator, chạy cục bộ. Chúng tôi viết bản dịch bằng tay thay vì gọi mô hình, nên các bài kiểm tra này cho thấy điều gì xảy ra với tệp, không phải chất lượng bản dịch. README có thông tin chi tiết. Công cụ kiểm tra cần Python 3 và không cần gì khác.

Trả lời nhanh: Một cue song ngữ trông như thế nào

2
00:00:03,400 --> 00:00:06,600
There's another one at six,
but the station closes at midnight.
Hay otro a las seis,
pero la estación cierra a medianoche.

Đó là SRT hợp lệ. Mỗi cue giữ số thứ tự và mốc thời gian, và mọi dòng văn bản bên dưới mốc thời gian đều xuất hiện cùng lúc trên màn hình. WebVTT hoạt động theo cùng cách.

Chọn thiết lập trước

Bạn muốnSử dụngLý do
Xem trên hầu hết trình phát, hoặc gửi một tệp cho người khácMột SRT đã gộpĐây là một tệp phụ đề thông thường, không cần tính năng nào của trình phát
Xem trên máy tính của bạn với quyền kiểm soát từng ngôn ngữHai tệp riêng biệt trong trình phát hỗ trợ hai trackMỗi ngôn ngữ giữ thời gian riêng và có thể di chuyển hoặc tắt
Hiển thị các ngôn ngữ với kích thước khác nhau trên trang webMột VTT với class cho mỗi ngôn ngữWebVTT có hỗ trợ tạo kiểu; SRT không có cách chuẩn để làm việc này
Xuất bản video trông giống nhau ở mọi nơiPhụ đề gắn cứngVăn bản trở thành một phần của hình ảnh, và người xem không thể tắt

Đối với hai track, mpv có tùy chọn --secondary-sid. Hướng dẫn của nó nói rằng track thứ hai mặc định được vẽ ở đầu màn hình, giúp tách biệt các ngôn ngữ. Chúng tôi chưa tự kiểm tra mpv.

Để ghi cứng phụ đề, bộ lọc subtitles của FFmpeg cần bản dựng có libass. Bản FFmpeg 9.0.1 chúng tôi cài cho thử nghiệm này không có libass, vì vậy hãy chạy ffmpeg -filters | grep subtitles trước khi lên kế hoạch dựa vào nó. Chúng tôi chưa thử nghiệm ghi cứng.

Bước 1: Đưa hai ngôn ngữ vào một tệp

Nếu bạn có một tệp, hãy dịch nó bằng công cụ tạo ra tệp song ngữ. BookTranslator làm điều này cho mọi tác vụ SRT và VTT: bạn nhận được một tệp đã dịch và một tệp song ngữ có cùng mốc thời gian, và bạn có thể bắt đầu tại công cụ dịch phụ đề. Nếu bạn cần chọn công cụ trước, hãy xem so sánh phần mềm phụ đề của chúng tôi.

Nếu bạn có hai tệp, hãy ghép chúng theo thời gian, không theo số thứ tự phụ đề. Đây là lúc việc hợp nhất dễ sai, vì hai bản của cùng một video hiếm khi chia dòng giống nhau. Bản tiếng Tây Ban Nha thứ hai của chúng tôi chia đôi hai phụ đề dài và bỏ sót hiệu ứng âm thanh, năm và nhạc.

python3 check_bilingual_subs.py merge sample-source.srt sample-es-own-timing.srt -o merged.srt

Ghép theo số thứ tự phụ đề (tùy chọn --index của script) đã ghép sai 10 trong 12 phụ đề, bắt đầu từ phụ đề 2, nơi một nửa phần tiếng Tây Ban Nha bị mất. Đến phụ đề 3, bản dịch thuộc về một dòng khác:

3
00:00:06,800 --> 00:00:08,000
So where do we wait?
pero la estación cierra a medianoche.

Ghép theo thời gian đã cho bản dịch đúng dưới 9 phụ đề, để nguyên 3 phụ đề không có tiếng Tây Ban Nha và báo cáo dòng tiếng Tây Ban Nha không khớp với gì, để bạn có thể đặt thủ công. Script gán một phụ đề của bản thứ hai cho phụ đề của bản thứ nhất mà nó chồng lấn nhiều nhất, miễn là phần chồng lấn đó chiếm ít nhất một nửa độ dài của nó. Các công cụ như submerger cũng hợp nhất tệp; chúng tôi chưa thử nghiệm chúng. Dù bạn dùng gì, hãy kiểm tra nhanh các phụ đề sau lần chia đầu tiên.

Bước 2: Kiểm tra tệp

python3 check_bilingual_subs.py check sample-source.srt sample-es-bilingual.srt --max-target-cps 17

Nó so sánh tệp song ngữ với bản gốc và giả định các dòng gốc đứng trước, vì vậy hãy chạy nó trước khi bạn hoán đổi thứ tự. Nó cảnh báo bạn nếu các dòng trên không khớp với bản gốc. Đây là những gì nó tìm thấy trong tệp tiếng Tây Ban Nha:

Phụ đềGiâySố dòngKý tự/giây bản gốcKý tự/giây tiếng Tây Ban NhaVấn đề
23.2419.417.8Bốn dòng, tiếng Tây Ban Nha quá nhanh
52.726.77.0' trong văn bản
71.024.04.0Văn bản trùng lặp hai lần
81.821.71.7Văn bản trùng lặp hai lần
91.2420.822.5Bốn dòng, cả hai ngôn ngữ đều quá nhanh
103.6218.319.4Cả hai dòng đều trên 42 ký tự, tiếng Tây Ban Nha quá nhanh

Phụ đề 6 và 12 cũng trả về bốn dòng. Bốn phụ đề còn lại đều ổn.

Giới hạn tốc độ và độ dài dòng lấy từ Netflix, vì các con số của họ được công khai và cụ thể, và chúng khác nhau theo ngôn ngữ. Hướng dẫn tiếng Anh của họ cho phép 42 ký tự mỗi dòng, hai dòng và tối đa 20 ký tự mỗi giây cho chương trình dành cho người lớn. Hướng dẫn tiếng Tây Ban Nha Mỹ Latinh của họ cho phép 17 ký tự mỗi giây cho phụ đề dịch, và Hướng dẫn tiếng Trung Giản thể của họ cho phép 16 ký tự mỗi dòng và 9 ký tự mỗi giây. Vì vậy, hãy dùng --max-target-line 16 --max-target-cps 9 cho tiếng Trung. Những hướng dẫn đó chỉ áp dụng cho một ngôn ngữ tại một thời điểm, với tối đa hai dòng. Chúng tôi không biết tiêu chuẩn tương đương nào cho hai ngôn ngữ trong một phụ đề, vì vậy mặc định của công cụ kiểm tra là ba dòng trên màn hình, và mọi thứ trong phần tiếp theo, là đánh giá của chúng tôi.

Công cụ kiểm tra cũng in ra một con số tổng hợp, đạt 43,3 ký tự mỗi giây ở phụ đề 9. Đừng cố sửa con số đó. Không ai đọc từng ký tự của cả hai ngôn ngữ với sự tập trung đầy đủ. Hãy coi nó như một chỉ dấu cho những phụ đề đáng để xem xét.

Bước 3: Sửa các phụ đề bốn dòng

Đây là cái giá của bốn dòng. Trong trình hiển thị phụ đề tích hợp của Chromium ở kích thước 1280x720, phụ đề tiếng Anh hai dòng chiếm 10,6% chiều cao khung hình, và cùng phụ đề đó khi thêm tiếng Tây Ban Nha chiếm 21,9%.

Phụ đề tiếng Anh hai dòng ở cuối khung thử nghiệm 1280 x 720 trơn, theo kiểu phụ đề mặc định của Chromium.

Cùng phụ đề đó với hai dòng tiếng Tây Ban Nha được thêm vào, chiếm khoảng một phần năm chiều cao khung hình.

Hãy xử lý các phụ đề bị đánh dấu theo thứ tự sau:

  1. Giữ nguyên ngôn ngữ gốc từng chữ một. Nếu người xem đang nghe bản gốc và theo dõi bằng văn bản, bản gốc bị rút gọn sẽ không còn khớp với những gì họ nghe.
  2. Cắt ngôn ngữ kia xuống một dòng. Phụ đề 2 của chúng tôi giảm từ 17,8 ký tự mỗi giây xuống 13,1 khi tiếng Tây Ban Nha trở thành A las seis hay otro; cierran a medianoche. Như vậy trên màn hình còn ba dòng thay vì bốn, và vẫn giữ được cả hai thông tin.
  3. Chỉ thêm thời gian nếu có khoảng trống. Kiểm tra thời điểm bắt đầu của phụ đề tiếp theo trước khi dời thời điểm kết thúc. Phụ đề 2 còn dư 0,2 giây, không đáng để bỏ công.
  4. Sau đó để yên phần còn lại. Phụ đề 9 là You knew? / Since March. trong 1,2 giây. Nó vi phạm giới hạn tốc độ và số dòng, nhưng chúng tôi sẽ để nguyên: khoảng trống 0,2 giây sau đó quá nhỏ để có ích, và người xem có thể nắm được hai câu trả lời ngắn trong nháy mắt. Không phải mọi cảnh báo đều là lỗi.

Với những dòng đơn dài như phụ đề 10, chỉ tách mỗi ngôn ngữ thành hai dòng nếu phụ đề có đủ thời gian. Nếu không, hãy rút gọn bản dịch.

Nếu bạn kiểm soát được trình hiển thị, bạn cũng có thể làm cho một ngôn ngữ dễ nhận ra hơn. Chạy to-vtt để gán cho mỗi ngôn ngữ một lớp riêng. Tệp kết quả được hiển thị trong Chromium với tiếng Anh ở cỡ 80% và màu xám nhạt. Cách này hầu như không tiết kiệm không gian (21,1% chiều cao khung hình thay vì 21,9%), nên không thể thay thế việc cắt bớt một dòng. Chúng tôi chưa kiểm tra liệu nó có giúp người đọc dễ đọc hơn không.

Phụ đề bốn dòng với các dòng tiếng Anh nhỏ hơn và xám hơn so với các dòng tiếng Tây Ban Nha.

Cách này dùng lớp phụ đề và bộ chọn ::cue() của WebVTT. Nó dành cho trình duyệt. Các trình phát khác có thể bỏ qua kiểu dáng hoặc tệp VTT.

Bước 4: Quyết định ngôn ngữ nào đặt lên trên

Có một số nghiên cứu về vấn đề này. Trong một nghiên cứu theo dõi mắt năm 2026 trên 42 người bản ngữ tiếng Tây Ban Nha học tiếng Anh như ngôn ngữ thứ hai, người xem dành nhiều thời gian hơn cho dòng trên cùng bất kể đó là ngôn ngữ nào, và họ dành nhiều thời gian hơn cho dòng khớp với âm thanh. Điểm hiểu bài cao hơn khi tiếng Tây Ban Nha, ngôn ngữ mẹ đẻ của họ, ở trên. Một nghiên cứu trước đó trên 112 người Trung Quốc học tiếng Anh cho thấy phụ đề song ngữ giúp hiểu bài nhiều như phụ đề chỉ bằng tiếng mẹ đẻ của họ, và cả hai đều tốt hơn phụ đề tiếng Anh hoặc không có phụ đề.

Đây là những nghiên cứu đơn lẻ trên các nhóm người xem cụ thể, nên hãy coi chúng là điểm khởi đầu:

  • Theo dõi một bộ phim hoặc bài giảng vì nội dung: đặt ngôn ngữ bạn đọc tốt nhất lên trên.
  • Luyện tập một ngôn ngữ bạn đang học: đặt ngôn ngữ đó lên trên và chấp nhận rằng bạn có thể hiểu ít hơn một chút. Nghiên cứu năm 2026 đo mức độ hiểu bài, không phải việc học, nên đây là đánh giá của chúng tôi.
  • Xem lại bản dịch: thứ tự ít quan trọng, nên cứ để nguyên.

Tệp song ngữ của BookTranslator luôn đặt bản gốc lên trên. Để hoán đổi:

python3 check_bilingual_subs.py flip sample-source.srt sample-es-bilingual.srt -o translation-on-top.srt

Những gì trả về bị sai, và cách khắc phục

Những lỗi này phát sinh khi chạy mã phụ đề của BookTranslator trên các tệp thử nghiệm của chúng tôi, và công cụ kiểm tra đánh dấu hai lỗi đầu tiên.

  • Văn bản không cần dịch xuất hiện hai lần. 1984 và ♪ ♪ được bỏ qua vì không có từ nào để dịch, nên tệp song ngữ in mỗi cái hai lần. Hãy xóa một dòng bằng tay.
  • &apos; có thể xuất hiện trong văn bản. Tính đến tháng 11 năm 2026, một phụ đề có thẻ định dạng và dấu nháy đơn có thể trả về với dấu nháy đơn bị thoát. Dòng gốc của chúng tôi trở thành <i>Don&apos;t answer that.</i> trong tệp song ngữ, và trong một thử nghiệm VTT riêng, một bản dịch tiếng Pháp trở thành <i>Je n&apos;attendrai pas.</i> trong tệp đã dịch. Chromium đã giải mã nó trong VTT và hiển thị dấu nháy đơn bình thường. Nhưng khi chúng tôi chuyển đổi SRT bằng FFmpeg, &apos; vẫn còn trong văn bản đầu ra, nên hãy giả định một số trình phát sẽ hiển thị nó nguyên văn. Hãy thay &apos; bằng ' trước khi dùng tệp. Chúng tôi đã báo cáo vấn đề này với các kỹ sư của mình.
  • Các thiết lập phụ đề VTT bị loại bỏ. Các thiết lập vị trí như line:0 align:start position:10% và các khối NOTE đã biến mất khỏi đầu ra thử nghiệm VTT của chúng tôi, và nhãn người nói xuất hiện trên cả hai dòng. Nếu VTT của bạn phụ thuộc vào vị trí, hãy thêm lại sau khi dịch.
  • Văn bản từ phải sang trái được đánh dấu theo từng dòng. Các dòng tiếng Ả Rập trả về được bao bọc trong dấu hướng Unicode. Chúng tôi chỉ xem xét một cue, trong bản sao VTT của tệp trên Chromium, và nó hiển thị từ phải sang trái. Các dòng trộn tiếng Ả Rập với số, như cue 10 của chúng tôi, là trường hợp khó hơn và chúng tôi chưa xem những dòng đó, vì vậy hãy kiểm tra trong trình phát thực tế của bạn. SRT không có cách nào khác để đặt hướng. Hướng dẫn từ phải sang trái của chúng tôi đề cập đến các vấn đề rộng hơn đối với sách.

Nếu nguồn của bạn là ASS hoặc SSA, đầu ra song ngữ của BookTranslator thêm dòng đã dịch dưới dạng sự kiện thứ hai với cùng kiểu và thời gian, đây là một cấu trúc khác. Hướng dẫn phụ đề ASS của chúng tôi giải thích cách các tệp đó được cấu thành. Nếu các ký tự có dấu hiển thị bị lỗi trong một trong hai ngôn ngữ, vấn đề thường là mã hóa của tệp, mà hướng dẫn mã hóa phụ đề của chúng tôi đề cập.

Trước khi chia sẻ tệp

  1. Chạy trình kiểm tra và xem qua từng cue bị đánh dấu.
  2. Tìm &apos;, &amp;, và &quot; và thay thế chúng.
  3. Xóa các dòng trùng lặp về hiệu ứng âm thanh, số và nhạc.
  4. Xem vài phút bận rộn nhất trong trình phát mà người xem của bạn sẽ dùng, trên kích thước màn hình mà họ sẽ dùng.
  5. Kiểm tra xem các dòng dưới cùng có che văn bản trên màn hình trong video không.
  6. Đọc bản dịch trong ngữ cảnh. Quy trình phụ đề AI của chúng tôi đề cập cách xem xét nó.

Bạn đã có sẵn SRT hoặc VTT? Tải lên trình dịch phụ đề và xem giá trước khi thanh toán. Khi hoàn tất, hãy tải xuống tệp song ngữ cùng với tệp đã dịch. Sau đó chạy trình kiểm tra trên đó, vì số dòng trong một công việc thực tế phụ thuộc vào cách mô hình chia mỗi cue đã dịch.

Bài viết liên quan