BookTranslator
BookTranslator

Jak tworzyć dwujęzyczne napisy: dwa języki w jednym pliku SRT lub VTT

Stwórz dwujęzyczny plik SRT lub VTT, który ludzie mogą czytać: scalaj według czasu, dopasuj dwa języki do jednego napisu, wybierz, który ma być na górze, i uruchom darmowy walidator.

BookTranslator

BookTranslator Team

10 min czytania

Aby stworzyć dwujęzyczne napisy, potrzebujesz jednego pliku napisów z znacznikami czasu, jego tłumaczenia z zachowaniem tych samych znaczników czasu oraz jednego napisu dla każdego momentu, który zawiera oba języki: najpierw wiersze oryginału, potem wiersze tłumaczenia, pod jednym znacznikiem czasu. Każdy tłumacz, który zapisuje dwujęzyczny plik, robi to za Ciebie, a narzędzie do scalania zrobi to, jeśli masz już dwa pliki. Zwykły SRT nie wymaga do tego specjalnej składni.

Stworzenie pliku to łatwa część. Trudniejsze jest to, że znaczniki czasu zostały napisane dla jednego języka. Napis, który mieścił dwie linijki angielskiego, musi teraz pomieścić cztery linijki, w tych samych kilku sekundach, na tym samym obrazie. Dlatego ten poradnik poświęca najwięcej czasu na to, co poprawić po scaleniu.

Napisaliśmy plik testowy z 12 napisami, stworzyliśmy wersje hiszpańską, chińską i arabską oraz napisaliśmy darmowy walidator. Pliki pochodzą z własnego kodu BookTranslatora do zapisywania napisów, uruchomionego lokalnie. Tłumaczenia napisaliśmy ręcznie, zamiast wywoływać model, więc te testy pokazują, co dzieje się z plikiem, a nie jak dobre jest tłumaczenie. Szczegóły znajdziesz w README. Walidator wymaga tylko Pythona 3.

Krótka odpowiedź: jak wygląda dwujęzyczny napis

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.

To jest poprawny SRT. Każdy napis zachowuje swój numer i znacznik czasu, a każda linia tekstu pod znacznikiem czasu pojawia się na ekranie razem. WebVTT działa w ten sam sposób.

Najpierw wybierz konfigurację

ChceszUżyjDlaczego
Oglądać w niemal dowolnym odtwarzaczu lub wysłać komuś jeden plikJeden scalony SRTTo zwykły plik napisów, niewymagający żadnej funkcji odtwarzacza
Oglądać na własnym komputerze z kontrolą nad każdym językiemDwa osobne pliki w odtwarzaczu obsługującym dwie ścieżkiKażdy język zachowuje własne znaczniki czasu i można go przesuwać lub wyłączać
Pokazywać języki w różnych rozmiarach na stronie internetowejJeden VTT z klasą dla każdego językaWebVTT ma style; SRT nie ma standardowego sposobu, aby to zrobić
Opublikować film, który wygląda tak samo wszędzieNapisy wypalone w obrazieTekst staje się częścią obrazu, a widzowie nie mogą go wyłączyć

Dla dwóch ścieżek mpv ma opcję --secondary-sid. W jego instrukcji jest napisane, że druga ścieżka jest domyślnie rysowana na górze ekranu, co oddziela języki. Nie testowaliśmy mpv osobiście.

Aby wypalić napisy, filtr subtitles FFmpeg wymaga kompilacji z libass. FFmpeg 9.0.1, który zainstalowaliśmy do tego testu, nie miał go, więc przed planowaniem użyj ffmpeg -filters | grep subtitles. Nie testowaliśmy wypalania.

Krok 1: Umieść dwa języki w jednym pliku

Jeśli masz jeden plik, przetłumacz go narzędziem, które zapisuje plik dwujęzyczny. BookTranslator robi to dla każdego zadania SRT i VTT: otrzymujesz przetłumaczony plik oraz plik dwujęzyczny z tymi samymi znacznikami czasu, a zacząć możesz od tłumacza napisów. Jeśli najpierw musisz wybrać narzędzie, zobacz nasze porównanie oprogramowania do napisów.

Jeśli masz dwa pliki, połącz je według czasu, a nie numeru napisu. Tu właśnie scalanie się psuje, ponieważ dwie ścieżki tego samego wideo rzadko dzielą wersy w ten sam sposób. Nasza druga ścieżka hiszpańska dzieli dwa długie napisy na pół i pomija efekt dźwiękowy, rok oraz muzykę.

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

Łączenie według numeru napisu (opcja --index skryptu) pomyliło 10 z 12 napisów, począwszy od napisu 2, gdzie zniknęła połowa hiszpańskiego. W napisie 3 tłumaczenie dotyczyło innej linii:

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

Łączenie według czasu dało właściwe tłumaczenie w 9 napisach, pozostawiło 3 napisy bez hiszpańskiego w spokoju i zgłosiło jedną hiszpańską linię, która do niczego nie pasowała, więc możesz umieścić ją ręcznie. Skrypt przypisuje napis z drugiej ścieżki do napisu z pierwszej ścieżki, z którym ma największe nakładanie się, o ile pokrywa to co najmniej połowę jego długości. Narzędzia takie jak submerger również scalają pliki; nie testowaliśmy ich. Cokolwiek użyjesz, sprawdź wyrywkowo napisy po pierwszym podziale.

Krok 2: Sprawdź plik

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

Porównuje plik dwujęzyczny ze źródłem i zakłada, że oryginalne linie są pierwsze, więc uruchom go przed zamianą kolejności. Ostrzega, jeśli górne linie nie zgadzają się ze źródłem. Oto co znalazł w pliku hiszpańskim:

NapisSekundyLinieOryginalne znaki/sHiszpańskie znaki/sProblem
23.2419.417.8Cztery linie, hiszpański zbyt szybki
52.726.77.0' w tekście
71.024.04.0Ten sam tekst dwa razy
81.821.71.7Ten sam tekst dwa razy
91.2420.822.5Cztery linie, oba języki zbyt szybkie
103.6218.319.4Obie linie ponad 42 znaki, hiszpański zbyt szybki

Napisy 6 i 12 również miały cztery linie. Pozostałe cztery napisy były w porządku.

Limity szybkości i długości linii pochodzą od Netflix, ponieważ jego liczby są publiczne i konkretne, i różnią się w zależności od języka. Jego przewodnik dla angielskiego pozwala na 42 znaki w linii, dwie linie i do 20 znaków na sekundę dla programów dla dorosłych. Jego przewodnik dla hiszpańskiego latynoamerykańskiego pozwala na 17 znaków na sekundę dla tłumaczonych napisów, a jego przewodnik dla chińskiego uproszczonego pozwala na 16 znaków w linii i 9 na sekundę. Więc dla chińskiego użyj --max-target-line 16 --max-target-cps 9. Te przewodniki dotyczą jednego języka naraz, z co najwyżej dwiema liniami. Nie znamy równoważnego standardu dla dwóch języków w jednym napisie, więc domyślne ustawienie sprawdzania trzech linii na ekranie i wszystko w następnej sekcji to nasza ocena.

Sprawdzanie drukuje również połączoną liczbę, która osiągnęła 43,3 znaków na sekundę w napisie 9. Nie próbuj poprawiać tej liczby. Nikt nie czyta każdego znaku obu języków z pełną uwagą. Traktuj ją jako wskazówkę do napisów wartych obejrzenia.

Krok 3: Popraw napisy z czterema liniami

Oto ile kosztują cztery linijki. W wbudowanym wyświetlaniu napisów Chromium przy rozdzielczości 1280x720 dwulinijkowa angielska kwestia zajmowała 10,6% wysokości kadru, a ta sama kwestia z dodanym hiszpańskim – 21,9%.

Dwulinijkowa angielska kwestia na dole zwykłego kadru testowego 1280 na 720, w domyślnym stylu napisów Chromium.

Ta sama kwestia z dodanymi dwiema linijkami hiszpańskiego, zajmująca około jednej piątej wysokości kadru.

Przejrzyj oznaczone kwestie w tej kolejności:

  1. Zachowaj język audio słowo w słowo. Jeśli ludzie słuchają oryginału i śledzą tekst, skrócony oryginał przestaje odpowiadać temu, co słyszą.
  2. Skróć drugi język do jednej linijki. Nasza kwestia 2 przechodzi z 17,8 znaków na sekundę na 13,1, gdy hiszpański zmienia się w A las seis hay otro; cierran a medianoche. To trzy linijki na ekranie zamiast czterech, a oba fakty zostają zachowane.
  3. Dodawaj czasu tylko wtedy, gdy jest luka. Sprawdź początek następnej kwestii, zanim przesuniesz czas zakończenia. Kwestia 2 ma 0,2 sekundy zapasu, co nie jest warte zachodu.
  4. Potem zostaw resztę w spokoju. Kwestia 9 to You knew? / Since March. w 1,2 sekundy. Przekracza limity szybkości i długości linii, ale zostawilibyśmy ją: 0,2-sekundowa przerwa po niej jest zbyt mała, by pomóc, a widz prawdopodobnie jest w stanie ogarnąć dwie krótkie odpowiedzi jednym spojrzeniem. Nie każde oznaczenie to błąd.

W przypadku długich pojedynczych linii, jak kwestia 10, dziel każdy język na dwie linijki tylko wtedy, gdy kwestia ma na to czas. W przeciwnym razie skróć tłumaczenie.

Jeśli masz kontrolę nad wyświetlaniem, możesz też ułatwić rozróżnienie jednego języka. Uruchom to-vtt, aby nadać każdemu językowi własną klasę. Wynikowy plik wyrenderowany w Chromium z angielskim w rozmiarze 80% i w jasnoszarym kolorze. Oszczędza to ledwie trochę miejsca (21,1% wysokości kadru zamiast 21,9%), więc nie zastępuje skrócenia linijki. Nie testowaliśmy, czy pomaga to ludziom w czytaniu.

Czterolinijkowa kwestia z angielskimi linijkami mniejszymi i bardziej szarymi niż hiszpańskie.

Wykorzystuje to klasy kwestii WebVTT i selektor ::cue(). Jest przeznaczone dla przeglądarek. Inne odtwarzacze mogą ignorować style lub plik VTT.

Krok 4: Zdecyduj, który język ma być na górze

Istnieją pewne badania na ten temat. W badaniu eye-trackingowym z 2026 roku z udziałem 42 rodzimych użytkowników hiszpańskiego z angielskim jako drugim językiem widzowie spędzali więcej czasu na górnej linii, niezależnie od tego, w jakim była języku, i spędzali więcej czasu na linii zgodnej z audio. Wyniki rozumienia były wyższe, gdy hiszpański, ich pierwszy język, był na górze. Wcześniejsze badanie z 112 chińskimi uczniami angielskiego wykazało, że napisy dwujęzyczne pomagały w rozumieniu tak samo jak napisy tylko w ich pierwszym języku, a oba warianty były lepsze od angielskich napisów lub braku napisów.

To pojedyncze badania konkretnych grup widzów, więc traktuj je jako punkt wyjścia:

  • Śledzenie filmu lub wykładu dla treści: umieść na górze język, który czytasz najlepiej.
  • Ćwiczenie języka, którego się uczysz: umieść ten język na górze i zaakceptuj, że możesz rozumieć nieco mniej. Badanie z 2026 roku mierzyło rozumienie, a nie uczenie się, więc to jest nasza ocena.
  • Sprawdzanie tłumaczenia: kolejność ma niewielkie znaczenie, więc zostaw ją.

Plik dwujęzyczny BookTranslatora zawsze umieszcza oryginał na górze. Aby to zamienić:

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

Co wraca źle i jak to naprawić

Te przypadki pochodzą z uruchomienia kodu napisów BookTranslatora na naszych plikach testowych, a pierwsze dwa są oznaczane przez checker.

  • Tekst, który nie wymaga tłumaczenia, pojawia się dwa razy. 1984 i ♪ ♪ są pomijane jako niemające słów do przetłumaczenia, więc plik dwujęzyczny drukuje każdy z nich dwukrotnie. Usuń jedną linijkę ręcznie.
  • &apos; może pojawić się w tekście. Od listopada 2026 roku kwestia ze znacznikami formatowania i apostrofem może wrócić z zakodowanym apostrofem. Nasza oryginalna linia stała się <i>Don&apos;t answer that.</i> w pliku dwujęzycznym, a w osobnym teście VTT francuskie tłumaczenie stało się <i>Je n&apos;attendrai pas.</i> również w pliku przetłumaczonym. Chromium zdekodowało to w VTT i pokazało normalny apostrof. Ale kiedy przekonwertowaliśmy SRT za pomocą FFmpeg, &apos; pozostało w tekście wyjściowym, więc zakładaj, że niektóre odtwarzacze pokażą je dosłownie. Zastąp &apos; znakiem ' przed użyciem pliku. Zgłosiliśmy to naszym inżynierom.
  • Ustawienia kwestii VTT są usuwane. Ustawienia pozycji, takie jak line:0 align:start position:10%, oraz bloki NOTE zniknęły z naszego wyjściowego pliku testowego VTT, a etykiety mówców pojawiły się w obu liniach. Jeśli Twój VTT opiera się na rozmieszczeniu, dodaj je ponownie po tłumaczeniu.
  • Tekst pisany od prawej do lewej jest oznaczany wiersz po wierszu. Wiersze arabskie wracały opakowane w unicode’owe znaczniki kierunku. Przyjrzeliśmy się tylko jednej napisowi w kopii pliku VTT w Chromium i wyświetlał się od prawej do lewej. Wiersze mieszające arabski z cyframi, jak nasz napis 10, są trudniejszym przypadkiem i nie oglądaliśmy ich, więc przetestuj w swoim odtwarzaczu. SRT nie ma innego sposobu ustawienia kierunku. Nasz przewodnik po tłumaczeniu książek od prawej do lewej omawia szersze zagadnienia dotyczące książek.

Jeśli twoim źródłem jest ASS lub SSA, dwujęzyczny wynik BookTranslatora dodaje przetłumaczony wiersz jako drugie zdarzenie z tym samym stylem i czasem, co jest inną strukturą. Nasz przewodnik po napisach ASS wyjaśnia, jak zbudowane są takie pliki. Jeśli znaki diakrytyczne wyglądają na uszkodzone w którymkolwiek języku, problemem jest zwykle kodowanie pliku, które omawia nasz przewodnik po kodowaniu napisów.

Zanim udostępnisz plik

  1. Uruchom sprawdzanie i przejrzyj każdy oznaczony napis.
  2. Znajdź &apos;, &amp; i &quot; i zastąp je.
  3. Usuń zduplikowane wiersze dotyczące efektów dźwiękowych, liczb i muzyki.
  4. Obejrzyj kilka najgorętszych minut w odtwarzaczu, którego będą używać widzowie, na rozmiarze ekranu, którego będą używać.
  5. Sprawdź, czy dolne wiersze nie zasłaniają tekstu na ekranie wideo.
  6. Przeczytaj tłumaczenie w kontekście. Nasz przepływ pracy z napisami AI omawia, jak je sprawdzić.

Masz gotowy plik SRT lub VTT? Prześlij go do tłumacza napisów i sprawdź cenę przed zapłatą. Po zakończeniu pobierz plik dwujęzyczny wraz z przetłumaczonym. Następnie uruchom na nim sprawdzanie, ponieważ liczba wierszy w rzeczywistym zadaniu zależy od tego, jak model dzieli każdy przetłumaczony napis.

Powiązane wpisy

Jak tworzyć dwujęzyczne napisy: dwa języki w jednym pliku SRT lub VTT