UNIX-ympäristö XP:lle
Windows XP:ssä kiinni oleva analoginen tv-kortti (Hauppaugen PVR PCI) teki työtä käskettyä ja nauhoitti vajaat 2.5 tuntia pitkän pätkän Roman Polanskin Macbethiä. Valitettavasti vain tiedostosta tuli yli 4 GB kokoinen. Tämä ei ollut ongelma narutuksen kannalta, eikä se XP:llekään ollut ongelma. Kaikille DivX konversio-ohjelmilleni se sen sijaan oli ylivoimainen este. Lisäksi kaikki katseluohjelmatkin olivat ajalta ennen isoja tiedostoja, joten elokuva oli kyllä tallessa, mutta saavuttamattomissa.
Hauppaugen kortti tuottaa raudalla MPEG2 transport streamia, jonka video bitrateksi olen valinnut 4 Mbps. Korkeampi bitrate veisi liikaa tilaa, ja matalampaa en oikein viitsi katsoa. Analoginen signaali on jo sisään tullessa hiukan häiriöinen, joten tuo sopii hyvin ajan siirtoon ja satunnaisiin ohjelmien arkistointeihin DivX-formaatissa. Konversiossa lievä kohinan poisto ja resoluution pudotus siistivät kuvanlaatua riittävästi.
Macbethin kestoksi oli ilmoitettu 140 min, joten ajastin nauhoitukseen 145 min, ja alun 1 min ennen lähetystä. Satuin vilkaisemaan nauhoitusta juuri kun elokuva oli loppunut, joten pysäytin tallennuksen n. 138 min kohdalla. Syntynyt tiedosto oli silti yli 4 GB, ja kun yritin tarkistaa sen sisällön vanhalla Media Playerilla, niin sen mielestä pätkällä oli pituutta vähän toista minuuttia. Niinpä yritin konvertoida sen FlaskMPEG:llä ja DivX:n Pro-koodekilla, mutta FlaskMPEG totesi tiedoston olevan -1 MB kokoinen. Grrr.
Hauppaugen koodekissa on jokin ongelma, josta syystä sen tekemät MPEG2-tiedostot eivät halua toistua kunnolla Windows 2000/NT/XP:ssä. Niinpä esimerkiksi modernimmat freeware-sovellukset eivät käy, koska ne lukevat tiedostoa käyttäen ilmeisesti sitä rikkinäistä rajapintaa (joka lienee normaalisti paljon tehokkaampi). FlaskMPEG sen sijaan ymmärtää tiedostomuotoa OK (koska se kaiketi käyttää lukemiseen jotain kivikautisen tehotonta tapaa). Koska sovelluksia ei voi vaihtaa, niin ainoaksi ratkaisuksi jää muokata "rikkinäistä" tiedostoa.
UNIX-ympäristössä ongelmaan olisi helppo ratkaisu: dd. Niinpä päätin kokeilla Cygwinin UNIX-ympäristöä Windows:lle. Onneksi sen pitäisi toimia jota kuinkin kaikissa 32bit Windowseissa, ja asennus sujuikin ongelmitta. Hiukan aritmetiikkaa, ja yli 4 GB tiedostosta on pudotettu alusta 30 MB pois, ja sen jälkeen kopioitu 4095 MB toiseen tiedostoon. Nyt 98SE:n Media Player näyttää elokuvan ongelmitta, vaikka käynnistys tuntuukin kestävän normaalia kauemmin. Alussa on vielä noin 10 sekuntia turhaa, ja lopputekstien jälkeen jää vaivaiset 30 sekuntia extraa. Menipä tiukalle! Totean, että käytännön maksimi nauhoitukselle on 2 h 15 min, mikäli haluaa pitää tiedoston koon alle 4 GB:ssä.
Vaan vieläkö FlaskMPEG osaa tuon muuttaa DivX:ksi? Eipä tietenkään: joko alusta puuttu jotain header-tietoa, tai se ei osaa synkronoitua streamiin. Vartin kevyt surffailu Googlen kera ei tuota tulosta MPEG2 transport streamin frame formaatista tai synkronointisekvenssistä, joten toinen perustyökalu UNIX-puolelta käteen: od.
Originaalia tiedostoa heksadumppaamalla havaitsen, että siellä toistuu säännöllisesti tavupari "0000". Lisätutkinta paljastaa, että noin 1200 tavun välein esintyy seuraavia tavusarjoja: "00000001", "00000002", "00000003", "00000004", jne. Niinpä kopioin originaalista ensimmäiset 136 tavua (kaikki ennen "00000001"). Seuraavaksi poistan toimivasta <4 GB tiedostosta alusta 676 tavua (kaikki ennen seuraavaa "000000XX" sekvenssiä), ja lopuksi yhdistän tuon 136 tavun "headerin" ja mahdolliselta frame-rajalta alkavan tiedoston. Media Player tykkää ja FlaskMPEG koodaa!
Cygwinin UNIX-ympäristöä en sen enempää ehtinyt testata, mutta tarvitsemani sovellukset tekivät juuri sen mitä pitikin. Onnekas arvaus yhdistettynä leikkaa-ja-liimaa -tekniikkaan tuotti tulosta. Nyt päässä pyörii jo ajatus SSH-serverin asennuksesta, shellin virittämisestä, perlin pulauttamisesta, crond:n laittamisesta ja muutaman tukiskriptin kirjoittamisesta. Noinkohan nuo DivX-konversiot saisi automatisoitua? Pari muutakin juttua voisin tehdä, kun kerran käytössä on toimivat ja tehokkaat työkalut...