Převod titulků z DVD do textové podoby

Tato záležitost představuje nejpracnější část převodu filmu z DVD na CD, alespoň co se Linuxu týče. Jak jsem psal už dříve, tak titulky jsou na DVD uloženy společně s videem a audiem a sice jako obrázky (což je velmi praktické - nenastávají potíže s fonty, zejm. těmi problematickými jako jsou čeština, azbuka, asijské jazyky atp.).
Pokud máte na počítači nainstalován vedle Linuxu taky MS Windows, pak si můžete trochu usnadnit práci - přečtěte si sekci DVD-Linux-Windows-TXT titulky na konci tohoto článku.

Nejdříve si připravíme potřebný software. Budeme potřebovat:

tcextract

Tenhle prográmek je součástí balíčku transcode. Jedním ze způsobů jak zjistit, jestli ho máme nainstalovaný a jakou verzi, je v konzoli zadat

  rpm -qa | grep transcode
nebo prostě man transcode. tcextract slouží k extrakci požadovaného proudu (stopy) z multimediálního souboru. V našem případě nám vytáhne z DVD filmu požadované titulky.
Transcode je rychlý, všestranný, na příkazové řádce založený audio/video konvertor (převaděč) ze všeho do všeho a je součástí každé novější distribuce. Pokud ho přece jen nemáte, nainstalujte si ho (kvůli tcextract popř. i tccat).

subtitle2pgm

Zdrojový kód tohoto programu je součástí zdrojového balíčku transcode a najdete ho tam v podadresáři /contrib/subrip/. Zde se přesuňte a zadejte make. Z výsledku budeme potřebovat jen subtitle2pgm.
Program převádí vstupní soubor formátu z tcextract na posloupnost obrázků formátu pgm, které obsahují černobílé titulky.

subtitle2pgm potřebuje ke své činnosti knihovnu libnetpbm, tak si ji případně doinstalujte z instalačních CD (já jsem použil libnetpbm9-9.24-4mdk pro MandrakeLinux 9.0).

dvdsub

Tenhle program nám pro naše účely plnohodnotně nahradí GOCR (GNU Optical Character Recognition). Ba co víc, tím, že si ho Martin Kačer napsal právě pro účely převodu titulků z DVD do textové podoby, je sice úzce zaměřený na jedinou činnost, zato ale pracuje daleko spolehlivěji než GOCR a hlavně bez problémů zvládá češtinu. Program využívá toho, že všechna stejná písmenka vypadají v DVD titulcích naprosto stejně (italics/kurzíva, velká písmena a malá písmena však představují samostatné znakové sady). Program se postupně ptá na jednotlivě rozpoznané znaky, jejich přiřazení si v průběhu jednoho zpracování pamatuje. Programu tak musíme říct, jaké znaky reprezentuje cca 100 postupně rozpoznaných vzorků (3*26 + číslice + další znaky + slitá písmena zejm. u kurzívy).
Software získáte ze stránky projektu (projekt se původně jmenoval DVDtit, ale jeho současný oficiální název je DVDSub). Nebo vám jeho rannou (ale plně dostačující) verzi můžu zaslat mailem - je to v podstatě jeden soubor (zdroják programu v Céčku) v tar.gzip archivu o velikosti 7kB. Po jeho rozbalení (tar xfvz dvdtit.tgz) zadáte jen

  gcc dvdtit.c -o dvdsub
pro zkompilování a výsledný program se bude jmenovat dvdsub

pgm2srt

Viz můj návod, dvdtit mi už nestačil, tak jsem si udělal vlastní program/skript v Perlu.

Jdeme na to...

V prvním kroku musíme z DVD videa vytáhnout odpovídající stopu příslušných titulků (zde odkazuji na můj předchozí článek o ripování z DVD přes MPlayer/MEncoder). K tomu využijeme tcextract. Pokud jste si už video stáhli (dekryptovali) z DVD na disk přes

  mplayer -dvd 1 -dumpstream -dumpfile Jmeno_filmu.dumpstream
tak zadejte
  tcextract -i Jmeno_filmu.dumpstream -x ps1 \
    -a 0x2? > Jmeno_filmu.titulky
Parametry:

Pokud chcete vytáhnout titulky přímo z DVD disku, pak použijte rouru

  tccat -i /dev/dvd -T 1 -L | tcextract -x ps1 -t vob \
    -a 0x2? > Jmeno_filmu.titulky
Parametry:

Výsledný soubor Jmeno_filmu.titulky bude mít několik MB (1-5 podle rozsahu titulků). Doporučuji vytvořit nový adresář a do něj tento soubor přesunout společně s programy subtitle2pgm a dvdsub. Nyní přistoupíme k převedení 'titulkového proudu' na sekvenci obrázků pro následné optické rozpoznávání textu:

  ./subtitle2pgm -i Jmeno_filmu.titulky -o titulky -c 255,0,0,255 -C 5
Nejdřív trošku teorie :o) Pokud se nemýlím, tak v DVD titulcích jsou povoleny 4 barvy - odstíny šedé. To umožňuje, aby byly titulky vyhlazenější s obrysy jiného odstínu (v MPlayeru navíc mají lehký nádech pozadí, na němž jsou umístěny , takže titulky v něm je opravdu radost číst :-). Pro co nejspolehlivější optické rozpoznání textu potřebujeme co možná nejvýraznější text v grafické podobě. Nahradíme tedy některé odstíny šedi černou, jiné bílou. I tohle umí subtitle2pgm.

Parametry:

Výsledkem tohoto kroku budou stovky souborů titulkyXXXX.pgm, třeba i 1500, tak se nelekněte. Proto doporučuju pracovat v samostatném adresáři. Jeden ze souborů bude titulky.srtx - ten je velmi důležitý, obsahuje totiž časování titulků, resp. zatím obrázků s titulky. Klidně si ho prohlédněte. Na konci naší práce budou odkazy na jednotlivé soubory pgm obrázků nahrazeny skutečným textem a to je to, oč tu běží. Tento soubor je tím, který požaduje program dvdsub jako vstup (a pgm soubory si už pak načítá a analyzuje sám).

Následující obrázky zachycují český titulek č.1004 z DVD Harry Potter a kámen mudrců. Orámování obrázků jsem přidal pro lepší představu o jejich velikosti a funkčnosti parametru -C 5. "Spojením" 1. a 2. varianty dostáváme tlustší titulky ve 3.variantě. To se ale nakonec ukázalo jako ne moc šťastné, protože se pro software (dvdsub) slévaly písmena u kurzívy. Když pak ještě k variantě 3. přidáte 4.kombinaci, vzejdou vám nečitelné titulky jako na 5.ukázce. 6.obrázek si analyzujte sami. Kdo má dobré oči a plochý monitor, tak si určitě všimne, že jednotlivé varianty mají různé rozměry - na tom zapracoval právě parametr -C 5.

ukázka titulku č.1
-c 255,255,0,255
ukázka titulku č.2
-c 255,0,255,255
ukázka titulku č.3
-c 255,0,0,255
ukázka titulku č.4
-c 0,255,255,255
ukázka titulku č.5
-c 0,0,0,255
ukázka titulku č.6
-c 0,0,255,0
Nyní se dostáváme ke kroku, kdy na obrázkové titulky pustíme OCR software - v našem případě dvdsub nebo můj pgm2srt. Použití a obsluha jsou velmi jednoduché. Takže zadáme
  ./dvdsub titulky.srtx
a program začne pracovat. Postupně se vás bude ptát na jednotlivé rozpoznané znaky. Nespěchejte, raději si pozorně prohlédněte, co že je to za písmenko popř. jejich shluk (zejména u kurzívy). Na následujícím obrázku (pro zvětšení na něj klikněte) vidíte jeden z problémů - program nerozlišil jednotlivé znaky, ale ptá se na celou jejich sekvenci. V takovém případě je vypište do dialogového řádku všechny a potvrďte ENTERem. Ukázka z dvdsub koresponduje s výše uvedenými titulky - jedná se o písmena Pe a trific ze slova Petrificus.

screen shot z programu dvdsub

Právě dotazované znaky jsou zvýrazněny, okolní znaky jsou zobrazeny slaběji, ale často pomohou při odhadování významu. Jak jsem se zmínil výše, program se vás zeptá cca na 100 rozpoznaných vzorků. V případě uvozovek je zpravidla rozdělí do dvou apostrofů/čárek. Odpovězte tedy apostrofem/čárkou a při finálním zpracování již textových titulků provedeme nahrazení dvou apostrofů uvozovkami aj.
Tento krok vám podle množství titulků zabere cca 10-15 minut.

POZOR! Nezapomeňte, že během práce s dvdsub budete potřebovat českou klávesnici pro znaky s diakritikou.

Program dvdsub doběhl do konce a my máme textové titulky v souboru dvdsub.output, kde jsou uloženy ve formátu SRT. Pokud chcete mít titulky naprosto bezchybné, nezbývá, než je "ručně" projít a opravit případné chyby. Některé z nich lze opravit automaticky buď v textovém editoru nebo proudovým editorem sed za použití vhodných regulárních výrazů:

Spojením sil bychom na toto všechno mohli vytvořit šikovný skript - viz můj srtrepair.
Všem je snad jasné, že po uvedených krocích je aktuální soubor titulky5.srt, všechny předchozí můžete vymazat (doporučuji akorát ponechat úplně první titulkový txt soubor, který vzniknul po dvdsub pro případ nějaké chyby - třeba v sed se udělá velmi snadno a těžko se pak vrací zpět).

Posledním, alternativním krokem je vyjít vstříc kolegům s neUnixovou platformou tím, že převedeme titulky ze znakové sady ISO-8859-2 do CP1250 (Windows-středoevropské) popř. jiné:

  recode ISO-8859-2..CP1250 < Titulky_ISO2.srt > Titulky_CP1250.srt
A pokud si někdo chce převést titulky z formátu SRT do snad běžnějšího a úspornějšího MicroDVD (.sub), pak já k tomu používám MPlayer (bohužel se nevyhneme potřebě nějakého multimediálního souboru):
  mplayer Multimedialni_soubor -sub Nazev_titulku_v_SRT -dumpmicrodvdsub
MPlayer vytvoří druhý soubor titulků dumpsub.sub, ještě než začne přehrávat, takže jakmile se objeví obraz, můžeme přehrávání ukončit.
Zda je lepší nejprve měnit formát (SRT/SUB) titulků a až potom jejich kódové stránky nebo naopak, to už nechám na vás.
Na závěr jen poznámka - pokud se titulky jmenují stejně jako film (Nazev.avi, Nazev.sub, Nazev.srt), pak většina přehrávačů je spustí automaticky spolu s filmem (záleží samozřejmě také na konfiguraci daného software).

DVD-Linux-Windows-TXT titulky

Pokud máte z jakéhokoli důvodu tak jako já na stroji nainstalovány vedle Linuxu taky Wokna, pak můžete využít "kooperace" MPlayeru (z Linuxu) a již zmíněného programu SubRip (já používám verzi 1.06) pro Windows - stáhnout se dá z Internetu, je to GNU GPL projekt v Delphi; instalační .exe má 700kB.
A proč to dělat takhle složitě? Pokud váš počítač nebootuje věčnost, pak ušetříte čas strávený nad sháněním a instalací tcextract, subtitle2pgm a dvdsub. SubRip nevyžaduje mezikrok rozložení 'titulkového proudu' do obrázků. Vyhnete se taky psaní v konzoli. Počítám, že tuto možnost využijou jen začátečníci v Linuxu. A proč neudělat titulky celé přes Windows? Program SubRip (ostatně stejně jako každý jiný software pro práci s DVD) potřebuje dekryptovaná data. Pokud pustíte SubRip přímo na DVD disk, vyláme si zuby, pokud je DVD kryptováno (v drtivé většině případů).
Nejdříve v Linuxu vytáhneme z filmu (již dříve připraveného dumpstreamu z DVD disku - dekryptování) pomocí mencoderu požadované titulky do formátu vobsub:

  mencoder Nazev_filmu.dumpstream -sid 2 -ovc frameno -nosound \
    -o /dev/null -vobsubout Nazev_titulku
Výsledkem budou dva soubory Nazev_titulku.sub (obsahje titulky ve formátu vobsub) a Nazev_titulku.idx (obsahuje indexy pro titulky). Oba soubory (celkem několik MB) překopírujte/přesuňte na windows partition, abychom na ně z Windows dosáhli.

Parametry:

Teď už stačí jen reboot do Windows, nainstalovat SubRip a zpracovat soubor titulků. Ovládání SubRipu je velice jednoduché a máme tu i pár "postprocesingových" možností - nahrazení dvojího apostrofu za uvozovky, "inteligentní" záměna l za I aj. Výsledné titulky lze ukládat ve formátu microdvd, srt aj. Ukládat vygenerovanou znakovou sadu titulků pro dané DVD je užitečné jen tehdy, pokud ze stejného DVD chcete převádět vícero titulků (české, anglické,...). Titulky jednotlivých DVD se totiž dost liší a program by mohl generovat chyby, pokud bychom znakovou sadu titulků z jednoho DVD použili na jiné. Ale experimentovat samozřejmě můžete :o)


LINUX

malá ikona

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