Jak przetłumaczyć plik SRT bez psucia czasowania
Przetłumacz plik SRT bez psucia czasowania: dlaczego zwykłe tłumaczenie niszczy znaczniki czasu, cztery metody, które tego nie robią, i test na zepsuty plik.
Żeby przetłumaczyć plik SRT i zachować czasowanie, użyj narzędzia, które parsuje format napisów, zamiast takiego, które traktuje plik jak zwykły tekst. Narzędzie świadome formatu czyta numer bloku, wiersz z przedziałem czasu i tekst jako trzy osobne rzeczy, tłumaczy tylko tę trzecią, a pozostałe dwie zapisuje dokładnie tak, jak były.
Każdy zepsuty przetłumaczony plik z napisami sprowadza się do tego samego błędu: cały plik trafił do ogólnego tłumacza, który nie miał żadnego powodu wiedzieć, które linie są nośne dla struktury.
Dlaczego tłumaczenie SRT psuje czasowanie?
Blok SRT składa się z czterech części, z których tylko jedna to język:
2
00:00:04,120 --> 00:00:06,480
The timings live on the line above.
A translator must never touch it.
Numer identyfikuje linijkę. Wiersz z przedziałem czasu, z milisekundami oddzielonymi przecinkiem oraz ze strzałką -->, to czasowanie. Tekst to napis. Pusta linia to separator, który mówi parserowi, że blok się skończył.
Ogólny tłumacz widzi jeden dokument zawierający wszystkie cztery elementy. Nie ma żadnego powodu, żeby traktować 00:00:04,120 --> 00:00:06,480 jako składnię, więc zwykle psują się jednocześnie trzy rzeczy:
- Linijki się łączą. Dla tłumacza, który traktuje plik jak prozę, pusta linia między blokami to tylko biały znak, a jeśli nie przetrwa ona przejścia tam i z powrotem, dwie linijki zlewają się w jeden akapit. Wszystko od tego miejsca dalej jest już rozjechane względem dźwięku.
- Bloki są przenumerowywane albo zmieniają kolejność. Zmiana układu akapitów miesza numery porządkowe, a część parserów od razu odrzuca taki plik, podczas gdy inne po cichu przenumerowują go i przesuwają linijki.
- Znaczniki czasu zostają przeformatowane. Dodana spacja wokół strzałki, przecinek zamieniony na kropkę, inaczej dopełnione pole milisekund — każda z tych rzeczy wystarczy, żeby linia przestała dać się sparsować.
Jest jeszcze czwarta awaria, która nie ma nic wspólnego z tłumaczem. Kodowanie. Plik ze znakami diakrytycznymi albo pismem niełacińskim, zapisany jako Latin-1 albo Windows-1254 zamiast jako UTF-8, w połowie odtwarzaczy, które go otwierają, wyświetla się jako krzaki. Zapisuj każdy plik z napisami jako UTF-8, a ten problem znika na stałe.
Charakterystyczne jest to, że zepsuty plik przy pobieżnym spojrzeniu często wciąż wygląda dobrze. Tekst jest we właściwym języku, znaczniki czasu wciąż tam są i nic nie krzyczy, że coś jest nie tak. Zawodzi dopiero, kiedy odtwarzacz próbuje go sparsować, albo, co gorsza, parsuje go i odtwarza z przesunięciem o dwie sekundy.
Cztery sposoby na przetłumaczenie pliku SRT
Od najszybszego do najbardziej kontrolowanego:
- Subtitle Edit — darmowy, open source, tłumaczenie wbudowane, działa lokalnie.
- Tłumacz online świadomy formatu — wgrywasz plik, dostajesz plik z powrotem.
- LLM ze ścisłym promptem — najlepsza kontrola terminologii, wymaga weryfikacji.
- Aplikacja desktopowa, która traktuje tłumaczenie jak warstwę — kilka języków z jednej osi czasu.
Wszystkie cztery, użyte poprawnie, zachowują znaczniki czasu nietknięte. Różnią się kosztem, prywatnością i tym, ile języków jednocześnie produkujesz.
Metoda 1: Subtitle Edit
Darmowa odpowiedź i ta, od której większość ludzi powinna zacząć.
Subtitle Edit jest open source, działa na Windows, macOS i Linux, i ma funkcję Auto-Translate, która podmienia tekst w pamięci i z definicji nie rusza struktury bloków. Oferuje kilka silników — DeepL i Google, jeśli masz klucze, LibreTranslate, jeśli hostujesz go sam, oraz modele lokalne przez Ollama, llama.cpp albo dowolny endpoint kompatybilny z OpenAI.
- Otwórz plik
.srtw Subtitle Edit. - Wybierz Auto-Translate i wskaż silnik oraz język docelowy.
- Sprawdź wynik w widoku listy, gdzie oryginał i tłumaczenie stoją obok siebie.
- Zapisz jako nowy plik, UTF-8.
Warto znać ścieżkę z modelem lokalnym: nie potrzebuje klucza API i nic nie opuszcza komputera, co czyni ją jedyną darmową metodą na tej liście, która jest też prywatna. Kompromis jest taki, że mały model lokalny tłumaczy zauważalnie gorzej niż DeepL w parach europejskich, więc będziesz więcej poprawiać ręcznie.
Metoda 2: Tłumacz online świadomy formatu
Wgrywasz plik, wybierasz język, pobierasz wynik. DeepL przyjmuje .srt jako typ dokumentu i zwraca przetłumaczony .srt z nienaruszoną strukturą; ile dokumentów możesz przepuścić, zależy od twojego planu. Kilka dedykowanych stron do tłumaczenia napisów robi to samo.
To najszybsza droga dla jednego pliku w jednym języku, a jakość na głównych parach europejskich jest najlepsza z tych czterech metod, i to bez żadnej konfiguracji.
Zanim z tego skorzystasz, warto znać dwie rzeczy. Plik jest wysyłany na serwer, więc to zła metoda dla czegokolwiek poufnego — nieopublikowanego cięcia montażowego, materiałów klienta, nagranego wewnętrznego spotkania. A tłumacz dokumentów nie daje żadnej kontroli nad terminologią: nazwy produktów, imiona bohaterów i żargon zostają przetłumaczone razem z resztą, a dokładnie tego nie chcesz przy nazwach własnych.
Metoda 3: LLM ze ścisłym promptem
Daje to najlepszą kontrolę terminologii z tych czterech metod, bo możesz powiedzieć modelowi, czego nie tłumaczyć. To też metoda, która najłatwiej po cichu zepsuje plik, więc krok weryfikacji nie jest opcjonalny.
Prompt, który działa:
Translate the subtitle text below from English into German.
Rules:
- Output exactly the same number of subtitle blocks as the input.
- Copy every block number and every timecode line unchanged, character for character.
- Translate only the subtitle text lines.
- Keep the blank line between blocks.
- Do not merge, split, reorder or renumber blocks.
- Do not translate these terms: [list product and character names here]
- Keep each translated line roughly the length of the original.
Pracuj w porcjach po 50 do 100 bloków, zamiast wklejać dwugodzinny film za jednym razem. To właśnie przy długich danych wejściowych modele zaczynają łączyć linijki i gubić bloki, i robią to, nie wspominając o tym ani słowem.
Potem zweryfikuj. Ta jednolinijkowa komenda liczy wiersze z przedziałem czasu w obu plikach:
grep -c " --> " original.srt translated.srt
Te dwie liczby muszą być identyczne. Jeśli w tłumaczeniu jest ich mniej, oznacza to, że bloki zostały połączone, a każda linijka po miejscu połączenia jest teraz błędna. Uruchamiaj tę kontrolę przy każdym tłumaczeniu przez LLM, za każdym razem.
Metoda 4: Tłumacz jako warstwę, nie jako plik
Trzy powyższe metody mają ten sam kształt: masz plik, produkujesz kolejny plik, a jeśli chcesz osiem języków, robisz to osiem razy i zarządzasz ośmioma plikami.
Aplikacja desktopowa może zamiast tego trzymać jedną oś czasu. W Sablate tłumaczenie to warstwa dodana do istniejącej transkrypcji, a nie nowe zadanie — granice linijek są tworzone raz, a każdy język je dziedziczy, więc kwestia czasowania nie wraca po raz drugi. Każda warstwa ma swój własny styl i własny font pisma, co ma znaczenie w chwili, gdy dany język potrzebuje pisma, którego font napisów nie zawiera.
Dostępne są dwie ścieżki tłumaczenia. Argos działa offline na twoim komputerze i nigdy nic nigdzie nie wysyła; DeepL, OpenAI i Claude są dostępne, jeśli masz własny klucz API. Jedna szczera uwaga o ścieżce offline: Argos publikuje pakiety sparowane z angielskim po jednej stronie, więc para taka jak turecki na niemiecki nie ma bezpośredniego pakietu i jest składana przez angielski jako pośredni etap. Działa, ale linijka z tureckiego na niemiecki brzmi nieco płaściej niż ta z tureckiego na angielski.
Darmowy plan obejmuje jedną warstwę tłumaczenia offline na zadanie, na filmach do dziesięciu minut; nieograniczona liczba warstw, silniki chmurowe i eksport wszystkich języków jednym kliknięciem to część Pro. Pobierz na Windows albo Mac i przetłumacz jeden plik, zanim cokolwiek zdecydujesz.
Której metody powinieneś użyć?
| Metoda | Koszt | Działa offline | Kontrola terminologii | Najlepsza do |
|---|---|---|---|---|
| Subtitle Edit | Darmowy | Tak, z modelem lokalnym | Częściowa | Jednego pliku, dowolnej pary językowej |
| Tłumacz dokumentów online | Darmowy plan, potem płatny | Nie | Nie | Najszybszego dobrego wyniku na parach europejskich |
| LLM ze ścisłym promptem | Zależy od modelu | Tak, z modelem lokalnym | Tak | Żargonu, nazw własnych, firmowego glosariusza |
| Sablate | Darmowy plan, Pro to jednorazowe $29 | Tak | Tak | Kilku języków z jednej transkrypcji |
„Mam jeden plik i zero budżetu”. Subtitle Edit. Jest darmowy, to najbardziej rozbudowane narzędzie do napisów na tej liście, jeśli chodzi o pracę z formatem, i nie zepsuje ci czasowania.
„Potrzebuję najlepszego tłumaczenia na niemiecki, a plik nie jest wrażliwy”. Tłumacz dokumentów. Wynik DeepL dla pary angielski–niemiecki wymaga tu najmniej poprawek ze wszystkich.
„Wideo jest poufne”. Subtitle Edit z modelem lokalnym albo ścieżka offline w Sablate. Wszystko, co wysyła plik na serwer, odpada, niezależnie od tego, jak dobre by nie było.
„Wydaję to samo wideo w sześciu językach”. Warstwy, nie pliki. Metody działające na pojedynczych plikach mnożą się razy sześć; przepływ pracy oparty na warstwach — nie, a praca z wieloma językami tłumaczy, dlaczego transkrypt zasługuje na staranną korektę, zanim cokolwiek się zacznie.
Jak sprawić, żeby czasowanie znowu się nie zepsuło
Trzy nawyki, w kolejności od tego, ile czasu oszczędzają.
Sprawdzaj liczbę bloków przy każdym tłumaczeniu. Powyższe polecenie grep zajmuje dwie sekundy i wyłapuje jedyną awarię, która jest niewidoczna przy zwykłym oglądaniu pliku. Przetłumaczony plik z mniejszą liczbą bloków niż źródłowy jest zepsuty, zawsze.
Sprawdzaj prędkość czytania po tłumaczeniu, nie po transkrypcji. Czasowanie przetrwało; tekst nie zachował tej samej długości. Z angielskiego na hiszpański albo francuski tekst zwykle robi się o 20 do 25 procent dłuższy, a na niemiecki nawet o 35 procent, i to wszystko w tej samej liczbie sekund. Komfortowa linijka przy 14 CPS staje się linijką przy 17,5 CPS bez przesunięcia choćby jednego znacznika czasu — limity prędkości czytania opisują, co z tym zrobić, a odpowiedź zawsze brzmi: zmień słowa albo czas trwania, nigdy synchronizację.
Traktuj transkrypt źródłowy jako główną wersję. Popraw w nim imiona, nazwiska, żargon i interpunkcję, zanim cokolwiek przetłumaczysz. Nazwisko poprawione w źródle jest poprawne w każdym języku; to samo nazwisko poprawiane później to osobna poprawka w każdym języku, a te poprawki zaczynają się rozjeżdżać.
Jeśli cokolwiek z tego ma trafić w formie wypalonej w wideo, zrób to na końcu. Prędkość czytania w kopii z wypalonymi napisami jest trwała, a format, do którego eksportujesz decyduje, czy widz w ogóle może zmienić język.
Tłumacz plik, nie wideo. Zachowaj oś czasu, za którą już zapłaciłeś, włóż wysiłek w słowa, które na niej leżą, i sprawdź liczbę bloków, zanim opublikujesz.