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.
Jak tłumaczyć napisy offline
Dwie z czterech metod działają w całości na twoim komputerze, co ma znaczenie, gdy treść jest poufna albo nie ma stabilnego połączenia: Subtitle Edit z modelem lokalnym oraz warstwy Argos w Sablate. Obie tłumaczą tylko tekst i zachowują każdy znacznik czasu, więc problem czasowania opisany wyżej ich nie dotyczy.
| Subtitle Edit z modelem lokalnym | Sablate z Argos | |
|---|---|---|
| Co instalujesz | Ollama albo llama.cpp plus model, a potem wskazujesz je w Subtitle Edit | Nic dodatkowego; każdy pakiet językowy pobiera się raz w aplikacji |
| Języki | Te, które obsługuje wybrany model | Około 50 języków docelowych z dowolnego języka źródłowego, większość przez angielski |
| Jakość tłumaczenia | Zależy od rozmiaru modelu; słabsza niż DeepL w parach europejskich | Dosłowna i czytelna, słabsza niż DeepL i aktualne modele LLM |
| Kontrola terminologii | W prompcie możesz wymienić terminy do zachowania | Brak w samym tłumaczu; nazwy popraw później przez znajdź i zamień |
| Koszt | Za darmo | Jedna warstwa offline na zadanie w planie darmowym, bez limitu w Pro |
Ustal oczekiwania, zanim zaczniesz na którymś z nich polegać. Tłumacze offline to znacznie mniejsze modele niż DeepL czy aktualny chmurowy LLM i to widać: sformułowania wychodzą dosłowne, idiomy są tłumaczone słowo po słowie, a nazwy własne bywają tłumaczone, choć nie powinny. Argos ma jeszcze jedno własne ograniczenie. Prawie wszystkie jego pakiety łączą jakiś język z angielskim, więc para taka jak turecki na niemiecki jest wykonywana jako dwa tłumaczenia z rzędu, przez angielski, i przejmuje błędy obu.
Dlatego tłumaczenie offline nadaje się na roboczy szkic, do zrozumienia nagrania w języku, którego nie znasz, albo do języka, który sam potrafisz sprawdzić. Przy napisach, które opublikujesz w języku, którego nikt w zespole nie czyta, przetłumacz najpierw offline, a potem daj wynik do sprawdzenia albo przełącz tę jedną warstwę na DeepL lub LLM z własnym kluczem. Pozostałe narzędzia offline, które robią sam transkrypt, zestawia porównanie generatorów napisów offline.
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.
Najczęściej zadawane pytania
Jak przetłumaczyć plik SRT, żeby nie zepsuć czasowania?
Użyj narzędzia, które parsuje format SRT, zamiast takiego, które traktuje go jak zwykły tekst. Narzędzie świadome formatu czyta osobno numer bloku, wiersz z przedziałem czasu i tekst, tłumaczy tylko tekst, a resztę zapisuje bez zmian. Subtitle Edit robi to za darmo, a DeepL przyjmuje plik SRT jako dokument.
Czy mogę tłumaczyć napisy offline?
Tak. Subtitle Edit potrafi tłumaczyć lokalnym modelem przez Ollama albo llama.cpp, a Sablate tłumaczy na warstwy językowe przez Argos, który raz pobiera każdy pakiet językowy, a potem działa bez połączenia z internetem. Oba zachowują czasowanie. Spodziewaj się dosłownych sformułowań: modele offline są mniejsze niż DeepL i chmurowe LLM-y, więc wszystko, co publikujesz, przejrzyj.
Dlaczego Google Translate psuje pliki SRT?
Bo widzi cały plik jako zwykły tekst. Dla ogólnego tłumacza znaczniki czasu, numery bloków i strzałka między nimi to po prostu tekst do przetłumaczenia, więc je przeformatowuje, łączy linijki, których rozdzielającą pustą linię zgubił, i przenumerowuje bloki, gdy zmienia układ akapitów. Wynik często w ogóle nie daje się już sparsować.
Czy mogę przetłumaczyć plik SRT za darmo?
Tak. Subtitle Edit jest darmowy i open source, działa na Windows, macOS i Linux, a tłumaczenie ma wbudowane, z kilkoma silnikami, w tym modelami lokalnymi, które nie potrzebują internetu. Istnieją też darmowe tłumacze napisów online, ale wysyłają twój plik na serwer, co ma znaczenie, jeśli treść jest poufna.
Czy przetłumaczone napisy wciąż pasują do oryginalnego czasowania?
Pasują do czasowania, ale często nie do prędkości czytania. Tłumaczenie z angielskiego na hiszpański albo francuski zwykle dodaje 20 do 25 procent więcej znaków, a niemiecki potrafi dobić do 35 procent, i to wszystko w tej samej liczbie sekund. Granice linijki zostają poprawne, a tekst robi się zbyt szybki do przeczytania.
Jak sprawdzić, czy przetłumaczony plik SRT jest wciąż poprawny?
Policz wiersze z przedziałem czasu w obu plikach i porównaj wyniki. Jeśli oryginał ma 412, a tłumaczenie 389, oznacza to, że bloki zostały połączone albo zgubione. Potem otwórz przetłumaczony plik w odtwarzaczu obok wideo i sprawdź pierwszą linijkę, ostatnią linijkę i jedną szybką wymianę zdań w środku.
Czy lepiej przetłumaczyć plik z napisami, czy zrobić transkrypcję od nowa w docelowym języku?
Przetłumacz plik, a nie nagranie od nowa. Ponowne uruchamianie rozpoznawania mowy dla każdego języka daje za każdym razem inny zestaw granic linijek, więc poprawka synchronizacji w jednym języku nic nie daje w pozostałych. Tłumaczenie tekstu pozwala wykorzystać jedną, raz ustaloną poprawną oś czasu we wszystkich dodawanych językach.