Wróć do bloga

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.

20 września 2026
Sablate Team

Ż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:

  1. 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.
  2. 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.
  3. 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:

  1. Subtitle Edit — darmowy, open source, tłumaczenie wbudowane, działa lokalnie.
  2. Tłumacz online świadomy formatu — wgrywasz plik, dostajesz plik z powrotem.
  3. LLM ze ścisłym promptem — najlepsza kontrola terminologii, wymaga weryfikacji.
  4. 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.

  1. Otwórz plik .srt w Subtitle Edit.
  2. Wybierz Auto-Translate i wskaż silnik oraz język docelowy.
  3. Sprawdź wynik w widoku listy, gdzie oryginał i tłumaczenie stoją obok siebie.
  4. 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ć?

MetodaKosztDziała offlineKontrola terminologiiNajlepsza do
Subtitle EditDarmowyTak, z modelem lokalnymCzęściowaJednego pliku, dowolnej pary językowej
Tłumacz dokumentów onlineDarmowy plan, potem płatnyNieNieNajszybszego dobrego wyniku na parach europejskich
LLM ze ścisłym promptemZależy od modeluTak, z modelem lokalnymTakŻargonu, nazw własnych, firmowego glosariusza
SablateDarmowy plan, Pro to jednorazowe $29TakTakKilku 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.