Video opnemen en afspelen

##### > Index <

Video opnemen en afspelen Analoge tape audio- en videorecorders Digitale media Moving Pictures Expert Group (MPEG) Het fenomeen aandacht MPEG-4, DivX en XViD Multimedia frameworks

##### > Top <

Video opname en weergave problemen kunnen zich op allerlei nivo's voordoen.

#### Analoge tape audio- en videorecorders

##### > Top <

Om audio en video op te slaan hebt u veel schijfruimte nodig. Om de opslag betaalbaar te houden werden magnetische banden gebruikt. Tape was immers het goedkope massa opslagmedium bij uitstek. En met de ontwikkeling van gebruikersvriendelijke audiocassetterecorders (Philips, 1963) was al veel ervaring opgedaan.

De opslag van audio via het magnetiseren van bandjes onder de magnetische koppen van cassette-recorders gaf relatief veel vervorming. Niet alleen door de niet altijd constante bandsnelheid, maar ook doordat hoogfrequente bandruis de weergave van de hoge tonen maskeerde. En omdat de band met constante snelheid draait werd bitarme "stilte" met evenveel bandbreedte (en dus ruis) weergegeven als een spetterend symfonieorkest. Pas na toepassing van de slimme geluidscompressie techniek van Ray Dolby kon de bandbreedte van de audiocasette beter worden benut.

De eerste analoge VHS videocassetterecorders voor de consumptiemarkt (JFS, 1976) gebruikten videocassettes om data op te slaan. VHS, de afkorting voor zowel Vertical Helical Scan als Video Home System kon 240 beeldlijnen opslaan. S-VHS (1987) slaat 420 lijnen per beeld op.

VHS en S-VHS kunnen zowel het Europese televisiesignaal PAL als in het in Amerika en Azië gebruikte NTSC-systeem video opslaan. Maar het ene beeldsysteem kan niet als het andere afgespeeld worden.

#### Digitale media

##### > Top <

In de jaren zeventig kwamen de eerste digitale audiorecorders op de markt (Denon). Ze gebruikten Pulse-code modulation (PCM) door een digital signal processor (DSP) om de analoge audiosignalen van microfoons als reeksen van enen en nullen (digitaal) op de band op te slaan. Hierbij konden ze gebruik malen van compressietechnieken die al bekend waren van tape backup apparaten.

Tijdens de analoog naar digitaal omzetting (bijv. scannen, digitaal opnemen) gaat informatie verloren, maar de eenmaal gedigitaliseerde informatie (een tif, txt of wav-bestand) kan exact worden gekopieerd. Bij het analoog kopiëren (een fotokopie maken van een fotokopie) gaat daarentegen altijd informatie verloren. Vandaar dat bibliotheken en bedrijven hun analoge informatie (papier, microfilm, magnetische band) steeds meer digitaliseren. En het liefst opslaan op een redundante manier die gegevensverlies door mediarot en krassen voorkomt.

Ook het Compact Disc Digitale Audio Systeem (audio CD, 1982) en de CD ROM (1983) sloegen de informatie digitaal op. Via speciale technieken die van redundantie gebruik maakten konden de cruciale data tegen krassen en andere ongemakken worden beschermd.

Tegenwoordig kan digitale informatie op allerlei manieren worden opgeslagen en verspreid. Dankzij foutcorrectie mechanismen in de hard-en software voor transport en reproductie van digitale media kan deze altijd exact worden gekopieerd. Daarnaast worden digitale bestanden en streams veelvuldig gecomprimeerd en versleuteld om ze economischer en/of meer klant- of regiogericht te verspreiden. Voor het afspelen van de gecodeerde data zijn hardware of software decoders nodig. Om dit coderen van beeld en geluid te standaardiseren zijn de MPEG formaten bedacht.

#### Moving Pictures Expert Group (MPEG)

##### > Top <

De standaarden van de Moving Pictures Expert Group (MPEG) zijn algemene 'lossy" methoden voor het coderen van bewegende beelden en geluid. De MPEG codering is "lossy" omdat dit veel minder rekenkracht en bandbreedte vergt.

De MPEG-1 (1991) standaard is vooral bekend door het MPEG-1 Layer 3 (MP3) audiocompressieformaat. De MPEG-1 videocodecs beperkten zich tot niet-geïnterlinieerde beelden in een klein formaat.

MPEG-2 (1994) wordt o.a. in DVD's gebruikt. MPEG-2 varianten kunnen zelfs High Definition TV opnames met een beeldstroom van 1,5 GBit/s tot een bruikbare bandbreedte temmen. Aanvankelijk was daar de MPEG-3 standaard voor bedoeld, maar MPEG-2 compressie tot een "high level" bandbreedte van 80 MBits/s levert al een beeldscherm op van 1920×1080 beeldlijnen bij 30 frames/s. En dat is genoeg voor distributie van digitale televisie via de kabel.

Ter oriëntatie: De "medium level" MPEG-2 bandbreedte van een DVD (VOB bestand) is tussen de 0,3 en 10 MBit/s. Hiermee worden 120 minuten video geleverd. Zouden deze 120 minuten als pure HDTV camera "raw streams" op DVD's worden vastgelegd, dan zou u 120*60*1,5/8 GiB = 1350 GiByte nodig hebben. Kortom: MPEG-2 compressie maakt heel veel uit. Het geeft maar gering "subjectief" kwaliteitsverlies zolang de belangrijkste beeldobjecten (je focus) relatief stil staan. Maar hoe komt dat?

#### Het fenomeen aandacht

##### > Top <

In dit verband vond ik het volgende fascinerend: Volgens een schatting van neurobiologen verwerkt de mens via zijn zes zintuigen maar liefst 400 gigabit/s aan informatie (een bandbreedte in de orde van het snelste computer geheugen of vele HDTV televisies tegelijkertijd), waarvan slechts 2000 bits/s (een traag V.22bis 600 baud modem met een mimien beeldvenster) bewust.

Oftewel het grootse deel van onze onmiddellijke werkelijkheid gaat verloren. Omdat het onze aandacht niet heeft. Onze bewuste aandacht concentreert zich slecht op een mimnimal fractie van de aangeboden informatie.

Onze zintuigen nemen die 400 gigabit/s wel waar, maar onze hersenen verwerken het vrijwel altijd onbewust. Het meeste gaat het ene oor in en het andere oor uit, zonder dat we er bewust iets mee gedaan hebben. We luisteren maar met een half screenend oor. En we horen soms slechts dat wat we willen horen. En in de zeldzame gevallen dat we ons echt open stellen en we afstand durven te doen van ons geconditioneerde bewustzijn, horen we ineens heel bewust datgene wat ons verrrast.

Maaar het meerdeendel van de ingevoerde informatie ontsnapt aan onze aandacht. Waar een hond opgewonden raakt van een geurspoor, hebben onze meer visueel ingestelde hersenen geleerd het te negeren. We nemen dus maar een heel klein deel van onze werkelijkheid bewust waar.

Die lacune wordt duideliijk als u gevraagd wordt iets dat u zojuist 100% gezien hebt, na te tekenen. Hoe was het ook al weer? Het blijkt dat u niet “objectief” op de details hebt gelet.

Tegen onze kinderen die terecht opmerken dat hun benen moe zijn, zeggen de ouders: Niet zeuren, doorgaan, waardoor hun nakroost aangemoedigd wordt om hun vanuit het ruggemerg naar de cortex gelekte beensignalen als hersenspinsels te negeren. Is het dan vreemd dat de meeste volwassenen de RSI signalen van hun lichaam niet herkennen?

De meeste subliminale prikkels worden slechts heel globaal op subcorticaal niveau afgedaan, bijvoorbeeld door een extra adrenaline afgifte door het geruis van de onze PC (een aantoonbare stressor). En na oefening worden bewegingszin en motoriek uiteindelijk soms slechts op ruggemerg niveau afgewikkeld via onwillekeurige reflexen.

Door de bewuste corticale focus op de in onze beleving echt belangrijke informatie - de woorden en gebaren van onze gesprekspartners, maar graag niet te veel en niet al te snel, want we hebben slechts die 2000 bits/s /s aan bandbreedte in ons werkgeheugen ter beschikking- worden we bij taken als selectief luisteren niet afgeleid door minder belangrijke zaken. Daarom zeggen we tegen de ordeverstoorders: Nu even niet. Ik ben bezig. We willen het overzicht door teveel taken in ons werkgeheugen immers niet te verliezen. En dus negeren we vaak ook de signalen van ons lichaam.

Aan de andere kant zijn we wel geconditioneerd om te reageren op de ringtones van onze mobieltjes. Of meer aangeboren: Moeders worden wakker van hun huilende baby. Ze herkennen intuïtief onder vele huilende baby's dat ene geluid. Dergelijke deels bewuste, deels half-bewuste signalen werken als de interrupts van de PC, die afhankelijk van hun belang met een niet door het bewustzijn te negeren pop-up of door een achtergrondroutine afgehandeld worden.

Door rijping en ervaring (conditionering) worden onze hersenen efficiënter in het verwerken van de in onze cultuur belangrijk geachte informatie. Jonge kinderen hebben nog eenvoudige beelden nodig (Dick Bruna, TikTak) omdat ze al snel overprikkeld raken. Hun ouders vervelen zich hierbij en zoeken bewust nieuwe prikkels op (ze kijken bijvoorbeeld verwonderd naar de extase van hun kind bij voor hun saaie TikTak).

Het niet kunnen focussen op het essentiële, is voor lijders aan aandachtstekortstoornis (ADHD), overspannenheid en oververmoeidheid een probleem. De beperkte bandbreedte van ons aandachtsveld wordt in de oververmoeidheid situaties teveel ingenomen door onbelangrijke stimuli, waardoor ze het zicht (de focus) op hun voorgrondtaken verliezen. Door de aldoor optredende pop-ups raken ze het overzicht kwijt en werken dus niet meer doelgericht.

De moraal: Alleen via strenge reductie kunnen we zinvolle data (=informatie) uit de zee van de binnenkomende gegevens destilleren. Deze beperking tot het voor de toeschouwer essentiële is de kern van iedere kunstzinnige film- of verhaaltechniek. De sobere zwart-wit filmstijl van Ingmar Bergman maakte meer indruk dan veel pompeuze breedbeeld Hollywood spektakels. En daarom werken de "lossy" compressie methoden voor audio en video ook zo goed. Want heb je aan gibabits "raw" dataverkeer als je maar heel weinig informatie bewust kunt verwerken? Je moet wel filteren of anders wordt je gek.

#### MPEG-4, DivX en XViD

##### > Top <

Als sjabloon voor de officiële MPEG-4 (MP4) standaard (1998) diende Apples Quicktime Movie bestandsformaat uit 1991. Het was gebaseerd op MPEG-1, maar liet multimediaobjecten, een lagere bitrate-encoding en Digital Rights Management (DRM) toe. Daar had de muziek- en filmindustrie wel oren naar. Om een graantje van deze lucratieve markt mee te pikken besloot Microsoft haar eigen Video for Windows (VfW) standaard (lees: codec en bestandsformaat) aan te maken.

Hoewel Microsofts Audio Video Interleave (AVI) formaat (1992) afweek van de MPEG standaard, werd zij door massale verspreiding via het populaire Windows wel de de facto standaard. Microsoft gebruikte een bekende marketing truc: Windows 3x gebruikers kregen de Microsoft MPEG-4 decoder "gratis", maar iedereen die AVI-bestanden optimaal in MPEG-4 wilde coderen moest royalty's aan Microsoft betalen. En natuurlijk werden die kosten uiteindelijk weer op de legale eindgebruikers verhaald.

DivX 3 (1998) was een door DivX Networks gekraakte variant van Microsofts Video for Windows MPEG-4 Version 3 codec. De kennis was er wel, maar processen dreigden. DivX networks besloot closed source te gaan, maar enige open source programmeurs besloten op eigen houtje door te gaan. Hun open source XviD project verbeterde de DivX 3 hack en liet ook het gratis coderen toe. Mplayer en mencoder maken hier gebruik van.

De videocompressie van MPEG4 is enige malen sterker en slimmer dan die van MPEG2, zodat er van een 4 GiB DVD met 120 minuten beeld en geluid een 700 MB AVI, MP4 of MPEG4 bestand overblijft zonder al te veel kwaliteitsverlies. Dit maakt de door Mplayer, DivX en XViD MPEG4 varianten aantrekkelijk op P2P netwerken en op het internet.

Sindsdien propageert Microsoft haar nog niet ontsloten, want zwaar gepatenteerde Active Streaming Format (ASF) containers. Het later naar Advanced Systems Format (ASF type 1) herdoopte bestandsformaat heeft veel voordelen boven AVI, maar alleen de Windows Media Speler kreeg de officiële codecs voor het decoderen mee. Mplayer kan de via het zogeheten Microsofts Media Services (MMS) of het Real Time Streaming Protocol (RTSP) verzonden Windows Media Audio (WMA) en Windows Media Video (WMV) bestanden in ASF type 1 containers afspelen en opslaan, maar omdat de codecs closed source zijn en ASF veel ruimte laat voor Digital Rights Management methoden zoals encryptie zal dit ook wel eens mislukken.

#### Multimedia frameworks

##### > Top <

Zowel van Quicktime als van Video for Windows verschenen er in de loop der tijd geavanceerdere versies. Evenals bij de MPEG standaarden gaat het om object georiënteerde container-bestandsformaten die van alles kunnen bevatten. Vergelijk ze met een Word(pro) bestand dat via OLE ook spreadsheets kan insluiten. Dit maakt nieuwe versies compatibel met de oude en laat ondertussen wel meer features (zoals DRM) toe. Zo liet QuickTime 4.x (1999) als eerste streaming video toe via de QuickTime Streaming Server. RealNetworks RealVideo (1997) was Apple hierin voorgegaan. Ook het via ASF gestroomde Windows Media Video (WMF) stamt uit 1999.

Rond de Quicktime (MOV), Video for Windows (AVI) en ASF bestandsformaten werden hele multimedia frameworks opgebouwd: Het ging dus niet alleen om een "open" container bestandstype met closed source codecs voor de belangrijkste video onderdelen, maar ook om een API voor het bewerken van video en om software voor het afspelen van manipuleren van de digitale video. Kortom: een voor closed source ontwikkelaars attractief pakket. Hier kwam nog bij dat de voor het framework benodigde mediaspelers (Apples QuickTime Player en Windows Media Player) en codecs al bij het besturingssysteem werden geleverd, tot ergernis van Real Networks, die dit natuurlijk als een concurrentievervalsing zag.

#### Hardwareondersteuning

##### > Top <

Een meer subtiel concurrentievoordeel van Microsoft zit hem in het feit dat PC hardwarefabrikanten in de praktijk alleen op hun prestaties op het Windows platform worden afgerekend. Hoe een geluidskaart of videokaart onder Linux of OS/2 draait wordt niet of veel later getest. En dus zullen de hardwarefabrikanten hun - vaak te snel uitgebrachte - stuurbestanden en hardware vooral voor Microsofts DirectX API willen optimaliseren. Want die wordt door de meeste benchmarks benut.

Bewust voor de andere besturingssystemen gebruikte open standaarden als de Advanced Linux Sound Architecture (ALSA), de Simple Direct Layer (SDL) of Open Graphics Library (Open GL) geoptimaliseerde hardware zien we maar zelden. Hun ondersteuning is vaak niet dan een legacy bijproduct. Kortom: wilt u snel coderen en decoderen dan bent u vooral afhankelijk van de multimedia extensies van de processor. Maar gelukkig werden die sneller omdat de meeste Windows applicaties trager werden.

Microsofts encoding tools (zoals Windows Media Encoder en Windows Movie Maker) spelen vrolijk op dit concurrentievoordeel in door gebruik maken van Microsofts DirectX Media Objects (DMO) framework. Deze Windows applicaties zijn inderdaad snel op de voor Windows (DirectX) ontworpen hardware. Maar niet toevallig leveren deze encoding tools bij voorkeur bestanden af in de closed source WMA en WMV bestandsformaten.

#### DVD spelers

##### > Top <

Van Sony's and Philips's Digital Video Disc (DVD) spelers (1995) kwamen er meerdere typen DVD spelers en schijven op de markt. Dit omdat de televisiesignalen per land kunnen verschillen.

De belangrijkste analoge televisie coderingssystemen zijn NTSC van National Television System Committee uit de Verenigde Staten en het Duitse Phase Alternating Line (PAL) in Europa. Frankrijk koos voor een eigen systeem (SECAM) om haar noodlijdende TV industrie te beschermen. Alle DVD standaarden hebben verschillende resoluties (720×480, 704×480, 352×480 en 352×240 pixels voor NTSC en 720×576, 704×576, 352×576 en 352×288 pixels voor PAL. Ook het aantal beelden per seconde (frame-rate) zijn verschillend: 30 beelden/s voor NTSC en 25 beelden/s voor het als technisch superieur beschouwde PAL.

De verschillende standaarden geven al aan dat het consumentenbelang niet voorop stond. Het beschermen van de nationale industrieën woog zwaar. Iets dergelijks zien we ook terug in het DVD fenomeen regiocode: Films die in de VS (regiocode 1) al in de bioscoop uitgebracht waren werden op DVDs gezet die alleen op Amerikaanse DVD spelers afgespeeld konden worden. Dit moest voorkomen dat ze op Europese DVD spelers (met regiocode 2) bekeken konden worden voordat ze in de Europese bioscoop waren verschenen. Omdat de import en export van DVD's en DVD spelers vrij was, gaf dit nog wel eens onaangename verassingen. Via een BIOS hack was de DVD speler op de neutrale regiocode 0 te zetten.

Voor MPlayer maakt het gelukkig niet zoveel uit. Die detecteert gewoon de in het VOB-bestand opgegeven MPEG-2 resoluties. En heeft lak aan het al in 1999 gekraakte Content Scrambling Systeem en regiocodes. Maar het ROM van uw CD of DVD speler misschien niet. U hebt dan een ripper nodig om de data van de DVD te lezen. Ook bij het branden van een DVD is het gebruikte videosysteem PAL (EU) of NTSC (VS) zeker iets om rekening mee te houden (zie Draad/2 no 4 2006: Het maken van Video-DVD's in eCS ).

## Digital Versatil Disk (DVD)

#####

##### > Top <

De Digital Versatile Disc (1995) kan allerlei bestanden en bestandssystemen bevatten. Zo bestaan er DVD-Video, DVD-Audio, DVD-ROM en diverse DVD recorder schijven. Een single layer DVD (DVD-5) kan 4,7 miljard byte (4,3 GIB) bevatten. Een dual layer DVD (DVD-9) bevat het dubbele. Klassiek worden DVD's geformatteerd als UDF. Afspeelbare Digital Video Disc zullen zowel het ISO 9660 bestandssysteem als het UDF bestandssysteem bevatten.

#### De ISO 9660 bestandssystemen

##### > Top <

De International Organization for Standardization (ISO) regelt allerlei industriestandaarden. Voor de CD en later de DVD werden afspraken gemaakt over het gebruikte bestandssysteem.

Het als ISO 9660 bekend staande CD bestandssysteem kreeg in de loop der tijd meerdere variaties (levels) en uitbreidingen: ISO level 1 ondersteunt slechts de 8.3 bestandsnamen van DOS en directories tot 8 nivo's diep, level 2 ondersteunt bestandsnamen van 31 tekens en level 3 staat fragmentatie toe. De ISO 9660 Rock Ridge extensie ondersteunt Unix UGO bestandsrechtensysteem en lange namen. Joliet ondersteunt bestandsnamen in Unicode. De El Torito extensie maakt de CD of DVD bootbaar.

Als u iets brandt voor een standalone CD of DVD speler kies dan voor de eenvoudige DOS namen van ISO Level 1 en bijbehorende ISO 9660 tekenset. Maar voor een backup kiest u liever ISO level 2 of 3 met Joliet type lange bestandsnamen.

Vanwege de ontbrekende UDF ondersteuning van Windows 95, bevatte het door DVD videodisks gebruikte UDF versie 1.02 bestandsformaat (1996) een UDF/ISO brug naar een corresponderend ISO 9660 Level 1 CD-ROM bestandssysteem. De paden en namen van DVD videobestanden (\VIDEO_TS\VIDEO_TS.IFO) zijn zelfs onder DOS leesbaar.

Om die reden kunt u voorbespeelde DVD's gewoon benaderen via de OS/2 ondersteuning van CD ROM's . Voorwaarde is wel dat het ISO 9660 level 1 bestandssysteem niet opzettelijk verminkt is door een CSS beveiliging.

    rem Enhanced IDE driver(DANIS506.ADD)
    IFS=C:\OS2\BOOT\DANIS506.ADD
    rem General Storage Device Manager(OS2DSASD.DMD)
    IFS=C:\OS2\BOOT\OS2DSASD.DMD
    REM CD-ROM File System (CDFS.IFS)
    IFS=C:\OS2\BOOT\CDFS.IFS /Q
    rem General CD-ROM manager (OS2CDROM.DMD)
    DEVICE=C:\OS2\BOOT\OS2CDROM.DMD  /V /Q
    rem OS2CDROM.DMD alternatief in eCS 1.2(IBMCDROM.DMD)
    rem DEVICE=C:\ECS\BOOT\IBMCDROM.DMD
    rem CDROM ondersteuning voor DOS
    DEVICE=C:\OS2\MDOS\VCDROM.SYS

Ook RSJ CD-Writer File System gebruikt alleen maar het ISO 9660 bestandssysteem bij het beschrijven van DVD's. Vandaar ook dat de maximale bestandsgrootte onder het RSJ CDWFS bestandssysteem 2 GiB is.

    REM *** RSJ CD-Writer File System ***
    BASEDEV=DANIATAPI.FLT /V /RSJ
    rem DaniATAPI.FLT vervangt RSJIDECD.FLT,IBMDECD.FLT,IBMATAPI.FLT.
    rem BASEDEV=RSJIDECD.FLT
    IFS=C:\CDWFS\CDWFS.IFS
    RUN=C:\CDWFS\CDWFSD.EXE -p "c:/temp" -c20000 -b2048 -t2 -i3 -s0
    DEVICE=C:\CDWFS\RSJSCSI.SYS
    BASEDEV=LOCKCDR.FLT
    rem ASPI-Router voor CD en DVD's branden
    BASEDEV=OS2ASPI.DMD /ALL
    DEVICE=F:\os2\system\aspi11b6\ASPIROUT.SYS

Waarvoor dient OS/2's UDF.IFS dan wel? Voor het schrijven van data op een (re)writable CD's, DVD en DVD RAM schijven. En van flash usb-geheugensticks of zelfs vaste schijven. Recente UDF versies ondersteunen bestandsnamen tot 256 tekens, padnamen tot 1024 tekens, veel meer (terabytes) en grotere (> 2 GiB) bestanden, mappen en subdirectories dan enig ISO 9660 bestandssysteem.

#### Universele Disk Formaten

##### > Top <

Het door DVD's en DVD RAM schijven (1998) gebruikte Universal Disk Format (UDF) bestandssysteem (ISO 13346) slaat op optische media data in sectoren van 2048 bytes op. De UDF sectoren liggen op een enkel spoor (single track). Een CD of DVD speler draait immers spiraalvormige rondjes van buiten naar binnen. Iedere sector bevat een ECC/CRC controle waarmee na te gaan is of de sector goed uitgelezen is. Het UDF bestandsformaat is universeel in die zin dat het op allerlei media past en voor allerlei doeleinden is te gebruiken. Het kent daarom ook vele variaties.

Door de verschillende versies en uitbreidingen van het UDF bestandssysteem en ook door de ondersteuning van encryptie is het niet vanzelfsprekend dat uw combinatie van DVD lezer/speler ROM en UDF stuurbestand uw DVD's altijd goed inleest of aanmaakt. Het komt dus regelmatig voor dat bekende DVD brandersoftware als Nero DVD's branden in een UDF versie die niet door uw DVD speler of uw OS/2 , Windows of Linux drivers worden ondersteund.

De bestanden kunnen op verschillende manieren in UDF worden opgeslagen: plain, VAT of spared.

Het oudste plain UDF schrijfformaat laat op zich willekeurige lees en schrijf acties toe (packet writing). De bestandslokaties worden in directory ingangen vastgelegd. Plain UDF kan daarom ook worden gebruikt op vaste schijven en DVD RAM media. Het wordt door vrijwel alle apparaten en UDF drivers ondersteund.

CD+R en DVD+R media kunnen echter maar eenmaal worden beschreven (write-once media). Daarom worden het bestandssysteem (ISO 9660 en/of UDF) en de data in één keer van begin tot eind gebrand. De blokken die op de vaste schijf (in het iso bestand) willekeurige over de partitie mogen worden verspreid, worden tijdens het branden in de juiste volgorde als een gelijkmatige stroom van informatie aan de speler aangeboden. Als dit proces voortijdig onderbroken wordt gaan de inhoud van de schijf - en vaak ook de schijf zelf - verloren.

De VAT variant van UDF laat het in stappen (incrementeel) beschrijven en wissen van DVD-R schijven toe. Een UDF schijf kan dan tijdens een brandsessie bijvoorbeeld voor de helft beschreven worden en tijdens een andere brandsessie voor de andere helft. Worden bestanden "gewist", dan wordt dit slechts in de VAT structuur aangeven. Maar omdat de sectoren van +R schijven maar een keer beschreven kunnen worden komt er na het "wissen" van oude bestanden nooit ruimte vrij. En met speciale hulpmiddelen zijn de gewiste data nog steeds te lezen.

De echte (rewritable) CD en DVD +RW laten zich enige honderden malen beschrijven. Data is daarom ook te wissen door er een nieuw bestandssysteem op te schrijven of (veiliger) te overschrijven met nullen. Voor deze schijven is de "spared" UDF formaat ontworpen, dat net als een vaste schijf over reserve sectoren beschikt, die gebruikt kunnen worden om versleten sectoren te vervangen (remappen). Overigens kunnen lang niet alle UDF apparaten hiermee overweg.

#### UDF ondersteuning van eComStation

##### > Top <

De OS/2 UDF driver van IBM wordt in de CONFIG.SYS geladen. Hij werkt evenals JFS.IFS samen met de Universal language support driver UNICODE.SYS.

    DEVICE=C:\OS2\BOOT\UNICODE.SYS
    rem CD-RW, DVD-ROM and DVD-RAM-Filesystem (plaats voor CDFS.IFS)
    IFS=C:\OS2\BOOT\UDF.IFS /Q

Vanaf UDF versie 1.5 (1997) liet UDF "packet writing" op herschrijfbare CD en DVD media toe. Windows 2000 en de Linux 2.4 kernel kunnen dit bestandsformaat (zonder hulp van Nero e.a.) slechts lezen, maar alleen Windows Vista, Mac OS 8.6 l en Linux 2.6 kunnen het ook zelf beschrijven. Onder OS/2 kon dit al veel eerder. Zie: Draad/2 van april 2004.

U formatteert een herschrijfbare CD of DVD schijf met:

    FORMAT <drive:> /FS:UDF /L

Voor zover ik kon nagaan ondersteunt de OS/2 UDF.IFS driver van IBM UDF 1.0x (met UDF/ISO-Bridge techniek) tot en met 2.0.1. De "packet writing" van UDF 1.5 op CD-R(W) en DVD-R(W) media wordt prima ondersteund, maar niet de Blu-Ray techniek van UDF versies 2.50 en 2.60.

Vraag: kun je een onder OS/2 aangemaakte DVD in je DVD speler afspelen? Bijvoorbeeld een torrent downloaden, deze met RSJ in ISO 9660 stijl als geheel of als UDF 1.5 "beetje bij beetje" naar een beschrijfbare DVD pompen? Ja dat kan, maar of het afspelen lukt hangt weer af van het ROM van je DVD-speler. Ik denk daarom dat je in RSJ het best voor het breed ondersteunde ISO 9660 level [1] kunt kiezen (NB: level 3 is de default). UDF 1.5 moet u meer zien als een medium voor backups.

#### Digital rights management (DRM) van DVD's

##### > Top <

Onder de noemer digital rights management (DRM) vallen allerlei methoden en technieken die bedoeld zijn om het copyright van digitale media te beschermen. Het varieert van een waarschuwing op de verpakking tot de versleuteling van de media (CD, DVD).

Om het illegaal kopieren tegen te gaan worden voorbespeelde commerciële DVD's meestal versleuteld. Dit kan door versleuteling van de de MPEG-2 bestandsinhoud, maar ook door versleuteling van de ISO ingangen op het UDF bestandssysteem. In het laatste geval worden de sectoren van de DVD schijf niet meer betrouwbaar door de OS/2 ISO CD/DVD of UDF DVD stuurbestanden gelezen. En wordt het afspelen op de PC, laat staan het rippen (de inhoud naar de vaste schijf kopiëren) een schier onmogelijke zaak.

De meest gebruikte DVD versleutelingsmethode is het Content scramble systeem (CSS) uit 1996. Vrij vertaald is CSS een de inhoud vervormend mechaniek. Om economische redenen wordt de MPEG-2 film hiermee niet volledig versleuteld, maar op gezette tijden gedeeltelijk vervormd. En wel zo vaak dat het niet meer leuk is om naar te kijken. Het decoderen van de streaming content gaat via een in de DVD speler ingebakken filter, die met een landcode en zijn eigen sleutels uitgerust is en hiermee de decryptie-informatie van de DVD kan aflezen.

De DVD Copy Control Association (DVD CCA) is de door de industrie gesponsorde organisatie die het gebruik van het CSS algoritme bewaakt.

Ze letten er dus op dat de soft- hardware die ervan gebruik maakt, zich netjes aan de regels houden. Zoals Power DVD onder Windows XP hiernaast. Zodat alleen DVD spelers die met de juiste CSS Decryption module uitgerust zijn, de inhoud van met CSS versleutelde DVD's nog betrouwbaar kunnen lezen.

Het content scramble systeem versleutelt DVD's op verschillende nivo's:

Authentificatie van de verwisselbare schijf. Natuurlijk zal een DVD schijf zich niet op eigen initiatief identificeren. Daarom stuurt de met CSS uitgeruste DVD-ROM lezer iedere DVD schijf een met zijn geheime sleutels uitgevoerde CSS challenge response. Alleen de met CSS versleutelde DVD's zullen hier adequaat op reageren. Een correct (dus met de juiste regiocode) uitgevoerde CSS authentificatie van de schijf levert de in de DVD verborgen geheime CSS disk key op. DVD spelers die niet over deze disk key en het geheim gehouden CSS algoritme beschikken zullen geen betrouwbare bestandsinformatie vinden als de UDF directory ingangen met deze disk key versleuteld zijn. Dit kan al gebeuren als uw DVD speler een region code bevat, waarvoor de DVD schijf op dat moment nog niet uitgebracht was. Ook al zijn de DVD en DVD speler inmiddels al 10 jaar oud.

Extra versleuteling van de sectoren met streaming data. Sectoren die MPEG-2 en andere streaming data bevatten kunnen op bestandsnivo met CSS worden versleuteld. Een DVD sector (PACK) begint met een MPEG-2 kop. Sectoren met streaming data bevatten bovendien een stream header, die o.a. aangeeft of de volgende code versleuteld is of niet.

Het maximale streaming cipher key algoritme dat vanuit de VS geëxporteerd mocht worden was 40 bits. Dat is relatief zwak, maar omdat de DVD spelers zowel de voor ontcijfering benodigde geheime sleutel als het ontsleutelingsmechanisme in de hardware bevatten (security by obscurity) waren de met CSS versleutelde DVD's niet zomaar te kraken.

In 1999 werd CSS toch gekraakt door Jon Lech Johansen en twee anoniem gebleven hackers. Ze toonden aan dat het niet nodig was om over de relatief zwakke sleutels in de hardware te beschikken en publiceerden het programma UnCSS dat de geheime CSS sleutels met bruut geweld kraakte. Sindsdien is het softwarematig rippen van DVD's, dus zonder de tussenkomst van de hardware CSS Decryption module gebruikelijk. Ook Warpvision bevat een dvdcss.dll die de met CSS versleutelde DVD schijven probeert te decoderen. De filmindustrie reageerde met een enhanced CSS, die niet door UnCSS wordt gedecodeerd, maar inmiddels wel weer door andere ripper programma's.

## MPlayer als DVD speler

#####

##### > Top <

Technisch gezien gaat het bij het afspelen van DVD's door Mplayer slechts om het in Mplayer openen van de Versioned Object Base (VOB) bestanden in de map VIDEO_TS op de DVD of een VOB bestand op de vaste schijf. Dit zijn MPEG-2 bestanden die door MPlayer achtereenvolgens vanaf een ISO, UDF of ander bestandssysteem worden gelezen, ontleedt, gedecodeerd en via de GUI weergegeven.

#### DVD bestanden op de vaste schijf afspelen

##### > Top <

Het afspelen van DVD's van de vaste schijf is doorgaans prettiger dan het afspelen van de DVD-speler van de PC. Er treden minder storingen op en het is rustiger. Bovendien zijn veel geripte DVD bestanden als bittorrent te verkrijgen.

Een DVD video staat de eigenlijke video-inhoud op in een DVD-Video Object met de extensie VOB. VOB is de afkorting van Versioned Object Base. De VOB-bestanden bevatten de film, het geluid, de ondertitels (subtitles) en het OSD menu in een stromend MPEG2 formaat.

Bij een DVD gaat het dus om "streaming media" : een gegevensstroom die vanaf de DVD speler of vanaf de vaste schijf met een vaste snelheid ingelezen moeten worden. De VOB bestanden zijn gecodeerd op vergelijkbare manier als MPEG-2. Sommige MPEG spelers spelen ze dan ook af.

Wat is het doel van deze IFO en BUP bestanden als het VOB bestand alles al bevat?

Het IFO-bestand is een DVD Informatiebestand dat gegevens bewaard over Hoofdstukken, ondertiteling en geluidsbestanden. Het gaat dus om metadata (data over data) die geraadpleegd kan worden buiten de streams om. Bijvoorbeeld: als u eerst de ondertiteling wilt instellen voordat u het streaming (en dus niet gemakkelijk te stoppen) VOB-bestand opent, kunt u het IFO bestand met de mogelijkheden van het VOB bestand raadplegen.

Een praktisch voorbeeld: Als u in FC/2 een IFO bestand opent en de string "nl" vindt, weet u dat er waarschijnlijk Nederlandse taalondersteuning in het bijbehorende VOB bestand zit.

In dit geval worden de volgende landencodes voor gesproken vertalingen (-alang) ondersteund: en, de, fr, it en es. Ze worden voorafgegaan een haakteken en zijn genummerd van 0 (en) t/m 4 (es).

De film ondersteund ondertiteling (-slang) in de volgende landencodes: en, de, fr, it, es, nl, sv, fi, no, da, pt, pl en el. Ook hier loopt de nummering vanaf 0. Nl heeft dus het nummer 5 ("j" toetsen totdat u bij Subtitles (5) unknown aankomt).

Soms komt een landencode meerdere malen voor. Een tweede "en" is dan bijvoorbeeld voor doven bedoeld en geeft commentaar: bijv. "laughter" als er gelachen wordt.

Het standaard opstarten van het VOB-bestand met mplayer -slang nl zou zinvol moeten zijn. Maar helaas wordt de Nederlandse ondertiteling vaak niet gevonden. Een reden kan zijn dat MPlayer de bepaalde informatie uit het IFO bestand mist. Hier heeft de mediaspeler een IFO parser (ontleder) voor nodig.

Het andere VOB-helper bestand heeft de naam BUP. Het BUP bestand is even groot als het IFO bestand. In feite is het zijn identieke backup. De reden hiervoor is simpel. Als er een kras komt over het streaming VOB bestand zal de DVD na een hapering doorspelen. Maar als er een kras komt op het "exacte" IFO bestand, dan zal de DVD lezer vastlopen. Maar via de backup komt het toch weer goed. Tenzij u heel veel krassen aanmaakt natuurlijk.

Onderzoekt u DVD's dan geeft de naamgeving en grootte van de bestanden een indicatie van wat wàt is.

Vaak staan de introductie van de film en het DVD-selectiemenu in het bestand VIDEO_TS.VOB. De hulpbestanden heten typisch VIDEO_TS.IFO en VIDEO_TS.BOP.

De eigenlijke film wordt verdeeld over meerdere VOB-bestanden, die in de door mij onderzochte DVD bestanden tot 1 gigabyte groot waren. Bijvoorbeeld VTS_01_0.VOB tot en met VTS_01_4.VOB.

Soms bevat de DVD nog andere kortere filmpjes (Trailers, The making of.. en BUMA/Stemra informatie) die dan genummerd zijn VTS_02_0.VOB t/m VTS_02_n.VOB, VTS_03_0.VOB t/m VTS_03_n.VOB, etc en ook weer over IFO en BUP metadata kunnen beschikken. Als u pech hebt begint de eigenlijke film achteraan.

Een voorbeeld uit de praktijk.

Bestand | Bytes | Beschrijving
--- | --- | ---
VIDEO_TS.BUP VIDEO_TS.IFO | 22528 22528 | Introductie en menu (metadata). VIDEO_TS.BUP is een backup van VIDEO_TS.IFO.
VIDEO_TS.VOB | 3530752 | Introductie en menu.
VTS_01_0.BUP VTS_01_0.IFO | 110592 110592 | De metadata van de eigenlijke film. VTS_01_0.BUP is een backup van VTS_01_0.IFO.
VTS_01_0.VOB VTS_01_1.VOB VTS_01_2.VOB VTS_01_3.VOB VTS_01_4.VOB | 5507072 1048562K 1048444K 1048296K 861536K | De hoofdfilm (in een MPG2 variant gecodeerde streaming content) wordt in 5 VOB bestanden geleverd. Het gaat om dvd://1.
VTS_02_0.BUP VTS_02_0.IFO | 18432 18432 | De metadata van de trailer.
VTS_02_0.VOB VTS_02_1.VOB | 10240 64167936 | De content (streaming media) van de trailer.
VTS_03_0.BUP VTS_03_0.IFO | 18432 18432 | De metadata van een didactisch filmpje over auteursrechten.
VTS_03_0.VOB VTS_03_1.VOB | 10240 26243072 | Een kort filmpje waarin gewaarschuwd wordt tegen het illegaal gebruik van de DVD.

In de regel kunt u een met bittorrent gedownloade video DVD bekijken door de VOB bestanden te openen.

#### Online Screen Display (OSD)

##### > Top <

Mplayer beschikt over een Online Screen Display (OSD) waarmee onder andere de ondertiteling van de DVD's worden weergegeven. Voor de tekenweergave gebruikt Mplayer het bestand subfont.ttf in de MPlayer Home directory.

Het Online Screen Display moet u niet verwarren met het DVD menu. MPlayer kan de DVD menu's wel summier weergeven, maar een mogelijkheid om het DVD menu via de muis of het toetsenbord te beïnvloeden ontbreekt.

Het OSD zal alleen de speelduur van het actuele VOB bestand weergeven; maar bij een film die meerdere VOB bestanden beslaat is dat niet de speelduur van de gehele film.

De MPlayer Home directory kan worden aangegeven met SET MPlayer Home = pad/map, maar zal standaard %HOME% /.Mplayer worden. Dat is meestal de submap .Mplayer van de SET HOME=[Bootdrive]:\HOME\DEFAULT op een eCS systeem. Bijv. C:\HOME\DEFAULT\.Mplayer.

Wilt u met KO's port van het Online Screen Display gebruik maken, kopieer dan een true type font (bijv. arial.ttf) naar de map %HOME/.mplayer en hernoem deze naar subfont.ttf. Deze wordt dan automatisch geladen.

    copy c:\psfonts\arial.ttf c:\home\default\.mplayer\subfont.ttf

In Pauls Smedleys port kunt u een %HOME%/.mplayer/config. bestand gebruiken om de OSD fonts op te geven:

    # Write your default config options here!
    font=F:\PSFONTS\tnrwt_j.ttf
    subfont=F:\PSFONTS\VERA.TTF
    prefer-ipv4 = yes
    slang=nl

Fonts voor MPlayer vindt u op Index of /MPlayer/contrib/fonts. Overigens zijn ook de op OS/2 al aanwezige True Type Fonts goed te gebruiken.

Ik heb mplayer.exe via Registry Editor net als Mozilla ingevoerd als doel voor Innoteks Font Engine, maar dat bleek niets uit maken. Blijkbaar maakt Mplayer gebruik van truetype.dll.

Hebt u meerdere gebruikers en/of gebruikt u grote fonts (arialuni.ttf is 23 MB!), dan kunt u ook symbolische links aanmaken met behulp van ln uit de GNU Core utilities (coreutils_5.93.zip). Het voordeel is dat u het font maar op een plek op de schijf hoeft te bewaren:

    ln -s c:\psfonts\arialuni.ttf c:\home\sjoerd\.mplayer\subfont.ttf
    ls -ila
     9127866760652081970 lrwxrwxrwx 1 0 0  24 2007-07-19 08:53 subfont.ttf -> c:\psfonts\arialuni.ttf

De symbolische links werken overigens alleen met UNIX applicaties die er via een aparte ingang in de GCC bibliotheek (libc063.dll) een beroep op doen.

De volgende sneltoetsen kunnen van nut zijn (zie: INTERACTIVE CONTROL in mplayer.1.txt).

    "<-"  or  "->"  Seek backward/forward 10 secondsecho
    down or up      Seek backward/forward  1 minute
    pgdown or pgup  Seek backward/forward 10 minutes
    "<" or ">"      Step backward/forward in playlist
    p or SPACE      Pause movie (press any key to continue)
    q or ESC        Next movie or quit program
    o               Cycle OSD mode:  none / seekbar / seekbar + timer
    + or -          Adjust audio delay by +/- 0.1 second
    * or /          Increase or decrease PCM volume
    F               Toggle displaying "forced subtitles".
    v               Toggle subtitle visibility.
    j or g          Cycle through the available subtitles.
    x or z          Adjust subtitle delay by +/- 0.1 second
    r or t          Adjust subtitle position up/down, also see -vf expand

Met de "o" toets zet u het OSD menu aan. Met de "j" toets zoekt u ondertiteling in het VOB bestand op. Maar helaas worden vaak geen of slechts een enkel subtitel-id van het VOB bestand weergeven.

    number of subtitles on disk: 0
    No matching DVD subtitle language found!

Een goede manier om MPlayer te dwingen ook de Nederlandse ondertiteling in de VOB bestanden te vinden was het instellen van een hoog sublanguage id (sid). Deze optie is niet bedoeld voor externe language files. In dit geval zal de j-toets van "Cycle through the available subtitles" in de regel de eerste 20 eventueel aanwezige ondertitels laten zien.

    mplayer -autosync 30 -slang nl -sid 20 20 %1

Daarna zoekt u met "j" naar de juiste taal (in 1 van de 20 id's) . Zonder een hoog sid worden vaak geen of maar twee talen gevonden. De optie -slang=nl bleek vaak niet te werken.

#### DVD's meteen van de DVD speler afspelen

##### > Top <

Als uw DVD speler op schijf M: zit zou deze opdracht moeten werken:

    mplayer -dvd-device M: dvd://

Dit start MPlayer op met de DVD in schijf M. Extra opties die mij goed bevallen zijn:

    mode co100,5
    mplayer -autosync 30 -sid 20 -dvd-device M: dvd:// > NUL 2>&1
    exit

Maar vaak wordt hierbij alleen maar het eerste VOB bestand afgespeeld. Als zelfs dit niet werkt opent u een VOB rechtstreeks in mplayer en bestudeert u het logbestand (andere batch nemen). Het nadeel is dat u nu ieder VOB bestand apart moet opgeven, hoewel de serie "mplayer M:\VIDEO_TS\VTS_05_0.VOB M:\VIDEO_TS\VTS_05_1.VOB M:\VIDEO_TS\VTS_05_2.VOB M:\VIDEO_TS\VTS_05_3.VOB M:\VIDEO_TS\VTS_05_4.VOB" het ook zal doen. U kunt dan wel vooruit, maar niet van het einde terug scrollen.

Een batch die DVD's op M op VOB's doorzoekt:

    mode co100,18
    rem mplayer_search_DVD.cmd
    rem M is DVD drive
    SET MPLAYER_OPTIONS=-alang nl,en -slang nl,en -sid 20 -autosync 20
    :1
    cls
    @echo off
    echo "<-"  or  "->"  Seek backward/forward 10 secondsecho
    echo down or up      Seek backward/forward  1 minute
    echo pgdown or pgup  Seek backward/forward 10 minutes
    echo "<" or ">"      Step backward/forward in playlist
    echo p or SPACE      Pause movie (press any key to continue)
    echo q or ESC        Next movie or quit program
    echo o               Cycle OSD mode:  none / seekbar / seekbar + timer
    echo + or -          Adjust audio delay by +/- 0.1 second
    echo * or /          Increase or decrease PCM volume
    echo F               Toggle displaying "forced subtitles".
    echo v               Toggle subtitle visibility.
    echo j or g          Cycle through the available subtitles.
    echo x or z          Adjust subtitle delay by +/- 0.1 second
    echo r or t          Adjust subtitle position up/down, also see -vf expand
    echo           Ctrl-C or Break to quit
    pause
    echo Searching now..
    M:
    CD \
    CD VIDEO_TS
    SET MPLAYER_OPTIONS = -alang nl,en -slang nl,en -sid 10
    mplayer VTS_00_0.VOB VTS_00_1.VOB VTS_00_2.VOB VTS_00_3.VOB VTS_00_4.VOB VTS_00_5.VOB VTS_00_6.VOB VTS_00_7.VOB VTS_00_8.VOB > NUL 2>&1
    mplayer VTS_01_0.VOB VTS_01_1.VOB VTS_01_2.VOB VTS_01_3.VOB VTS_01_4.VOB VTS_01_5.VOB VTS_01_6.VOB VTS_01_7.VOB VTS_01_8.VOB > NUL 2>&1
    mplayer VTS_02_0.VOB VTS_02_1.VOB VTS_02_2.VOB VTS_02_3.VOB VTS_02_4.VOB VTS_02_5.VOB VTS_02_6.VOB VTS_02_7.VOB VTS_02_8.VOB > NUL 2>&1
    mplayer VTS_03_0.VOB VTS_03_1.VOB VTS_03_2.VOB VTS_03_3.VOB VTS_03_4.VOB VTS_03_5.VOB VTS_03_6.VOB VTS_03_7.VOB VTS_03_8.VOB > NUL 2>&1
    mplayer VTS_04_0.VOB VTS_04_1.VOB VTS_04_2.VOB VTS_04_3.VOB VTS_04_4.VOB VTS_04_5.VOB VTS_04_6.VOB VTS_04_7.VOB VTS_04_8.VOB > NUL 2>&1
    mplayer VTS_05_0.VOB VTS_05_1.VOB VTS_05_2.VOB VTS_05_3.VOB VTS_05_4.VOB VTS_05_5.VOB VTS_05_6.VOB VTS_05_7.VOB VTS_05_8.VOB > NUL 2>&1
    mplayer VTS_06_0.VOB VTS_06_1.VOB VTS_06_2.VOB VTS_06_3.VOB VTS_06_4.VOB VTS_06_5.VOB VTS_06_6.VOB VTS_06_7.VOB VTS_06_8.VOB > NUL 2>&1
    mplayer VTS_07_0.VOB VTS_07_1.VOB VTS_07_2.VOB VTS_07_3.VOB VTS_07_4.VOB VTS_07_5.VOB VTS_07_6.VOB VTS_07_7.VOB VTS_07_8.VOB > NUL 2>&1
    mplayer VTS_07_0.VOB VTS_07_1.VOB VTS_07_2.VOB VTS_07_3.VOB VTS_07_4.VOB VTS_07_5.VOB VTS_07_6.VOB VTS_07_7.VOB VTS_07_8.VOB > NUL 2>&1
    mplayer VTS_08_0.VOB VTS_08_1.VOB VTS_08_2.VOB VTS_08_3.VOB VTS_08_4.VOB VTS_08_5.VOB VTS_08_6.VOB VTS_08_7.VOB VTS_08_8.VOB > NUL 2>&1
    mplayer VTS_09_0.VOB VTS_09_1.VOB VTS_09_2.VOB VTS_09_3.VOB VTS_09_4.VOB VTS_09_5.VOB VTS_09_6.VOB VTS_09_7.VOB VTS_09_8.VOB > NUL 2>&1
    mplayer VTS_10_0.VOB VTS_10_1.VOB VTS_10_2.VOB VTS_10_3.VOB VTS_10_4.VOB VTS_10_5.VOB VTS_10_6.VOB VTS_10_7.VOB VTS_10_8.VOB > NUL 2>&1
    mplayer VTS_11_0.VOB VTS_11_1.VOB VTS_11_2.VOB VTS_11_3.VOB VTS_11_4.VOB VTS_11_5.VOB VTS_11_6.VOB VTS_11_7.VOB VTS_11_8.VOB > NUL 2>&1
    mplayer VTS_12_0.VOB VTS_12_1.VOB VTS_12_2.VOB VTS_12_3.VOB VTS_12_4.VOB VTS_12_5.VOB VTS_12_6.VOB VTS_12_7.VOB VTS_12_8.VOB > NUL 2>&1
    echo done

Een wat subtielere variant hierop is:

    mode co80,10
    rem mplayer_DVD.cmd
    rem N is DVD drive
    cls
    @echo off
    echo q  Go to the next movie
    echo /  Reduce sound volume
    echo o  Toggle OSD states: none / seek / seek + timer / seek + timer + total time.
    echo v  Toggle subtitle visibility.
    echo j  Cycle through the available subtitles.
    echo y  Step forward in the subtitle list.
    echo g  Step backward in the subtitle list.
    echo F  Toggle displaying "forced subtitles".
    echo Ecs to go to the next movie
    echo Ctrl-C or Break to quit.
    SET MPLAYER_OPTIONS=-autosync 30 -alang nl,en -slang nl,en -sid 20 -dvd-device N:
    mplayer dvd://1 > NUL 2>&1 -autosync 30 -alang nl,en -slang nl,en -dvd-device N:
    mplayer dvd://2 > NUL 2>&1 -autosync 30 -alang nl,en -slang nl,en -dvd-device N:
    mplayer dvd://3 > NUL 2>&1 -autosync 30 -alang nl,en -slang nl,en -dvd-device N:
    mplayer dvd://4 > NUL 2>&1 -autosync 30 -alang nl,en -slang nl,en -dvd-device N:
    mplayer dvd://5 > NUL 2>&1 -autosync 30 -alang nl,en -slang nl,en -dvd-device N:
    mplayer dvd://6 > NUL 2>&1 -autosync 30 -alang nl,en -slang nl,en -dvd-device N:
    mplayer dvd://7 > NUL 2>&1 -autosync 30 -alang nl,en -slang nl,en -dvd-device N:
    mplayer dvd://8 > NUL 2>&1 -autosync 30 -alang nl,en -slang nl,en -dvd-device N:
    mplayer dvd://9 > NUL 2>&1 -autosync 30 -alang nl,en -slang nl,en -dvd-device N:
    mplayer dvd://10 > NUL 2>&1 -autosync 30 -alang nl,en -slang nl,en -dvd-device N:
    exit

Let op: Op zich zou de met SET MPLAYER_OPTIONS= ingestelde Mplayer Options variabele (%MPLAYER_OPTIONS%) belangrijke opties als -dvd-device N: aan Mplayer moeten doorgeven, maar in mijn praktijk gebeurt dat niet altijd. Daarom heb ik ze er hier toch maar weer achter gezet.

Tip: verandert u in deze batch de driveletter N: door %1, dan kunt u DVD's rechtstreeks van de vaste schijf afspelen, gewoon door de map met VIDEO_TS erin naar het object te slepen!

U zet het geluid zachter met "/" toets en luider met "*" toets.

Met de "p" toggle pauzeert u of start u de DVD weer op.

Met de "f" toggle schakelt u tussen PM en volledig scherm (fullscreen of -fs).

U "scrollt' door de video met de pijltjestoetsen. Met "PageUp" en "PageDown" navigeert u in sprongen.

En met "o" controleert u of de Online Screen Display (OSD) werkt. Een werkend OSD screen geeft met de "o" toets resterende de tijd aan: Gebeurt dat niet dan moet u een ander font opgeven. Met "j" stelt u de ondertiteling in.

#### Fouten opsporen met behulp van logbestanden

##### > Top <

Gaat het mis, raadpleeg dan een logbestand. Hiervoor moet de CLI schermuitvoer naar een bestand omleiden. Hier werd breedsprakig gelogd met de -v(erbose) optie.

    mplayer -v -dvd-device n: dvd:// > %TEMP%\mplayer_dvd_n.log 2>&1
    ae %TEMP%\mplayer_dvd_n.log

Een slecht afspelende DVD gaf het volgende te zien op mijn laptop:.

    ==========================================================================
    Opening audio decoder: [liba52] AC3 decoding with liba52
    No accelerated IMDCT transform found
    Using MMX optimized resampler
    AUDIO: 48000 Hz, 2 ch, s16le, 192.0 kbit/12.50% (ratio: 24000->192000)
    Selected audio codec: [a52] afm: liba52 (AC3-liba52)
    ==========================================================================
    AO: [dart] 48000Hz 2ch s16le (2 bytes per sample)
    Starting playback...
    A:   0.3 V:   0.0 A-V:  0.271 ct:  0.000   1/  1 ??% ??% ??,?% 0 0
    A:   0.3 V:   0.3 A-V:  0.024 ct:  0.002   2/  2 ??% ??% ??,?% 0 0
    A:   0.4 V:   0.3 A-V:  0.069 ct:  0.006   3/  3 ??% ??% ??,?% 0 0
    A:   0.4 V:   0.4 A-V:  0.052 ct:  0.010   4/  4 ??% ??% ??,?% 0 0
    A:   0.5 V:   0.4 A-V:  0.055 ct:  0.014   5/  5 ??% ??% ??,?% 0 0
    A:   0.5 V:   0.4 A-V:  0.027 ct:  0.016   6/  6 ??% ??% ??,?% 0 0
    A:   0.5 V:   0.5 A-V:  0.029 ct:  0.019   7/  7 ??% ??% ??,?% 0 0
    A:   0.6 V:   0.5 A-V:  0.032 ct:  0.022   8/  8 ??% ??% ??,?% 0 0

Na korte tijd geeft de Cyclic Redundancy Check van de DVD media fouten aan.

    a52: CRC check failed!
    a52: error at resampling
    A:   0.7 V:   0.8 A-V: -0.120 ct:  0.018   9/  9 ??% ??% ??,?% 0 0

Normaal gesproken wijst dit op fouten in het medium. Maar in het geval van DVD's zijn ze vaak opzettelijk aangebracht om de inhoud te beschermen. Via de " enhanced" CSS Decryption module in de DVD hardware worden met opzet aangebrachte fouten gecorrigeerd. Tenminste als u over het juiste BIOS en language code beschikt. Als een legaal gekochte DVD het met MPlayer onder OS/2 niet doet, zou u hem willen terugbrengen naar de leverancier. Maar het vervelende is ook degenen die eerst illegale kopietjes ervan maken met een ripper dit ook doen.

Een "goede DVD" gaf met 2>&1 als uitvoer (en een "q" van "quit" om MPlayer netjes af te sluiten):

De mogelijkheden van de CPU worden onderzocht.

    MPlayer dev-SVN-r23698-OS2-3.3.5 (C) 2000-2007 MPlayer Team
    CPU: Genuine Intel(R) CPU 3.06GHz (Family: 15, Model: 2, Stepping: 9)
    CPUflags:  MMX: 1 MMX2: 1 3DNow: 0 3DNow2: 0 SSE: 0 SSE2: 0
    Compiled with runtime CPU detection.

De inhoud van de DVD wordt onderzocht. Het DVD menu kent 2 titels en 9 hoofdstukken. Er zijn drie geluidsporen (0-2), waarvan Mplayer wel het formaat (ac3, dts) kan vaststellen, maar niet de taal (unknown aid: 128). Aid staat voor audio id.

    Playing dvd://.
    There are 2 titles on this DVD.
    There are 9 chapters in this DVD title.
    There are 1 angles in this DVD title.
    audio stream: 0 format: ac3 (stereo) language: unknown aid: 128.
    audio stream: 1 format: ac3 (5.1) language: unknown aid: 129.
    audio stream: 2 format: dts (5.1/6.1) language: unknown aid: 138.
    number of audio channels on disk: 3.
    subtitle ( sid ): 0 language: unknown
    number of subtitles on disk: 1

Er is slechts een voor MPlayer onbekende ondertiteling beschikbaar. Deze heeft dan automatisch het sublanguage id van 0.

Aangezien de hoofdtaal Engels is, zou er ook kunnen staan:

    audio stream: 0 format: ac3 (stereo) language: en aid: 128

De opdracht om dit audiokanaal met de Nederlandse ondertiteling af te spelen is dus:

    mplayer -dvd-device n: -aid 128 -sid 0 dvd://

Vervolgens wordt het MPEG stroomformaat gelezen. De belangrijkste varianten zijn Program Stream (MPEG-PS) voor DVD's, de Packetized Elementary Stream (MPEG-PES) voor media die na een aantal bytes een packet header voor foutcorrectie bevat of Transport Stream (MPEG-TS) die een nog uitgebreidere foutcorrectie bevat voor onbetrouwbare media als Digital Video Broadcasting. Hier wordt een Packetized Elementary Stream vastgesteld. Daarna wordt een passende video codec opgezocht.

    MPEG-PS file format detected.
    VIDEO:  MPEG2  720x576  (aspect 2)  25.000 fps  2270.4 kbps (283.8 kbyte/s)
    Opening video decoder: [mpegpes] MPEG 1/2 Video passthrough
    VDec: vo config request - 720 x 576 (preferred colorspace: Mpeg PES)
    Could not find matching colorspace - retrying with -vf scale...
    Opening video filter: [scale]
    The selected video_out device is incompatible with this codec.
    Try appending the scale filter to your filter list,
    e.g. -vf spp,scale instead of -vf spp.
    VDecoder init failed :(

De mpegpes decoder van de preferred colorspace (Mpeg PES) kon echter niet op het medium worden geïnitialiseerd. Vervolgens wordt libmpeg2 voor MPEG 1 en 2 gebruikt.

    Opening video decoder: [libmpeg2] MPEG 1/2 Video decoder libmpeg2-v0.4.0b
    Selected video codec: [mpeg12] vfm: libmpeg2 (MPEG-1 or 2 (libmpeg2))

Vervolgens wordt de audio codec geselecteerd. Het VOB bestand heeft het geluid opgeslagen als Adaptive Transform Coder 3 (AC3), het bitstream formaat van Dolby Digital. IMDCT slaat op de door audiocodecs gebruikte Inverse Modified Discrete Cosine Transform, die hier blijkbaar niet "accelerated" wordt ondersteund.

    Opening audio decoder: [liba52] AC3 decoding with liba52
    No accelerated IMDCT transform found
    Using MMX optimized resampler
    AUDIO: 48000 Hz, 2 ch, s16le, 224.0 kbit/14.58% (ratio: 28000->192000)
    Selected audio codec: [a52] afm: liba52 (AC3-liba52)
    AO: [dart] 48000Hz 2ch s16le (2 bytes per sample)

De DVD wordt afgespeeld. Mplayers audio uitvoer (AO) maakt standaard van OS/2's Direct Audio Real Time (DART) interface gebruik. De 768x576 PM video uitvoer (VO) zal met als het even kan DIVE/WarpOverlay! gebruiken.

    Starting playback...
    VDec: vo config request - 720 x 576 (preferred colorspace: Planar YV12)
    VDec: using Planar YV12 as output csp (no 0)
    Movie-Aspect is 1.33:1 - prescaling to correct movie aspect.
    VO: [kva] 720x576 => 768x576 Planar YV12
    [swscaler @ 0x173dd28]SwScaler: using unscaled yuv420p -> bgr24 special converter
    A:   0.1 V:   0.0 A-V:  0.036 ct:  0.000   1/  1 ??% ??% ??,?% 0 0
    A:   0.2 V:   0.1 A-V:  0.021 ct:  0.001   2/  2 ??% ??% ??,?% 0 0
    A:   0.3 V:   0.2 A-V:  0.144 ct: -0.003   3/  3 ??% ??% ??,?% 0 0
    A:   0.3 V:   0.2 A-V:  0.112 ct: -0.005   4/  4 ??% ??% ??,?% 1 0
    A:   0.4 V:   0.1 A-V:  0.235 ct: -0.001   5/  5 ??% ??% ??,?% 1 0

#### Verbose loggen

##### > Top <

Een voorbeeld van uitgebreid loggen.

Ik start op met :

    mplayer -autosync 10 -sid 16 -v %1 > %TEMP%\mplayer_os2_test.log 2>&1
    ae %TEMP%\mplayer_os2_test.log

Het bestand g:\var\log\mplayer_os2_test.log bevat:

    MPlayer dev-SVN-r23698-OS2-3.3.5 (C) 2000-2007 MPlayer Team
    CPU: Genuine Intel(R) CPU 3.06GHz (Family: 15, Model: 2, Stepping: 9)
    CPUflags:  MMX: 1 MMX2: 1 3DNow: 0 3DNow2: 0 SSE: 0 SSE2: 0
    Compiled with runtime CPU detection.

Mplayer zoekt de codecs (in de OS/2 port zijn ze built-in).

    get_path('codecs.conf') -> 'G:\HOME\DEFAULT/.mplayer/codecs.conf'
    Reading G:\HOME\DEFAULT/.mplayer/codecs.conf: Can't open 'G:\HOME\DEFAULT/.mplayer/codecs.conf': No such file or directory
    Reading /usr/local/etc/mplayer/codecs.conf: Can't open '/usr/local/etc/mplayer/codecs.conf': No such file or directory

Vanwege een ontbrekend bestand %HOME%/.mplayer/codecs.conf worden standaard waarden gebruikt.

    Using built-in default codecs.conf.

Dit zijn andere standaard waarden die u op de prompt (opties) op via .mplayer/config kunt wijzigen.

    Configuration: --disable-vidix-internal --disable-vidix-external --enable-runtime-cpudetection --disable-ssse3 --disable-select --disable-sdl --disable-termcap --with-extraincdir=/lang/work/mplayer/mplayer2.pack/libdart:/lang/work/mplayer/mplayer2.pack/libkva --with-extralibdir=/lang/work/mplayer/mplayer2.pack/libdart:/lang/work/mplayer/mplayer2.pack/libkva

De mplayer parameters van de opdrachtregel worden verwerkt.

    CommandLine: '-autosync' '10' '-sid' '16' '-v' 'N:\VIDEO_TS\VTS_02_0.VOB'

De Freetype library wordt geopend om subfont.ttf te laden.

    init_freetype
    get_path('font/font.desc') -> 'G:\HOME\DEFAULT/.mplayer/font/font.desc'
    font: can't open file: G:\HOME\DEFAULT/.mplayer/font/font.desc
    font: can't open file: /usr/local/share/mplayer/font/font.desc
    Using MMX (with tiny bit MMX2) Optimized OnScreenDisplay
    get_path('fonts') -> 'G:\HOME\DEFAULT/.mplayer/fonts'

Dit bericht slaat op de standaard methode van timing. De optie -rtc (real time clock) lijkt niet te werken. Een alternatief is softleep=yes in de config.

    Using nanosleep() timing

Het bestand .mplayer/input.conf bevat opties voor de invoer.

    get_path('input.conf') -> 'G:\HOME\DEFAULT/.mplayer/input.conf'
    Can't open input config file G:\HOME\DEFAULT/.mplayer/input.conf: No such file or directory
    Can't open input config file /usr/local/etc/mplayer/input.conf: No such file or directory
    Falling back on default (hardcoded) input config

Het VOB bestand wordt gelokaliseerd (is niet altijd simpel op het internet of UDF!):

    get_path('N:\VIDEO_TS\VTS_02_0.VOB.conf') -> 'G:\HOME\DEFAULT/.mplayer/N:\VIDEO_TS\VTS_02_0.VOB.conf'

Het afspelen begint:

    Playing N:\VIDEO_TS\VTS_02_0.VOB.

De map %HOME%/.mplayer/sub/ mag per DVD ingestelde gebruikersopties voor ondertitels bevatten (hier afwezig).

    get_path('sub/') -> 'G:\HOME\DEFAULT/.mplayer/sub/'

Het op DVD N: aanwezige bestand N:\VIDEO_TS\VTS_02_0.VOB wordt ontleed:

    [file] File size is 157696 bytes
    STREAM: [file] N:\VIDEO_TS\VTS_02_0.VOB
    STREAM: Description: File
    STREAM: Author: Albeu
    STREAM: Comment: based on the code from ??? (probably Arpi)
    Checking for YUV4MPEG2
    ASF_check: not ASF guid!
    Checking for NuppelVideo
    Checking for REAL
    Checking for SMJPEG
    Searching demuxer type for filename N:\VIDEO_TS\VTS_02_0.VOB ext: .VOB
    Trying demuxer 2 based on filename extension
    system stream synced at 0xD (13)!

Maar dit levert niet op (0 = niks en EOF is End of File).

    ==> Found video stream: 0
    ==> Found subtitle: 0
    MPEG Stream reached EOF
    ds_fill_buffer: EOF reached (stream: video)
    MPEG-PS file format detected.
    MPEG Stream reached EOF
    ds_fill_buffer: EOF reached (stream: audio)
    MPEG: No audio stream found -> no sound.

MPlayer gaat op goed geluk verder. En probeert de MPEG2 stroom op verschillende manieren uit.

    Searching for sequence header... OK!
    VIDEO:  MPEG2  720x576  (aspect 2)  25.000 fps  2000.0 kbps (250.0 kbyte/s)
    [V] filefmt:2  fourcc:0x10000002  size:720x576  fps:25.00  ftime:=0.0400
    get_path('sub/') -> 'G:\HOME\DEFAULT/.mplayer/sub/'
    ==========================================================================
    Opening video decoder: [mpegpes] MPEG 1/2 Video passthrough
    VDec: vo config request - 720 x 576 (preferred colorspace: Mpeg PES)
    Trying filter chain: vo
    Could not find matching colorspace - retrying with -vf scale...
    Opening video filter: [scale]
    SwScale params: -1 x -1 (-1=no scaling)
    Trying filter chain: scale vo
    The selected video_out device is incompatible with this codec.
    Try appending the scale filter to your filter list,
    e.g. -vf spp,scale instead of -vf spp.
    VDecoder init failed :(
    Opening video decoder: [libmpeg2] MPEG 1/2 Video decoder libmpeg2-v0.4.0b
    Selected video codec: [mpeg12] vfm: libmpeg2 (MPEG-1 or 2 (libmpeg2))
    ==========================================================================
    Audio: no sound
    Freeing 0 unused audio chunks.
    Starting playback...
    VDec: vo config request - 720 x 576 (preferred colorspace: Planar YV12)
    Trying filter chain: vo
    VDec: using Planar YV12 as output csp (no 0)
    Movie-Aspect is 1.33:1 - prescaling to correct movie aspect.
    VO Config (720x576->768x576,flags=0,'MPlayer',0x32315659)
    VO: [kva] 720x576 => 768x576 Planar YV12
    VO: Description: DIVE/WarpOverlay! video output
    VO: Author: KO Myung-Hun <komh@chollian.net>
    KVA: Using 0x32315659 (Planar YV12) image format
    [swscaler @ 0x173dd28]SwScaler: using unscaled yuv420p -> bgr565 special converter
    *** [vo] Allocating mp_image_t, 720x576x12bpp YUV planar, 622080 bytes
    V:   0.0   1/  1 ??% ??% ??,?% 0 0
    *** [vo] Allocating mp_image_t, 720x576x12bpp YUV planar, 622080 bytes
    V:   0.1   2/  2 ??% ??% ??,?% 0 0
    get_path('subfont.ttf') -> 'G:\HOME\DEFAULT/.mplayer/subfont.ttf'
    Unicode font: 1185 glyphs.
    get_path('subfont.ttf') -> 'G:\HOME\DEFAULT/.mplayer/subfont.ttf'
    Unicode font: 1185 glyphs.
    V:   0.1   3/  3 ??% ??% ??,?% 0 0
    V:   0.4   4/  4 ??% ??% ??,?% 0 0
    *** [vo] Allocating mp_image_t, 720x576x12bpp YUV planar, 622080 bytes
    V:   0.4   5/  5 ??% ??% ??,?% 0 0
    V:   0.4   6/  6 ??% ??% ??,?% 0 0
    V:   0.5   7/  7 ??% ??% ??,?% 0 0
    V:   0.5   8/  8 ??% ??% ??,?% 0 0
    V:   0.6   9/  9 ??% ??% ??,?% 0 0
    V:   0.6  10/ 10 ??% ??% ??,?% 0 0
    V:   0.6  11/ 11 ??% ??% ??,?% 0 0
    V:   0.7  12/ 12 ??% ??% ??,?% 0 0
    V:   0.7  13/ 13 ??% ??% ??,?% 0 0
    V:   0.8  14/ 14 18% 11%  0.0% 0 0
    V:   0.8  15/ 15 18% 11%  0.0% 0 0
    MPEG Stream reached EOF
    ds_fill_buffer: EOF reached (stream: video)
    MPEG Stream reached EOF
    ds_fill_buffer: EOF reached (stream: video)
    V:   0.8  15/ 15 18% 11%  0.0% 0 0
    EOF code: 1

    Uninit video: libmpeg2

    Exiting... (End of file)

##### > Top <