Převod titulků z DVD - kompletní nástroj pro manipulaci s SRT titulky

Tak, tenhle "projekt" začal programy srtcheck a srtshift v Turbo Pascalu. Poté jsem se začetl do knížky/učebnice Pavla Satrapy "Perl pro zelenáče" (vřele doporučuju, je v ní plno srandy, bez prdele :o)) a po cca dvou týdnech čtení=studování jsem se pustil do přepisu zmíněných dvou programů do perlivého jazyka.

Perl

Tento jazyk vznikl původně za účelem lepší manipulace s textem. Jak vývoj postupoval, došlo např. až na grafické rozhraní a v Perlu je třeba napsána výborná hra 'Frozen Bubbles', která je součástí distribuce MandrakeLinux.
Jednou ze silných stránek Perlu při práci s texty je jeho schopnost využívat regulární výrazy. Toho jsem v programu využil a trochu si tím oproti verzi v TP ušetřil práci.
Pokud ještě Perl nemáte nainstalován v rámci standardní distribuce (zjistíte např. pomocí příkazu which perl), pak tak učiňte a to nejméně verzi 5.x. Já jsem tenhle program psal v Perlu v5.8.0 (zjistíte pomocí perl -v).

SRTrepair

O "filozofii" programu se nebudu moc obšírně rozepisovat, hodně věcí je popsáno pro verze v TP (viz článek o srtcheck a srtshift). Tenhle program je spojením dvou předchozích a doplnil jsem ještě další funkce. Takže co srtrepair k dnešnímu dni umí:

Součástí programu je i stručný HELP s příklady použití (./srtrepair -h). Pokud po spuštění programu zahlásí shell chybu typu "bad interpreter", pak buď nemáte Perl ještě nainstalován, nebo je jinde než u mě na počítači. To spravíte editací prvního řádku programu #!/usr/bin/perl - napíšete tu správnou cestu k Perlu, kterou vám vypíše příkaz which perl
Na 4.řádku programu se do konstanty MIN_DELKA ukládá minimální délka jednoho titulku - pokud pak program najde titulek kratší, ohlásí ho jako chybný. Tuhle minimální délku si můžete na 4.řádku nastavit podle vlastního uvážení, já jsem tam dal 0,3 vteřiny.

K provedení programu tedy potřebujete mít nainstalován Perl. Uvažoval jsem, že zde umístím i vykompilovaný binární kód, ale výsledkem kompilace (pomocí perlcc z balíčku perl-devel-...) byl soubor o velikosti 600kb! Pokud by ale byl zájem, není problém.

Hlášení chyb a připomínky jsou vítány.

Jednotlivé volby programu

Program se spouští výhradně z příkazové řádky a vyžaduje nejméně jednu volbu. Nezapomeňte, že před jméno programu musíte zapsat znaky ./ aby ho systém hledal v aktuálním adresáři. Pokud volba obsahuje parametr, musí tento následovat ihned za ní. Některé volby lze zřetězovat, za volbou s parametrem nesmí následovat jiná volba ale parametr. Tak řekl Perl :o)
   -v
   srtrepair -v
podprogram verze - vypíše verzi programu. Ta se ukládá na ř.3 programu do konstanty VERZE.
   -h
   srtrepair -h
podprogram napoveda - vypíše stručný help obsažený v programu včetně několika příkladů. Příkaz srtrepair -hv vypíše help a verzi programu, příkaz srtrepair -vh učiní to samé v nezměněném pořadí - to je dáno pořadím testování volání jednotlivých prodprogramů v hlavním programu.
   -c Vstupni_soubor_titulku
   srtrepair -c Titulky.srt
podprogram check_tit - ověří časování titulků Titulky.srt, jak bylo popsáno výše. Během své činnosti vypisuje za každý načtený titulek tečku. Jestliže se dva po sobě jdoucí titulky časově překrývají, pak vypíše jejich čísla oddělené pomlčkou. Jestliže nalezne titulek, jehož délka (doba zobrazení na obrazovce) je menší než 0,3sec (tato hodnota se vkládá do konstanty MIN_DELKA na ř.4), pak vypíše číslo kritického titulku následované třemi vykřičníky. Zároveň se počítá taky počet prázdných titulků, tedy titulků, které neobsahují text, ale jen číslo titulku a časování (poprvé jsem se s tím setkal u filmu The Postman - Posel budoucnosti). Podprogram dále volá podprogram grammar a zjišťuje tak, zda je v titulcích chybný text, který by dokázal opravit (za pomoci regulárních výrazů).
Tento podprogram je využit také podprogramem pro opravu titulků repair_tit k následné kontrole po opravě - program totiž neopravuje titulky se špatnou délkou - menší než MIN_DELKA (tedy i nulovou či zápornou), ty si musíte bohužel opravit ručně. Někdy je totiž nutno časově posunout více titulků tak, aby na ten jeden špatně načasovaný zbylo místo. Na závěr tento podprogram vypíše informaci:

Celkem nalezeno chyb:
Pocet titulku bez textu:
Pocet opravitelnych chyb v textu titulku: xxx, napr.titulky: v,w,x,y,z,

Do celkového počtu chyb se NEzapočítávají titulky bez textu. Poslední řádek informuje o schopnosti podprogramu grammar vylepšit text titulků - odstanit přebytečné mezery, naopak je vhodně doplnit, nahradit t' d' za ť a ď aj. Je zde uveden výčet čísel pěti prvních titulků, v nichž byla nalezena textová chyba, kterou umí program opravit.

   -o Nazev_vystupniho_souboru
   -o Titulky2.srt
slouží ke specifikaci názvu výstupního souboru titulků. Pokud není volba použita, je k původnímu názvu vstupního souboru titulků připojeno .new. Tato volba vyžaduje parametr, který musí následovat bezprostředně po ní (ostatně jako v případě všech 'parametrických' voleb).
   -r Vstupni_soubor_titulku
   srtrepair -ro Titulky2.srt Titulky.srt
podprogram repair_tit provede opravu časování titulků, které se překrývají. Vstupem je soubor Titulky.srt a výsledek je zapsán do Titulky2.srt. Volby je možno řetězit, ale 'parametrická' volba musí být poslední a následovaná svým parametrem a tudíž více 'parametrických' voleb zřetězit nelze, musí se použít postupně/samostatně na řádku se symbolem pomlčky/mínus. Jméno vstupního souboru musí být vždy jako poslední. Tento podprogram opraví překrývající se titulky. Jako základ se bere konec titulku - vypozoroval jsem z chování programu subtitle2pgm, že chyby se vyskytují pouze v čase začátku titulku, který bývá někdy stejný i pro několik titulků po sobě; konce titulků bývyjí v pořádku. A podle textové délky titulku (zda má více než 10 znaků na řádku či dva řádky, či zda předchozí titulek končí čárkou, středníkem, dvojtečkou) se upraví jeho začátek oproti konci. Pak se ještě zkontroluje, zda se nepřekrývá s titulkem předchozím. Někdy na takovýto titulek nezbývá dost místa (prodleva mezi koncem prvního a koncem druhého kolidujícího titulku je menší než MIN_DELKA) a je nutný ruční zásah, kdy se musí posunout časování více okolních titulků. Po proběhnutí opravy proto podprogram ještě volá kontrolu titulků, aby uživatel viděl, jak moc se rekonstrukce povedla a kde je případně nutné provést změny ručně.
   -s <cislo>
   srtrepair -s -3698.257 -o Titulky2.srt Titulky.srt
podprogram shift_tit posune celé titulky (každý titulek stejně) vpřed nebo vzad. Zde posune titulky o 1h 1min a 38,257sec zpět a výsledek uloží do souboru Titulky2.srt. Takto například vytvoříme druhé titulky pro film na 2 CD - titulky z první části ručně vymažeme a zbytek pak posuneme o příslušný počet vteřin zpět, nebo použijeme ještě volbou -f. Zadávaný parametr může mít max. 3 desetinná místa (kvůli formátu času v SRT titulcích); pokud chcete vložit nulu, použijte zápis 0.0 nebo 00. Samotnou nulu jako parametr chápe Perl jako hodnotu UNDEF pro danou volbu. Je možno použít také zápis hod:min:sec, např. -1:1:38.257 pro výše uvedený příklad.
   -f
tato volba má smysl jen ve spojení s volbou -s; f jako Force - donutí podprogram shift_tit, aby v případě, že posun způsobí záporné titulky, nezahlásil chybu, ale pokračoval v činnosti s tím, že titulky s nově záporným časem začátku budou uloženy do separátního souboru s příponou *.first_part a jejich časování bude zachováno. Posunou se tedy jen ty titulky, jejichž časování i po posunu zůstane nezáporné a vytvoří tak 2.část titulků. Rovněž se hodí připojit i volbu -n k okamžitému přečíslování druhé části titulků (těch, které zůstanou nezáporné). Takto snadno vyrobíme 1. a 2.část titulků pro filmy na dvě CD.
   -m <cislo>
   srtrepair -m -0.002778 -o Titulky2.srt Titulky.srt
podprogram shift_tit posune v tomto případě každý titulek jinak - o zadaný koeficient vzhledem k hracímu času. Parametr zde udává o kolik vteřin na vteřinu filmu se mají titulky posunout. PRVNÍ NALEZENÝ TITULEK SE NEPOSOUVÁ !!! Jeho posun (a všech ostatních) zajistíte parametrem -s. Tak co dělá tahle volba - zjistíte, že první titulek sedí OK (pokud ne, posuňte ho parametrem -s). Jenže po hodině se už titulky opožďují o 10 sec. Právě tohle spraví tenhle příkaz, protože 10/3600 je právě 0,002778. Ještě jednou upozorňuju, že se jedná o lineární posun, tzn. nový_začátek_titulku_ve_vteřinách=začátek_titulku_ve_vteřinách*parametr_m, stejně tak konec titulku. Při -m 1 se nestane nic - vše se násobí jedničkou. Tady už můžete mít desetinných míst co hrdlo ráčí :o))
   -t <cislo>
   srtrepair -t 25 -o Titulky2.sub Titulky.srt
podprogram trans_tit převádí titulky z SRT formátu, který je postaven na časové základně, do SUB MicroDVD titulků, které jsou vystavěny na snímkové/frejmové základně. Proto také musíte volbě -t zadat parametr v podobě FPS (Frames Per Second) - obvykle 25 pro PAL. Ale raději si to nějak ověřte, jinak se vám převedené titulky nehezky rozjedou.
   -i <cislo>
   srtrepair -i 25 -o Titulky2.srt Titulky.sub
podprogram sub_na_srt převádí titulky ze SUB MicroDVD titulků, které jsou vystavěny na snímkové/frejmové základně, do SRT formátu, který je postaven na časové základně,. Proto také musíte volbě -i zadat parametr v podobě FPS (Frames Per Second) - obvykle 25 pro PAL. Ale raději si to nějak ověřte, jinak se vám převedené titulky nehezky rozjedou. Volba se nedá použít v kombinaci s jakoukoli jinou. Pokud provedete převod ze SUB na SRT a zpět (nebo z SRT na SUB a zpět), výsledkem budou stejné titulky, ale časování se bude lišit v tisícinách a setinách sekundy (max. do jedné desetiny?), což je dáno zaokrouhlováním na tisíciny sekundy po dělení FPS.
   -e
tento přepínač v kombinaci s volbami -r -s -m -t způsobí vynechání titulků, které neobsahují žádný text (někdy se vyskytují u mnohojazyčných DVD, kdy je jedna časová 'šablona' titulků plněna různými jazyky).
   -n
tento přepínač v kombinaci s volbami -r -s -m způsobí přečíslování titulků tak, aby první začínal jedničkou a další byly vždy o jedničku větší - to se hodí v případě, kdy vytváříte titulky pro druhé CD a prvních několik set se vypouští. Rovněž se tato volba hodí při použití -e.
   -g <cislo>
podprogram grammar se snaží opravit chyby, které vznikají při převodu obrázkových titulků z DVD do textové podoby při použití OCR (Optical Character Recognition) software. Volba má parametry 1 pro češtinua 2 pro angličtinu a lze ji použít společně s volbami -r -s -t. Jaké konkrétní věci se "opravují" si můžete přečíst v mém přechozím článku o skriptu pro sed.
   -l <soubor>
z tohoto souboru bude použito časování titulků a text titulků je použit z hlavního vstupního souboru.

Pro ilustraci uvedu jeden příklad za všechny (více viz ./srtrepair -h).

   srtrepair -enfs -3945.575 -m -0.0041667 -o Titulky_dil2.srt Titulky.srt

Aktuální verze programu

Tento program (i ty další na mých stránkách) je free software; může být šířen a/nebo modifikován za podmínek GNU General Public Licence vydaných Free Software Foundation (verze 2 licence nebo pozdější).

SRTrepair GUI pro Windows

v0.1 - 24.7.2006
srtrepair-gui-win32 ver 0.1
  • první verze klikacího rozhraní pro SRTrepair určená pro MS Windows (linuxová verze je součástí gpgm2srt)
  • tento skript je pouze tlačítková nástavba, tedy původní srtrepair.pl je stále nutnou součástí
  • návod na obsluhu tohoto GUI (Graphical User Interface) zobrazíte kliknutím na vedlejší obrázek

SRTrepair

v1.13 - 24.7.2006
srtrepair ver 1.13

v1.12 - 23.4.2006
srtrepair ver 1.12

v1.11 - 18.10.2005
srtrepair ver 1.11

v1.10 - 17.9.2005
srtrepair ver 1.10

v1.7 - 3.6.2004
srtrepair8.pl

v1.6 - 1.6.2004
srtrepair7.pl

v1.5 - 5.5.2004
srtrepair6.pl

v1.4 - 21.10.2003
srtrepair5.pl

v1.3 - 9.9.2003
srtrepair4.pl

v1.2 - 7.8.2003
srtrepair3.pl

v1.1 - 1.8.2003
srtrepair2.pl

v1.0 - 14.7.2003
srtrepair.pl


LINUX

malá ikona

Počítadlo z http://pocitadlo.netway.cz/