Showing posts with label DVD. Show all posts
Showing posts with label DVD. Show all posts

Friday, 7 January 2011

How to get files off an unfinalized DVD-Video disk using free software

Hey, happy new year! This is a bit of a techie experience transfer. I don't always write blog posts of a political nature. Actually, I don't often write blog posts, but here's one. I wanted to share with you my experiences of trying to extract content from an unfinalized video DVD that was recorded with a consumer DVD recorder (brand unknown, not in my possession). A friend was kind enough to send us by post some DVDs with material recorded off the television. [Now before you get all sanctimonious with me about copyright and IP and all that jazz, let me say that I fully intend to buy the DVD of this series when it is available. It is not currently available. I could get this series on my own Virgin Media TV package if I upgrade, but I don't want to commit to another fixed term contract. And I'm not going to tell you the name of the show, so nyuh.*] Anyway, our kind friend sent us these DVDs but unfortunately they were not finalized, which means they can only be played in the same video recorder. This is an easy mistake to make. Although this friend claims that the DVDs were finalized, she has been misinformed as I shall show you below. So for the last couple days I set about trying to create workable DVD disks from the contents of the ones I was given. This is tricky, since an unfinalized DVD video disk is left in a state where it is virtually unreadable without specialist software. Such a DVD will not load in a commercial DVD deck, nor will it mount on any operating system. I tried Windows 7, Mac OSX 1.4 and CentOS Linux. Trawling the various video forums, I came across a couple helpful articles:



When I'd first discovered the problems with these disks I was at home and using Windows; therefore, I was inclined to try Windows oriented solutions first. On my Windows 7 laptop, the DVD disks when inserted appear as full but blank. There is no discernable file system, and out of all my DVD related tools only Nero could detect that there was a session with tracks on the disk. It could not do anything with the disk though. I don't have the full commercial version of Nero. I tried the free tool DVD Decrypter, which is recommended for ripping from DVD file systems, but it detected nothing. The excellent ShareWare tool IsoBuster is able to detect and recover files from these DVDs, but in order to extract the files you need to shell out $30 for a license to unlock the Pro features. I considered this a small price to pay and so I did, though I now know that this was not necessary. If you don't fancy mucking around with command line tools then go with IsoBuster, but make sure it can detect your tracks before you pay for it. The more adventurous might continue reading, after all I told you this can be done at no cost.

Linux is a powerful open source operating system whose many distributions offer packages of free software applications, many of which are as fully featured as competing commercial software available for closed source operating systems. And the maintainers of many of these tools also provide binary ports that run on Windows or MacOSX. On my CentOS 5.4 Linux desktop computer at work, I have the dvd+rw-tools package installed. This is also available as a binary port for Windows. This provides among other things a neat little utility that gives the structure of a DVD disk, even one that can't be mounted in the usual ways. With a disk in the drive and assuming a DVD device of /dev/dvd, I type 'dvd+rw-mediainfo /dev/dvd' and hit Return:
% dvd+rw-mediainfo /dev/dvd
INQUIRY:                [PHILIPS ][DVD+-RW DVD8801 ][4D28]
GET [CURRENT] CONFIGURATION:
 Mounted Media:         11h, DVD-R Sequential
 Current Write Speed:   16.0x1385=22160KB/s
 Write Speed #0:        16.0x1385=22160KB/s
 Write Speed #1:        12.0x1385=16620KB/s
 Write Speed #2:        8.0x1385=11080KB/s
 Write Speed #3:        4.0x1385=5540KB/s
GET [CURRENT] PERFORMANCE:
 Write Performance:     16.0x1385=22160KB/s@[0 -> 1845983]
 Speed Descriptor#0:    00/1845983 R@6.7x1385=9276KB/s W@16.0x1385=22160KB/s
 Speed Descriptor#1:    00/1845983 R@6.7x1385=9276KB/s W@12.0x1385=16620KB/s
 Speed Descriptor#2:    00/1845983 R@6.7x1385=9276KB/s W@8.0x1385=11080KB/s
 Speed Descriptor#3:    00/1845983 R@6.7x1385=9276KB/s W@4.0x1385=5540KB/s
READ DVD STRUCTURE[#10h]:
 Media Book Type:       00h, DVD-ROM book [revision 0]
 Legacy lead-out at:    2298496*2KB=4707319808
READ DVD STRUCTURE[#0h]:
 Media Book Type:       25h, DVD-R book [revision 5]
 Last border-out at:    2045*2KB=4188160
READ DISC INFORMATION:
 Disc status:           appendable
 Number of Sessions:    1
 State of Last Session: incomplete
 "Next" Track:          1
 Number of Tracks:      8
READ TRACK INFORMATION[#1]:
 Track State:           reserved incremental
 Track Start Address:   0*2KB
 Next Writable Address: 0*2KB
 Free Blocks:           12272*2KB
 Track Size:            12272*2KB
READ TRACK INFORMATION[#2]:
 Track State:           complete incremental
 Track Start Address:   12288*2KB
 Free Blocks:           0*2KB
 Track Size:            192*2KB
 Last Recorded Address: 12479*2KB
READ TRACK INFORMATION[#3]:
 Track State:           complete incremental
 Track Start Address:   12496*2KB
 Free Blocks:           0*2KB
 Track Size:            887216*2KB
 Last Recorded Address: 899711*2KB
READ TRACK INFORMATION[#4]:
 Track State:           complete incremental
 Track Start Address:   899728*2KB
 Free Blocks:           0*2KB
 Track Size:            16*2KB
 Last Recorded Address: 899743*2KB
READ TRACK INFORMATION[#5]:
 Track State:           complete incremental
 Track Start Address:   899760*2KB
 Free Blocks:           0*2KB
 Track Size:            192*2KB
 Last Recorded Address: 899951*2KB
READ TRACK INFORMATION[#6]:
 Track State:           complete incremental
 Track Start Address:   899968*2KB
 Free Blocks:           0*2KB
 Track Size:            945984*2KB
 Last Recorded Address: 1845951*2KB
READ TRACK INFORMATION[#7]:
 Track State:           complete incremental
 Track Start Address:   1845968*2KB
 Free Blocks:           0*2KB
 Track Size:            16*2KB
 Last Recorded Address: 1845983*2KB
READ TRACK INFORMATION[#8]:
 Track State:           invisible incremental
 Track Start Address:   1846000*2KB
 Next Writable Address: 1846000*2KB
 Free Blocks:           451888*2KB
 Track Size:            451888*2KB
READ CAPACITY:          0*2048=0


We can see that there are 8 tracks on this DVD in a single session, though the last track has not been started. The first track is reserved and the middle six are complete. Under the heading READ DISK INFORMATION, we also see why this disk fails to mount. The disk has an 'appendable' status and its single session is in an 'incomplete' state. It is not finalized. Generally a recordable DVD can only be played or finalized using the software that created it because this is the only software that can locate the files without the support data created during finalization. I've read that it is sometimes possible to create a clone image of an unfinalized DVD and use other software to close the session, but I have never tried this. The important thing is to get the VOB files off the DVD disk. If you can do this then you can reauthor a new DVD. The output of dvd+rw-mediainfo above shows that there are likely two VOB tracks (#3 and #6). These two tracks are each about 2 Gigs long. The other tracks are very short, suggesting they probably contain menu or other setup files. The field "Track Size" is shown with the number of blocks and the size of each block separated by an asterisk. Track #6 is 945984*2KB = 1891968 KB = 1847.628 MB = 1.804 GB roughly.

Now for the fun part. The dvd+rw-mediainfo output actually tells us everything we need to know in order to extract the VOB files using a tool such as "dd" (a GNU command line utility for copying parts of files and block devices). dd is also available for Windows, but I don't have a link at the moment[This excellent tool is available here]. In order to extract a VOB from our DVD we only need to know its starting block and its size. For track #6, the starting block is 899968 and its size is once again 945984 blocks. Block size is 2KB. The command to extract the track would be written as follows (note: 2KB = 2*1024 bytes):

 
dd bs=2048 skip=899968 count=945984 if=/dev/dvd of=/tmp/track6.vob

The 'bs' option specifies the block size, skip specifies the number of input blocks to skip and count specifies the block length to copy. 'if' is input file and 'of' is output file, which can be any writable path. Here's what I get when I run the command (it takes a few minutes to complete):
% dd bs=2048 skip=899968 count=945984 if=/dev/dvd of=/tmp/track6.vob
945984+0 records in
945984+0 records out
1937375232 bytes (1.9 GB) copied, 903.739 seconds, 2.1 MB/s

And the delight of the day is that if I open that file in VLC media player, it plays perfectly! I can now add that file (and track 3 once extracted) to a new DVD project in a DVD authoring application (such as the free cross-platform DVDStyler) and burn a DVD. The DVD authoring software is needed in order to create DVD menus. Although in theory it should be possible to extract menu files from the original DVD in the same way, I have not tried this. I have viewed extracted files and they are in a binary file format. Anyway, the menus created by your standard DVD recorder are nothing special. Might as well make new ones.

The first DVD I created was not done using the dd tool. Instead it was done using IsoBuster's extraction feature. Had I known what I was doing I could have selected the tracks to export and created raw export image files that I could rename as .vob files. I did not know what I was doing so I asked IsoBuster to find and recover missing files based on signatures. It found some IFO files and two groups of three VOB files. It was easy for me to see that each set of three VOB files was a single episode split into three parts. Unfortunately I struggled for a long time with an error in my DVD authoring software after trying to import the VOB files as separate files. VOB files are multiplexed video and audio and contain crucial timing information. A split VOB file cannot be imported into DVDStyler (if indeed any authoring software) and so it was necessary for me to recombine the VOBs which is a simple matter of concatenating them. The end result was a working DVD video disk with two menus and two titles (which I'm not about to show you   ;-)  I hope this has been useful.

*UPDATE 29th September 2011: We now own a properly licensed commercial DVD copy of this television series.

*UPDATE 25th May 2013:
Some commenters have pointed to difficulties using the Windows port of dd. This has almost invariably been due to incorrect specification of the input file parameter. Regardless of operating system the source disk partition needs to be addressed as a block device. Different operating systems will do this differently. On Windows the disk device nodes are rarely seen. However, using the free dd port written by John Newbigin, we can easily find out how to address our drives in Windows. Here's an extract from my laptop running Windows 7:

C:\[some path]>dd --list
rawwrite dd for windows version 0.6beta3.
Written by John Newbigin 
This program is covered by terms of the GPL Version 2.

Win32 Available Volume Information
\\.\Volume{96e6c57a-4602-11e0-b661-806e6f6e6963}\
  link to \\?\Device\HarddiskVolume3
  fixed media
  Not mounted

\\.\Volume{96e6c578-4602-11e0-b661-806e6f6e6963}\
  link to \\?\Device\HarddiskVolume1
  fixed media
  Mounted on \\.\c:

\\.\Volume{96e6c579-4602-11e0-b661-806e6f6e6963}\
  link to \\?\Device\HarddiskVolume2
  fixed media
  Mounted on \\.\d:

\\.\Volume{8413f99c-d57c-11e1-a997-70f39540a6d8}\
  link to \\?\Device\CdRom0
  CD-ROM
  Mounted on \\.\e:

Here we can see that there are two ways to address the optical device, which are '\\?\Device\CdRom0' or '\\.\e:'. I prefer the latter style. I've used this and can confirm that it works as expected.

Flayman on LiveJournal (old)