miércoles, 27 de junio de 2007
martes, 26 de junio de 2007
Viaje al interior de... un DVD
Hoy me pasaron un DVD con un video. Al llegar a mis manos me comentaron que el DVD no estaba cerrado («sin finalizar», que supongo que será el término que usen los programas como Nero). En principio no debería haber ningún problema, ya que mi máquina es nueva, ya han pasado por aquí varios CDs sin cerrar, estoy con un 2.6.17 (el de Ubuntu Edgy... y ya... no es que esté recién sacado del horno, pero tampoco se puede decir que sea viejo), etc etc
Cuando el DVD entra en la máquina aparece un mensaje como que acabo de meter un disco virgen, y me pregunta si lo quiero desvirgar ¿?¿?. Antes de que cunda el caos, miro en el syslog
a ver qué se cuenta. Cada vez que entra el DVD aparece.
...] cdrom: This disc doesn't have any tracks I recognize!
Buscando por Google con ese mensaje no veo nada de utilidad, así que intento atacar el disco directamente. Aunque no tenía muchas esperanzas probé con un dd
, pero salía nada más empezar, y en el syslog
podía ver
...] end_request: I/O error, dev sr0, sector 0 ...] printk: 17 messages suppressed. ...] Buffer I/O error on device sr0, logical block 0 ...] end_request: I/O error, dev sr0, sector 0
Ouch!
Buscando herramientas relacionadas con los DVD (aún no he perdido la esperanza) veo un dvd+rw-mediainfo, que forma parte del paquete dvd+rw-tools
. Al ejecutarlo sobre el DVD veo cosas bastante prometedoras:
# dvd+rw-mediainfo /dev/dvd INQUIRY: [PHILIPS ][DVD+-RW SDVD8820][AD15] GET [CURRENT] CONFIGURATION: Mounted Media: 11h, DVD-R Sequential Media ID: CMC MAG. AE1 Current Write Speed: 8.0x1385=11080KB/s Write Speed #0: 8.0x1385=11080KB/s Write Speed #1: 6.0x1385=8310KB/s Write Speed #2: 4.0x1385=5540KB/s Write Speed #3: 2.0x1385=2770KB/s Speed Descriptor#0: 00/2297887 R@8.0x1385=11080KB/s W@8.0x1385=11080KB/s Speed Descriptor#1: 00/2297887 R@8.0x1385=11080KB/s W@6.0x1385=8310KB/s Speed Descriptor#2: 00/2297887 R@8.0x1385=11080KB/s W@4.0x1385=5540KB/s Speed Descriptor#3: 00/2297887 R@8.0x1385=11080KB/s W@2.0x1385=2770KB/s READ DVD STRUCTURE[#10h]: Media Book Type: 25h, DVD-R book [revision 5] Legacy lead-out at: 2298496*2KB=4707319808 READ DVD STRUCTURE[#0h]: Media Book Type: 25h, DVD-R book [revision 5] Last border-out at: 0*2KB=0 READ DISC INFORMATION: Disc status: appendable Number of Sessions: 1 State of Last Session: incomplete "Next" Track: 1 Number of Tracks: 4 READ TRACK INFORMATION[#1]: Track State: reserved incremental Track Start Address: 0*2KB Next Writable Address: 0*2KB Free Blocks: 1520*2KB Track Size: 1520*2KB READ TRACK INFORMATION[#2]: Track State: complete incremental Track Start Address: 1536*2KB Free Blocks: 0*2KB Track Size: 176*2KB Last Recorded Address: 1551*2KB READ TRACK INFORMATION[#3]: Track State: complete incremental Track Start Address: 1728*2KB Free Blocks: 0*2KB Track Size: 668544*2KB Last Recorded Address: 670271*2KB READ TRACK INFORMATION[#4]: Track State: invisible incremental Track Start Address: 670288*2KB Next Writable Address: 670288*2KB Free Blocks: 1627600*2KB Track Size: 1627600*2KB READ CAPACITY: 0*2048=0
Apenas he trabajado con DVDs multisesión, pero supongo que esa salida será más que normal. Lo que importa es que el DVD está ahí, y, de algún modo, dvd+rw-mediainfo puede acceder a él.
Me pongo a buscar entre las herramientas sobre DVDs y CDs y veo que cdrecord
tiene un readcd, que parece ser lo que necesito. Los primeros resultados no son muy positivos
# readcd dev=/dev/scd0 f=cdimage.raw Read speed: 11080 kB/s (CD 62x, DVD 8x). Write speed: 11080 kB/s (CD 62x, DVD 8x). Capacity: 1 Blocks = 2 kBytes = 0 MBytes = 0 prMB Sectorsize: 2048 Bytes Copy from SCSI (1,0,0) disk to file 'cdimage.raw' end: 1 readcd: Input/output error. read_g1: scsi sendcmd: no error CDB: 28 00 00 00 00 00 00 00 01 00 status: 0x2 (CHECK CONDITION) Sense Bytes: 70 00 05 00 00 00 00 0A 00 00 00 00 21 00 00 00 Sense Key: 0x5 Illegal Request, Segment 0 Sense Code: 0x21 Qual 0x00 (logical block address out of range) Fru 0x0 Sense flags: Blk 0 (not valid) resid: 2048 cmd finished after 0.009s timeout 40s readcd: Input/output error. Cannot read source disk readcd: Retrying from sector 0. .~~-~~~+~~~-~~~+~~~-~~~+~~~-~~~+~~~-~~~+~~~-~~~+~~~-~~~+~~~-~~~+~~~-~~~+~~~-~~~+~~~-~~~+~~~-~~~+~~~-~~~+~~~-~~~+~~~-~~~ readcd: Input/output error. Error on sector 0 not corrected. Total of 1 errors. Time total: 1.982sec Read 0.00 kB at 0.0 kB/sec. Max corected retry count was 0 (limited to 128). The following 1 sector(s) could not be read correctly: 0
Tiene el mismo problema que el dd
. Mirando en el man
para ver si hay manera de que ignore esos errores y siga leyendo veo que hay opciones como -noerror
o -nocorr
. Con estas opciones lee un poco más, pero no sale de la primera pista
Mirando un poco más veo que hay una opción para indicar qué sectores sacar del DVD. Fíjandome en la salida del dvd+rw-mediainfo veo que la segunda y la tercera pista están desde el sector 1536 al 670448 (el final se saca sumando el tamaño de las dos)... Así que añado sectors=1536-670448 a las opciones del readcd... y ¡Voilà!
Los datos que empiezan a leer corresponden al video que quería ver. Después de unos minutos tengo un fichero de 1,3Gib con un video de unos 20 minutos
Según file
el fichero es un Video title set, v11
, aunque el mplayer
lo abre usando el codec mpegpes
, que (según su propia descripción) corresponde a MPEG-PES output (.mpg or DXR3/DVB card)
Quizás con algún programa de esos llenos de dibujos y colores por todas partes no hubiera tenido que pensar en cómo solucionar este tema, pero seguro que no me hubiera sentido tan bien con la solución.