Převod titulků z DVD - The Final Countdown

Tímto navazuji na můj předchozí článek o převodu titulků z DVD to TXT. Zůstala tam totiž nedokončena pasáž týkající se 'automatických' oprav chyb, které bohužel vždy vznikají při aplikaci OCR software. I zde si na pomoc vezmu proudový editor sed, který je součástí snad každé distribuce GNU/Linuxu.

sed je velmi šikovný program používaný z příkazové řádky a z toho vyplývá jeho síla - je neskutečně rychlý a efektivní. Jeho možnosti jsou rozsáhlé, my využijeme pouze funkci nahrazování za použití rugulárních výrazů. To jsou hrůzostrašně vyhlížející konstrukce, změť normálních a zpěrných lomítek. Myslel jsem si, že je nikdy neovládnu. Ale při psaní toho článku jsem se je učil "za pochodu" a radikálně jsem změnil názor. Najednou jsem se snažil vytvořit co nejkrkolomnější a nejsložitější regulární výraz, který by ale byl pochopitelně funkční. Kolikrát mě překvapilo, že skript postupně umí i věci, které jsem původně ani nezamýšlel :o))

Můžete si stáhnout skript (sed_cz_iso2) pro sed, ať to nemusíte pořád vypisovat. Jeho použití je pak:

  sed -f sed_cz_iso2 < Puvodni_titulky > Nove_titulky
Formát souboru Puvodni_titulky musí být v kódování ISO-8859-2 a nejlépe ve formátu SRT tedy tak, jak vzejdou po použití programu dvdsub z projektu Martina Kačera. Doporučuju používat pouze na české titulky, je tam několik specifik pro češtinu. Inspiraci jsem čerpal z projektu Martina Kačera, ze zdrojáků SubRipu a něco jsem si dovolil vymyslet sám. Taky jsem si v průběhu vymýšlení a ladění formy výrazů a jejich pořadí vytvořil testovací soubor s různými "chuťovkami".

POZOR! Skript se rovněž pokouší řešit nepříjemný problém, který vzniká proto, že velké I vypadá u DVD titulků stejně jako malé L. Aby to bylo jednodušší, provádí se jen kontrola a nahrazování ve směru z malého L na velké I. Proto už při převodu titulků-obrázků na ASCII znaky (např. pomocí dvdsub) je nutno zajistit, aby všude bylo malé L. Tzn. že pokud se vás OCR program nejdříve zeptá na rozpoznané velké I, odpovězte mu, že je to malé L, jinak budete mít všude jen velké I a to se na malé L převádí o poznání hůře (resp. byste nejdříve museli změnit všechna velká I na malá L - což je jeden příkaz v sedu - a teprve pak použít můj skript). Velké I s čárkou samozřejmě při OCR převodu nečiní potíže.

A jdeme na to!!! (sed -e 's/d/eb/g')

Teď si probereme jednotlivé položky skriptu pro sed - využijeme zde síly regulárních výrazů (více o nich se dozvíte např. v článcích Pavla Satrapy). Jedna z možností využití programu sed je nahrazování, jež má tvar např. s/hledej/nahraď/g, kde /g znamená, že se má prohledávat celý vstup (global) od začátku do konce, nikoli jen jediný výskyt.

Jsem si jist, že tento skript nemůže stoprocentně opravit chyby po OCR software, ale myslím si, že po něm bude kvalita titulků již tak vysoká, že není třeba je procházet "ručně". Samozřejmě vítám každý návrh na vylepšení - jistě se setkáte s titulky, na které bude jakýkoli natož tento automatizovaný skript krátký.


LINUX

malá ikona

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