This is one of the early programs I've discovered and which has never let me down - or when it did I was working with the author to fix the problem. vStrip is simply the most powerful VOB file processing program. Many people use or used MPEGUtils because of its GUI but that tool doesn't stand a chance against vStrip. Whereas vStrip really strips from the very first to the last byte in every VOB file, MPEGUtils is only able to handle VOBs that begin with a valid header (usually only the first one) and if it doesn't it misses a certain number of bytes at the beginning of each file it processes which then have to be added by calculating the size difference and using DVTool to extract the missing bytes of the source files. If you've ever done that you know why I don't use MPEGUtils.
Somewhere in the 0.5 tree CSS support was added which simplified our lives greatly since from now on you could split VOBs by VOB id directly off the DVD, which saves space and time. The 0.6 tree added IFO parsing based on the LiVid sources. This is even more interesting since now you can rip DVDs the way Flask converts them.. that is you can chose the right stream and only that one will be converted. That means that all multiangle, multilanguage and seamless branching problems are a thing of the past. And unlike FlaskMpeg this IFO parsing actually works on hard cases like T2 ultimate edition. The very latest release also adds full multiangle support (Disney R1 titles and the likes) plus full UDF support (1.00GB VOBs).
But let's get down to business.. as usual I will use "The Matrix" to illustrate what can be done. Since that title has multiangles which results in a complex structure it's a good example.
If you prefer to see how all this works with the GUI you can skip the description of the command line flags, even though I highly suggest you do read it. It will help you get a much better understanding of things and the GUI at its current state doesn't request file info thru vStrip but thru Windows which can still result in some trouble with a small number of DVDs.
First of all it's time to find out which PGC (program group chains.. that's how the DVD navigation works.. for more info check the Scenarist NT manual) are on the discs. Type "vstrip f:\video_ts\vts_02_1.vob -if:\video_ts\vts_02_0.ifo"
Parsing "f:\video_ts\vts_02_0.ifo"...
0. Length: 02:22:19:201 in 106 cell(s).
1. Length: 00:00:18:193 in 1 cell(s).
2. Length: 00:00:50:193 in 1 cell(s).
3. Length: 00:00:00:213 in 1 cell(s).
4. Length: 00:00:00:213 in 1 cell(s).
5. Length: 02:22:19:201 in 106 cell(s).
6. Length: 00:00:50:213 in 3 cell(s).
7. Length: 00:02:68:225 in 3 cell(s).
8. Length: 00:01:16:213 in 1 cell(s).
9. Length: 00:01:01:213 in 1 cell(s).
10. Length: 00:03:50:229 in 2 cell(s).
11. Length: 00:01:19:213 in 1 cell(s).
12. Length: 02:22:19:201 in 106 cell(s).
13. Length: 02:22:19:201 in 106 cell(s).
14. Length: 02:22:19:201 in 106 cell(s).
15. Length: 00:00:00:213 in 1 cell(s).
16. Length: 00:00:00:213 in 1 cell(s).
17. Length: 00:00:00:213 in 1 cell(s).
Scanning for stream id's, press control-c to quit...
Found 0xBF = Private Stream 2 [@LBA 0]
Found VOB-ID: 01/CELL-ID: 01 [@LBA 0]
Encountered encrypted sector, attempting key recovery
At this point you can abort by pressing Control-C.
The first argument indicates an input VOB file and the -i argument indicates which ifo file to parse. If you've used FlaskMpeg 0.594 (or above) before you'll know that list.. it's the same as Flask will give you. When you play the DVD in normal mode title 1 will play, if you play it in the "follow the white rabbit" mode then title 6 will play. As you may know on computers you start counting at 0, therefore the PGC we want to parse is PGC 0.
To rip the movie type "vstrip streamlist.lst -if:\video_ts\vts_02_0.ifo -p0 -$1024 -omatrix.vob" As you've probably guesses streamlist.txt is a streamlist file and you should ALWAYS use a streamlist. @ indicates that the input file is indeed a streamlist and not a VOB file, -p0 indicates to parse PGC 0, -$1024 tells the program to split the output files in 1024MB parts.. if you don't indicate anything the output file will be one huge file and certain programs (and operating systems.. can you say Win9x?) will not be able to read the files anymore. -omatrix.vob finally will indicate to write the output to matrix.vob. The 2nd file will be called matrix_1.vob, etc. The @ to indicate a streamlist input is optional if your streamlist has the ending .lst.
A word about keysearch: vStrip has a really advanced keysearch which is highly configurable. Normally the first file in the streamlist will be scanned and the key used for all VOBs in the streamlist. It now incorporates DeCSS+ decryption algorithms as well which makes it even more powerful. The flags to adjust the keysearch are the following: -mX, -nX, -qX and -rX. -mX will set how many keys a key deduced from padding streams is worth (VobDec like keysearch) , -nX indicates for how many key occurences the DeCSS+ algorithm will look, -qX finally will set how many percent of all keys found a key candidate has to have to be used as decryption keys. The default values for -m, -n and -q are 8, 8 and 75 respectively. The -rX flag, finally, will allow you to adjust the keysearch on the VOB structure. -r1 will search every VOB id for a key, -r2 will search every Cell for a key, but using the same key for the every cell number. For instance let's assume we have VOB id 1 which has 3 cells, then VOB id2 cell1 - cell3 won't be searched for a key, but VOB id2 cell4 would. -r3 finally searches the key for each and every cell, no matter the VOB id.
To rip a movie and split it by VOB id, simply add -v before indicating the output file, this will create files named outputname_VXX__.vob where XX represents the VOB id number. To split by Cell id add -c instead of -v before the output filename and you'll get files called outputname_VXXCYY.vob where XX represents the VOB id number once again and YY represents the cell number. It's also possible to combine switches that need no argument, for instance -c/v. You could write -comatrix.vob instead of -c -omatrix.vob.
Or would you rather just demux the video stream and split to 30MB junks? No problem: "vstrip @streamlist.txt -if:\video_ts\vts_02_0.ifo -p0 -$30 -!domatrix.m2v 0xe0" does exactly that. the -! defaults to strip everything and -d enabled the demuxing mode. 0xe0 finally is the number of the video stream and this is almost always 0xe0. If unsure simply type "vstrip @streamlist.txt" which will return you something like that:
Scanning for stream id's, press control-c to quit...
Found 0xBF = Private Stream 2 [@LBA 0]
Found VOB-ID: 01/CELL-ID: 01 [@LBA 0]
Encountered encrypted sector, attempting key recovery
Deduced key: 0xE169080299
Found 0xE0 = Video Stream 0 [@LBA 1]
Width = 720
Height = 480
Aspect-ratio = [3] 16:9 display
Frame-rate = [4] 29.97 (30000/1001) fps [NTSC video frame rate]
Found 0xBD = Private Stream 1, substream 0x80 (AC3 #0) [@LBA 6]
Found 0xBD = Private Stream 1, substream 0x81 (AC3 #1) [@LBA 7]
Found 0xBE = Padding Stream [@LBA 22]
Found VOB-ID: 02/CELL-ID: 01 [@LBA 4262]
Found 0xBD = Private Stream 1, substream 0x82 (AC3 #2) [@LBA 4267]
As you can see in the 6th line vStrip found a video stream and indicated its id, then the stream's properties. Or would you rather demux the audio track? No problem: "vstrip @streamlist.txt -if:\video_ts\vts_02_0.ifo -p0 -$30 -!domatrix2.ac3 0xBD 0x81" demuxes the 2nd audio track with id 0x81 and splits it to 30mb junks although the splitting is pretty useless here. You can see which audio streams there are in the above vStrip output again.. there are 3, 0x80 (main 5.1 soundtrack), 0x81 (commentary) and 0x82 (music only track".
Now let's go for a complicated operation: "vstrip @streamlist.txt -if:\video_ts\vts_02_0.ifo -p0 -$30 -omatrix.vob 0xe0 0xBD 0x81 =0x80" will rip the movie as usual to a vob file that is being splitted but the soundtrack 0x81 will be remapped to 0x80.
You can also indicate -l which will list the cell ids parsed by vStrip.
To deal with multiangles you can add the -jX option which specifies the angle to be used. -j0 disables multiangle removal, -j1 should give you the first angle (normally English in Disney R1 movies), etc.
If you'd rather specify the key on your own you can add the flag -k1234567890 which will then use the key 1234567890 to decrypt rather than search for a key. This is useful for VOBs where VobDec can't find a key. Then we have the -g options which will only keep the GOPs but still producing VOBs (so don't use -! or -d with it), in order to have small VOBs with only the audio tracks for use in Graphedit. However you can also keep the VOBs and simply use a multiple VOB source filter. -sX searches to LBA position X and start stripping from there (one LBA = 2048B), then you could change the frame rate and aspect ratio flags of the MPEG stream but that's probably not such a good idea.
And a word about the new options in v0.8:
"vstrip d:\ -u" will give you a full lba listing of all files on the DVD (d:\ would be the drivename). Here's just an excerpt from the outpu:
VIDEO_TS/ [@LBA: 240 - 240]
VIDEO_TS.BUP [@LBA: 224407 - 224413]
VIDEO_TS.IFO [@LBA: 224400 - 224406]
VTS_01_0.BUP [@LBA: 539725 - 539739]
VTS_01_0.IFO [@LBA: 224415 - 224429]
VTS_01_0.VOB [@LBA: 224430 - 2321581]
VTS_01_1.VOB [@LBA: 224430 - 539724]
VTS_02_0.BUP [@LBA: 3504211 - 3504287]
VTS_02_0.IFO [@LBA: 539740 - 539816]
VTS_02_0.VOB [@LBA: 539817 - 612458]
VTS_02_1.VOB [@LBA: 612459 - 1136745]
VTS_02_2.VOB [@LBA: 1136746 - 1661032]
VTS_02_3.VOB [@LBA: 1661033 - 2054294]
VTS_02_4.VOB [@LBA: 2054295 - 2578581]
VTS_02_5.VOB [@LBA: 2578582 - 3102868]
VTS_02_6.VOB [@LBA: 3102869 - 3504210]
VTS_03_0.BUP [@LBA: 4097642 - 4097669]
VTS_03_0.IFO [@LBA: 3504288 - 3504315]
VTS_03_0.VOB [@LBA: 3504316 - 5601467]
VTS_03_1.VOB [@LBA: 3504316 - 4028602]
VTS_03_2.VOB [@LBA: 4028603 - 4097641]
The -t option selects an IO library to use. In v0.8 ASPI support has been added, and it's being used by default. -t1 selects clib (the old one) then ASPI (assuming the first has failed... most likely in 1.00GB cases), -t2 selects the inverse, and -t3 selects clib only.
-e finally adds support for non VOB files. So if you want to demux a regular mpg file (which doesn't have to be 2k = 2^11 = 2048 bytes aligned) you will want to set that option as well.
Start up the GUI, press the Add... button and select the VOB files of the main movie (largest number of continuously numberd VOB files.. or the files that have the same vts_xy in the name as the largest .ifo file on the DVD disc).
If you don't see any files when you press Add.. here's a little trick. Especially far eastern pirate discs often appear to have no files on the disc at all. Almost the same thing started happening with my (official) R1 Matrix DVD. Since June 2000 I no longer get anything but autorun.exe to see on this disc. When in the add dialogue you can start entering path and directory to your DVD drive. For instance: My DVD drive has the drive letter F:. So when I start putting f:\video_ts\ into the path of the file to be added I suddenly get a list of available files. Add the first file, then close the window and press the Add... button again. And you finally see all the files. If this doesn't help you can use the UDF parser of vStrip by pressing the UDF... button.
vStrip will appear to have crashed for a bit when you press the button. But you'll see the LED of your drive is lit so everything is okay.
Once you get the listing double clicking on a file on the left will add it to the list on the right. Once you've selected all the files press OK.
Now press Run for starters. After it starts displaying VOB-ID: XY... you can abort the run. Now you have the listing of the audio and subtitle streams. Stream 0xE0 is usually the video stream, 0xBD 0x8x are AC3 or DTS streams (usually DTS would be 0x88 or 0x89). 0x80 is the default language stream - usually English. Stream IDs 0xAx would be PCM audio streams and 0xC0 are MP2 audio streams. Streams 0xBD 0x20 - 0x3F are subtitle streams. OxBF finally is the padding stream. (this refers to the first picture btw).
Make sure the Is VOB? checkbox is checked when you're dealing with VOBs. Start and End LBA are not important anymore as we have IFO parsing. Last but not least if you have movies which still have encrypted parts after ripping (that's called improper authoring.. usually they use another CSS key on the 2nd layer of the DVD) you will want to change the decryption search:
Usually Each VOB-ID should do the trick, but just to make sure you can select EAch VOB- & CELL-ID which will find any keychange for sure.
And just to make sure you can set Mult and Tresh to 1 each.
Next go to the IFO tab:
Press the ... button and select the largest .ifo file on the DVD. Then select the appropriate PGC. Usually PGC0 is the main movie, but in case of a seamless branching movie you may have several PGCs with different length. In that case just select the version which correspond to the release you want to rip (for instance: ID4 has 4 PGCs, 2 having the same lenght. The longer ones are the director's cut, the shorter one the theatrical release, and nobody knows why there are 2 PGCs for each release). If you only want to rip certain VOB or CELL IDs, just select the corresponding VOB id and uncheck all the cells you don't want (unchecking all will skip the VOB id). But in fact this feature isn't so useful. If you have a multiangle title you can select Angle 1 which will skip all the other angles (like interleaved French / English credits in Disney movies).
You also get a listing of subtitle streams and audio streams with the corresponding language and properties.
If you want to extract just certain VOB IDs or Cells select the appropriate start point, then right click:
At the starting point you select Set Start LBA. Then click on the last Cell you want to include in your selection and press Set End LBA. The values will now be entered in the LBA fields in the Input tab. Eventually we should get a chapter selection here but at the moment this will have to do.
Now go to the output tab
Select an output name, then select split size to whatever you want. A highly suggested value is 1024MB. Splitting by VOB or CELL-ID shouldn't be necessary thanks to the IFO parsing. For a regular rip this is everything and you can press the Run button now.
If you like to grab only certain streams we can go into the advanced options. Checking demux will enable demux mode. Now on the right check SubStreams and select all the streams you want to grab (remember that in the input tab you got a listing of these streams). If you select Only GOP-Headers you can create audio VOBs by just selecting audio streams. The following screenshot shows how to grab AC3 streams 0x80 and 0x81 and to create an audio VOB out of them.
There's one more feature. Let's say you want to extract these 2 audio streams and at the same time you want to demux the video stream to another file. After having set up the audio extraction as shown above click on Output 1 which you can configure the same way as Output 0. Here's how you demux the video stream:
A last word: You'll have an easier time with the GUI if you understand the command line options.. it's a bit hard to explain all the features in the GUI version without knowing how it works in the command line.
Conclusion: If you encounter a difficult case, want do demux an ac3 stream and make sure it has the same length as your video done is Flask, if you use a non IFO parsing capable de/encoding program you should use vStrip's ifo parsing. That way you get rid of unnecessary studio logos which screw up synch, ads, FBI warnings, etc right during the ripping process. vStrip is also the ony program that can handle discs that contain mastering errors.
>> BACK
This document was last updated on 10/13/02