Hogyan készíthetünk gépi felolvasással hangoskönyvet Linux alatt?

Gépi felolvasás?
Gépi felolvasás?
Hogyan készíthetünk gépi felolvasással hangoskönyvet Linux alatt? Én most egy egyszerű megoldást mutatok be, ami talán a leggyorsabb.

Az utóbbi időben körbejártam a témát és pár elkészített anyag után pár hasznos tapasztalatot összegzek.

Mi is a cél? Egy írott anyagból szeretnénk hallgatható anyagot készíteni. A dolog első olvasatban egyszerű, de van pár buktató.

Első lépés az írott anyag előkészítése

A megjelenő e-bookokat a legtöbb esetben át kell alakítani sima szöveggé, azaz text állománnyá. Ennek két útja van. Az egyik, amit én kerülök az e-book formátum kicsomagolása. A legtöbb e-book formátum (epub. prc stb.) egy tömörített állomány, amit az archívumkezelővel, vagy akár egy fájlkezelővel is ki lehet bontani, azaz sok kis html, azaz sima weblap formátumú állományt kapunk. Ezeket már tudjuk kezelni. Én nem ezt az utat jártam be, hanem az e-book formátumot átalakítom sima szöveggé. Így egy általánosabb, minden szövegszerkesztővel szerkeszthető állományt kapunk. Bár sok konverter program van, a gyorsaság miatt a Calibre mellett döntöttem. A program telepítése urán az e-bookra kattintva beimportálja, egy külön könyvtárba másolva már katalógusba veszi a könyvet. Majd a programban a könyvre jobb klikk és a konvertálásra kattintunk. A megnyíló panelben a txt kimenetet választjuk. Több könyv együttes konvertálása is megoldható, ha többet jelölünk ki. A kész állományt a /home/laci/Calibre könyvtár/ megfelelő mappájában találjuk.

A felolvasó program: Speech Note

Ez a legegyszerűbb útja a szövegből hang konverziónak.

Tipp: hacsak nincs túl sok pénzed és időd, akkor felejtsd el a webes felületű, mennyiségben korlátozott és fizetős megoldásokat. Pénzbe kerülnek. A különféle nyelvi modelleket használó mesterséges intelligenciát használó megoldásokat is, amiket esetleg feldob a kereső. Ezek használata messze túlmutat a befektetett idő, munka és az elérhető haszon normális arányán. Az időd elmegy a "játszadozással".

A Speech Note flatpak formátumban érhető el, telepítés után a nyelvi modelleket le kell tölteni. A használatáról és a hangoskönyv készítéséről készült videó: itt és itt érhető el.

Ha nincs kedved megnézni a videókat, akkor a nyelvi modelleket a Languages menüben találod, ahol rákeresel a kívánt nyelvre és telepíted, ami kell. A gyorsaság és a felesleges próbálkozások elkerülése véget a Text to Speech részben a Piper modelleket tedd fel. Ezek a legjobbak, a többi elég robotos hangzást ad. A nyelvi modellek nagyok, így helytakarékosságból, csak azokat tartom a gépen, amiket használok is.

Tipp: a Speech Note flatpak oldalán van két ajánlott (AMD és NVidia) GPU kiegészítő. Azt, ami jó a videokártyádhoz érdemes kipróbálni. Nekem nem támogatott a kártyám, így nem tudok véleményt mondani róluk.

A hangmodellek kipróbálása: Notepad fül és oda bemásolsz a könyvből legalább ötven sort. Alul a Read gomb előtt váltogatva az összes modellt meghallgatod. Én a Imre modellt használom. Ha túl gyors, hadar a felolvasás, akkor a sebességet lejjebb lehet venni. Nekem a 0.9 illetve a 0.8 ami bevált.

Itt van a választóvonal: ha nem teszik a gépi felolvasás, akkor most hagyd abba! A kiválasztott és legjobbnak ítélt hangzáson sokat javítani már nem tudsz.

A legzavaróbb dolog...

...a gépi hangon kívül, hogy a felolvasás fonetikusan olvassa ki az idegen nyelvű szavakat. Egy jellegzetes példa az angolban sokszor előforduló Mr. kiolvasása "em er"-nek, vagy a ... kiolvasása "pont, pont, pont"-nak. Ez nem elegáns és nagyon rontja a hallgatási élményt is.

Ezen javítani kell. A javításnak nincs kényelmes útja. Ennek az írásnak a fő célja a felesleges próbálkozások elkerülése.

A megoldás logikus: a könyvben az összes idegen szót, amit rosszul ejt ki át kell írni fonetikus kiejtésűre, így a a példa Mr. helyett a Miszter szerepeljen. Erre a legtöbb szövegszerkesztő alkalmas, amiben van keres és csere funkció. Ideális ha van olyan, hogy minden találatot egyszerre ki tudja cserélni.

Ha megnyitod a lekonvertált txt állományodat, amit elkészítettél, és a kedvenc szerkesztődben a csere funkciót használod már nagyot haladtál.

Már érthető, hogy miért a konvertálás egy állományba lehetőséget választottam. Így egy lépésben cserélhető a kívánt szó és nem kell sok fájlt megnyitni.

Két probléma merül fel

Bár a fenti művelet egyszerű, de kis belegondolás után rögvest jönnek a kérdések:

  • Hogyan találom meg az összes idegen szót átírásra?
  • Minden egyes könyvnél végig kell járni ezt?

Az első kérdésre egyszerű a válasz: kapcsold be a helyesírás-ellenőrzőt és az aláhúzz minden idegen szót. Ha nem is mindet, de a legtöbbet. Így gyorsan kiszűrjük az idegen szavakat, és már a keres és csere jön. Erre a legtöbb szövegszerkesztő alkalmas.

A második kérdésre már nehezebb a megoldás. Pedig egyszerűnek látszik, csak meg kell adni a cserélendő összes szót és azt, hogy mire cserélje, és legyen szíves ezt meg is jegyezni. Majd a következő dokumentumban a cserét automatikusan végezze el.

Erre már kevesebb szerkesztő képes! A felesleges keresgélést megelőzendő a megoldásom:

Sublime Text

A Sublime Text editor egy viszonylag ismert szövegszerkesztő, jellemzően kódszerkesztésre kihegyezve. Most csak két bővíthetőségét használjuk ki. A helyesírás ellenőrzését és a kibővített keresés csere feladatot. A legtöbb tárolóban ott lesz, így a telepítése nem okoz gondot. A honlapjukról is le lehet tölteni. Elvileg fizetős, de a próba lehetősége teljes és nincs időkorlátja. Így szabadon használjuk.

Sublime text helyesírási kiegészítés

A Sublime Text képes a helyesírási ellenőrzésre, de magyarul nem tud. Ezt könnyen orvosoljuk, mert a már ismert szótárakat simán kezeli. Ezt a tárolót kell letölteni. Majd kikeresni a magyar szótárfájlokat és bemásolni a .config/sublime-text/Packages/User mappába. Ezek után már a View/Dictionary menüben kiválasztható az User pont alatt az új szótár. Figyelj rá hogy más nyelv ne legyen kijelölve!

Tipp: a fenti könyvtár a Sublime Text custom beállítási könyvtára. Ide menti a saját beállításaidat. Így ha ezt időnként lemented, akkor sok munkát megspórolsz magadnak.

Ezután már megnyithatjuk a könyvünket és cserélgethetjük a szavakat. A csere panel a Ctrl+H lenyomásával gyorsan előkeríthető és a kijelölt szó már be is kerül a cserélendőként:

Egész jó megoldás, sokat tud...
Egész jó megoldás, sokat tud...

A képen látni, hogy viszonylag sok mindent állíthatunk: kis és nagybetű érzékenység, esetleg a regexperteket is használhatjuk.

Miután az Mr. kicserélésre került a Misszter-re, érdemes a Misszter-t felvenni a kivételek közé, hogy ne jelölje hibásnak. A Misszter-re jobb klikk és a megfelelő pontot kiválasztjuk. Ezután léphetünk tovább a következő aláhúzott szóra és ha azt is át kell írni, akkor újra a csere funkciót használjuk. Két praktikussági tipp: ha nem tudjuk a pontos kiejtést, akkor a google fordító oldalával olvastassuk fel. Ha bizonytalanok vagyunk a fonetikus átírás hangzásában, akkor az átiratot olvastassuk fel a Speech Note-val. Érdemes kicsit játszani ezekkel, mert egyszer kell "jól" leírni, ahogy tetszik és azután már mindenhol azt használhatjuk.

Sublime text csere kiterjesztése: RegReplace

Ha szeretnénk a cserélendő szavakat valami mód rögzíteni és a következő könyvben is használni, akkor egy hasznos kiegészítőt kell alkalmazni: RegReplace A telepítése a Package Control:install Package segítségével történik, amit ha nem ismersz, akkor itt le van írva a folyamat.

A leírások szerint nagyon sokféle feladatra alkalmas, mi most a lehető legegyszerűbbre használjuk: egy karaktersort cseréljen ki egy másikra. Bár első ránézettre nagyon bonyolult a dolog, de az első pár megadása után már villámgyors.

A feladat két részből áll, az első a csere pár megadása.

A képen lévő menüt használjuk:

Itt keresd!
Itt keresd!

Elsőnek a Rules User-t nyitjuk meg, majd a Commands - User-t. Bár elsőre mindegyik összetett, de pici igazítással már érthető. A Rules User tartalmazza a csere párokat és pár szabályt.

{
  "replacements": {
    "001": {
      "find": "Bruce",
      "replace": "Brussz",
      "greedy": true,
      "case": false
    },
    "002": {
      "find": "Forest",
      "replace": "Foresszt",
      "greedy": true,
      "case": false
    }
  } 
}  

Ha megnézed az eredetit, akkor összetettebb, mert az regexpertes kifejezés, de nálunk felesleges. Mi egy konkrét szót egy konkrét szóra cserélünk.

Ami fontos: itt a szerkezet kötött, az összes nyitó és zárójel, vessző és egyéb varázslat úgy és pont ott kell lenni, ahol volt! A lényegi rész a szabály leírása, amiből érdemes egymás alá másolni üresen egy csomót. Ha üres, akkor nem fog hibát adni, ha a szintaktika, a zárójelek nincsenek jól akkor jelez.

    "": {
      "find": "",
      "replace": "",
      "greedy": true,
      "case": false  
    },

A használata egyszerű.

Az első idézőjeles részben a szabály neve jön. Egyedi legyen. Én a sorszámozást használom, de bármi karaktersor lehet betű és szám is. Ezzel hivatkozunk majd a szabályra. A find sorba amit keressen, a replace sorba amire cserélje. Nem bonyolult! A következő két sor az eredeti állományból van, ide a szabályokat adhatod meg. A szabályokról a leírásban lehet olvasni, nekem a case a fontos, ami false érteket kap, azaz ne figyeljen a kis és nagy betűkre. A greedy adja meg, hogy minden találat érdekes.

A bejegyzések elkészítése mechanikus: amikor találok egy cserélendő szót , akkor megkapja a következő számot, majd a két értéket kitöltöm. Mentés. Majd letesztelem, azaz a funkciót lefuttatom.

A futtatáshoz kell egy parancs, amiben megadjuk, hogy melyik szabályt hajtsa végre. Ez az másik, már megnyitott állományban lesz megadva, aminek a felépítése egyszerű:

[
  {
    "caption": "Reg Replace: LLL",
    "command": "reg_replace",
    "args": {
      "replacements": [
        "001",
        "002",
        "003",

Itt is figyelünk, hogy a beírogatáskor az eleje és vége, ahol mindenféle zárójelek vannak úgy maradjon és logikusan jelzi, ha valahol valamit elrontottunk. A caption sorba a parancs nevét adjuk meg, a többihez nem nyulunk, ezek alapból így voltak beállítva. Ha valamit változtatni akarsz, a leírás részletes. Nekem jó így. Majd a csereszabály neveket kell felsorolni. Pontosan. Én praktikusság okán - mert számozva vannak - megadtam százig a szabály neveket. Ha olyan szabály névre hivatkozol, ami nincs megadva, az nem gond. Lefutáskor majd jelzi, hogy valamennyi szabályt nem tudott elvégezni, és nézd meg a kimenetet...

Hogyan futtatható egy parancs Sublime text alatt? Nagyon egyszerű: Crtl+Shift+p és elkezdjük begépelni a a nevét: LLL, amit megadtunk. Miután lefut, ellenőrizzük. Érdemes az új szabályokat mindig leellenőrizni kétszer, mert a következő könyvnél már nem akarunk ezzel foglalkozni.

Szépen haladunk már, elvileg már odáig, ahol éppen tartunk nincs olyan szó, amit ne jól olvasna fel a gép. Menet közben érdemes a felesleges fejezetsorszámokat törölni, vagy betűvel kiírni (ha kellenek), mert van amikor elég érdekesen olvassa fel az a nyelvi modell, amit használok. Érdemes a fejezet számokat átírni szövegesé. A fejezetek végén helyszín váltás is lehet és ha nem írod ki, hogy "vége a hatodik fejezetnek" vagy hasonló akkor egybefolyik a két szín. A gépi olvasás amúgy is monoton, így igen zavaró tud lenni, ha nem különül el jól hallhatóan a két szín.

Tipp: bár már említettem, de nem árt ismételni. Ezek az állományok .config/sublime-text/Packages/User mappában lesznek, így ha mented a könyvtárat...

Szövegből hang generálása

Alapvetésként én fejezetekre bontom a szöveget, nem a teljes könyvet olvastatom fel egyben. A túl nagy több órás anyagban nehézkes a navigálás.

Eljutunk a fejezet végére, akkor a fejezetet vagy 1000...1500 sornyi anyagot külön állományba másolom, majd a címet és a fejezetcímet, számot az elejére a végére pedig egy "vége az x. fejezetnek" szöveget rakok. Rend a lelke mindennek. Majd a szöveg állomány mentésre kerül.

Az így elkészített részt alakítom át. Az átalakítás egyszerű. Már leteszteltük a nyelvi modellt, sebességet és a típust. Így csak be kell másolni a szöveg mezőbe a Speech Note programban. Majd a File menü, Export to a file, és megadjuk az egyedi nevet a kimenetnek. A hang tulajdonságait is megadhatjuk, én mp3 és a legjobb minőséget választottam. És export gomb. A géptől függően hosszabb, rövidebb idő alatt legenerálja a hanganyagot.

Ami fontos: a fájl név legyen értelmes. Én az Író - Sorozat - Cím és a fejezet sorszáma kötött formátumot használom.

Utómunka

Már elvileg van több hangfájlunk, amit le is ellenőriztünk, hogy megfelelő. Két lehetséges utómunka van. Aki akar a hangon változtathat egy kicsit pld. az Audacity programmal. EQ beállítás, esetleges sebesség változtatás picit jobb eredményt ad. A sebesség szerintem az eredetinek a 0.85 értéke, amit nem lehet a Speech Note-ben beállítani, csak tizedes lépésközt. Így az Audacity-ben picit finomítani lehet.

A másik fontos téma - mert rend a lelke mindennek - az ID3Tag-ek kitöltése. Én erre a EasyTag programot használom, amit itt mutattam be.

Pár kérdés

Logikus kérdés a minőség. Nem hangjáték, nem profi felolvasási minőség, de hallgatható. Sok olyan regény van, amit soha nem fognak felolvasni, hiába akarnám hangoskönyvben megvenni, nem fogom tudni.

Időben mennyi? Az első könyv amit magamnak hangosítottam, 450 oldalas volt. Ez gyakorlatilag nyolc óra nettó munka volt. Most amikor van gyakorlatom ez nettó három óra.

Terjeszthető pld. youtube csatornán az ilyen? Nem. Bár az e-bookot megveszi az ember, de ezzel csak magán felhasználásra kap engedélyt. Igen, tudom, hogy van a youtube-n több olyan oldal, amin vannak gépi felolvasások, de az csak a "három T" közül a Tűr kategória. Nem jogszerű, és ha bejelenti a kiadó, szerző, vagy bármilyen jogtulaj, akkor törlik az oldalt. Az sem hatja meg a cenzorokat, ha kiírod, hogy a vakoknak készült, meg az sem, ha azt mondod, hogy csak magadnak tetted fel. Bár az is igaz, hogy jelenleg a csak gépi felolvasásokat nem üldözik, de jobb a békesség.

A Calibre is fel tud olvasni! Igen, ki kell próbálni és... kicsit rosszabb az alap felolvasás, mint a fent leírt módszer.

Ha hozzáfüzni szeretnél valamit, akkr azt a linuxmint.hu oldalon megteheted!