Moji programčki in tehnični vedež

Podnapisi SRT (SubRip)

Obstaja precej formatov, v katerih lahko zapišemo podnapise. Eden najbolj enostavnih pa je nedvomno format SRT. Format SRT je nastal na prelomu tisočletja skupaj s programoma SubRip in SubViewer. Naloga prvega je bila izluščiti podnapise iz DVD posnetkov in jih zapisati v format SRT, drugi pa jih je potem prebiral in prikazoval.

Format je narejen tako, da ga lahko človek enostavno prebere, in v svoji najosnovnejši obliki vsebuje zgolj neoblikovano besedilo. Kasneje se je nekoliko razvil in začel podpirati nekatere značke HTML, s katerimi je mogoče besedilo odebeliti, nagniti, podčrtati, obarvati in tako naprej. Vse te nadaljnje razširitve so nastale bolj kot ne spontano in so nekakšen neuraden dogovor, ki ga podpira večina bolj priljubljenih večpredstavnostnih predvajalnikov.

Format

Pa si oglejmo podrobnosti. Datoteka, v kateri so shranjeni podnapisi SRT, ima pripono .srt. Besedilo v datoteki nima standardno določenega kodiranja (načina, kako so črke, števke in znaki zapisani), zato morajo programi, ki obdelujejo in prikazujejo podnapise, praviloma sami dognati, kako je zapisana datoteka. Če hočemo podpreti čim večji nabor znakov (torej črk, simbolov, pismenk in podobno), cenjenemu bralcu predlagam kodiranje UTF-8 z oznako razvrstitve bajtov (angl. byte order mark, BOM), ki je dandanes podprto že praktično povsod. Oznaka BOM na začetku signalizira programom, ki zaznavajo kodiranje, da gre za predstavitev UTF-8.

Kot zanimivost naj omenim, da marsikateri slovenski podnaslovi, na katere naletimo po spletu, uporabljajo kodiranje Windows-1250, ki izvira iz Microsoftovih Oken.

Če datoteko SRT odpremo s poljubnim besedilnim urejevalnikom, opazimo, da gre za enostaven besedilni dokument. Podnapisi so med seboj ločeni z eno prazno vrstico. Prva vrstica podnapisa vsebuje njegovo zaporedno številko, začenši z 1.

Druga vrstica vsebuje časovno informacijo, se pravi kdaj se podnapis prikaže in kdaj izgine. Čas prikaza in čas izginotja sta med seboj ločena z nizom „-->“. Časovni format je HH:MM:SS,mmm, kjer HH predstavlja ure, MM minute, SS sekunde in mmm milisekunde. Ure, minute in sekunde morajo vsebovati vsaj dve števki (ure lahko tudi več). Tako 1 sekundo zapišemo kot 01, 25 sekund pa kot 25. Milisekunde zapisujemo na tri mesta natančno, pri čemer števila po potrebi z leve daljšamo z 0 (npr. 1 milisekunda postane 001, 25 milisekund pa 025). Paziti je treba tudi na decimalno vejico med sekundami in milisekundami. Obstajajo tudi datoteke SRT, ki vejico zamenjajo s piko, čeprav to ni standardno.

Po časovni vrstici sledi poljubna količina vrstic besedila.

Besedilo 1: Primer podnapisa SRT.

Slogi besedila

Tukaj se najosnovnejša varianta formata konča. Neobdelano besedilo je sčasoma postalo preveč omejujoče in prišlo je do razširitev, ki so prinesle slogovno urejanje.

Sloge lahko dodajamo prek značk HTML. Vsaka značka se začne z lomljenim uklepajem in končna z lomljenim zaklepajem, na primer <i> ali </b>. Značke so bodisi začetne (<u>) bodisi končne (</u>), pri čemer imajo končne značke poševnico pred imenom. Pazimo: <font size="10">...</font>. Ime v znački pove, kakšne vrste oblikovanje značka nanaša. Trenutno je razširjena podpora za naslednje sloge:

Značke lahko kombiniramo, tako da jih gnezdimo. Na primer, besedilo 2 se izriše, kot kaže slika 1.

Besedilo 2: Primer gnezdenja značk.
Slika poševno-odebeljenega podnapisa.
Slika 1: Prikaz poševnega in odebeljenega besedila podnapisa v predvajalniku VLC.

Nekateri podnapisi izpuščajo končno značko. V tem primeru velja slog do konca besedila v podnapisu. Primer takega podnapisa vidimo v besedilu 3.

Besedilo 3: Primer nezaključenega sloga. Vse besedilo podnapisa je poševno.

Postavitev podnapisov na zaslonu

Poleg urejanja besedila samega si poglejmo še možnosti postavitve besedila na posnetku. Tudi to ni standardizirano. Obstaja dogovor o določanju koordinat prikazovanja podnapisa (ki se ga, kolikor sem sam testiral, drži zgolj predvajalnik mpv). Te koordinate dodamo na koncu časovne vrstice za presledkom, in sicer v obliki X1:xxx X2:yyy Y1:zzz Y2:www, kjer xxx, yyy, zzz in www zamenjamo s celimi števili, ki predstavljajo točke (piksle) na posnetku. Po nekaj testiranja lahko samo predlagam, da X1 in Y1 nastavimo na 0, X2 in Y2 pa na poljubno točko na sliki, kamor želimo podnapis postaviti.

Besedilo 4: Primer določanja položaja podnapisa. Tole po mojih testih deluje samo v predvajalniku mpv.

Druga varianta postavljanja podnapisov, ki je tudi elegantnejša in bolj razširjena, čeprav manj prilagodljiva, je uporaba značk SSA:

Besedilo 5: Primer uporabe značk SSA.
Slika podnapisov s SSA značkami v različnih delih zaslona.
Slika 2: Prikaz delovanja vseh značk SSA v predvajalniku VLC.

Značka je lahko kjerkoli v besedilu, velja pa za ves podnapis.

Presledki

Kar se presledkov tiče, večina implementacij spregleda morebitne začetne in končne presledke besedila posameznega podnapisa. Nekatere implementacije podpirajo dva niza:

O podprtosti oblikovanje je bilo nekoč opravljenih nekaj preizkusov na takrat najbolj priljubljenih predvajalnikih. Sam sem izvedel malce novejši preizkus, vendar sem uporabil enake podnapisne datoteke.

Predvajalnik Pisave Obravnavanje napak Oblikovanje Postavitev besedila
Media Player Classic Home Cinema 2.5.2 Ne gnezdi značk <font> pravilno. / Pokaže neveljavne značke. Ne zazna črne barve. Skrije besedilo v zavitih oklepajih. Ne zazna koordinat. Podnapisi se ne prekrivajo.
BS Player 2.78 / Pokaže neveljavne značke. Besedila ne odebeli. Skrije besedilo v zavitih oklepajih. Ne zazna koordinat. Ne omogoča vsiljene nove vrstice z \N. Če so uporabljene značke SSA za postavitev, se podnapisa, ki se časovno prekrivata, izrisujeta en čez drugega.
PotPlayer 250625 Gnezdenje značk <font> mu dela težave. / Ne zazna črne barve. Ne spreminja velikosti (<font size="...">). Skrije vse potencialne značke HTML. Skrije vse v zavitih oklepajih. Ne zazna koordinat.
QuickTime Player 7.7.9 Ni mogoče predvajati SRT podnapisov.
Windows Media Player Legacy / Besedila ne odebeli. Pokaže neveljavne značke. Skrije vse v zavitih oklepajih. Ne zazna koordinat.
Windows Media Player (na Windows 10 in 11) ? Ne podpira oblikovanja. Značke SSA prikaže v besedilu.
Kodi 20.5 / Ne spreminja velikosti. Skrije neveljavne HTML značke. Ima težave s samostojnimi > in <, napačno zaklepa značke. Skrije vse v zavitih oklepajih. Ne zazna koordinat.
VLC 3.0.20 Če je med dvema podnapisoma več praznih vrstic, potem požre še naslednji podnapis. Pokaže neveljavne nezaprte začetne značke in neveljavne nezaprte končne značke. Ne upošteva vsiljenega preloma vrstice. Ne zazna koordinat.
mpv 0.40.0 / Skrije vse HTML značke. /
Tabela 1: Preizkus različnih funkcionalnosti podnapisov na izbranih predvajalnikih. Dokumentiram, ali predvajalnik podpira različne pisave, kako se odziva na napake v formatu, katere funkcionalnosti oblikovanja besedila podpira in katere možnosti postavljanja besedila po zaslonu podpira.

Če potegnemo črto, večina predvajalnikov dandanes podpira osnovne značke HTML: poševno (<i>), odebeljeno (<b>), podčrtano (<u>) in prečrtano (<s>) pisavo. Tudi značke SSA lahko večinoma brezskrbno uporabljamo, razen na privzetem Windowsovem predvajalniku. Vse ostale funkcionalnosti so zelo različno podprte, zato je treba preveriti, ali naš ciljni predvajalnik (ali več teh) podpira to, kar želimo v podnapisih prikazati.