VOB2MKV is a set of DirectShow filters and other utilities for converting VOB (MPG) files to Matroska format (MKV), without having to transcode the data in the files.
The VOB2MKV project comprises DirectShow filters and DirectShow applications that use those filters. The purpose of the project is to allow VOB files to be converted to MKV, and then be able to render the MKV files with any DirectShow player, such as Windows Media Player.
The filter VTSREAD is an async source filter that opens all of VOB files associated with a single track from a DVD, and delivers the byte stream to the downstream filter as if the stream were coming from a single file. This saves you the step of having to do a binary copy of multiple VOB flies in order to create a single file.
The output of the VTSREAD is pulled downsteam by the MPEG-2 Splitter filter, which is in turn connected to another filter in this project, MKVMUX. This is a multiplexing filter that writes a Matroska file (.MKV) containing the streams made available by the splitter. The MKVMUX filter currently supports one MPEG-2 video stream and one AC-3 audio stream.
The executable VOB2MKV builds a filter graph using VTSREAD and MKVMUX, reading from the VOB file(s) and writing to the MKV file named on the command-line.
Once you have the MKV file, you can render it using the application of your choice. The MKVSOURCE filter allows any DirectShow-based player to render the MKV files made by VOB2MKV. The application RENDERMKV is a very simple rendering app for MKV files, that uses the MKVSOURCE filter directly for MKV parsing.
The combination of MKVMUX and MKVSOURCE thus provides a complete, open-source solution for the production and rendering of MKV files.
This project was motivated by the fact that the Western Digital HD TV Media Player supports MKV files containing MPEG-2 and AC-3 streams. That device also supports reading VOB files directly, but Matroska is a better, more general-purpose format than VOB/MPG, especially for seeking. I wanted a simple way to store the data from a DVD track inside a Matroska container, but without having to transcode the data, since I wanted to preserve exactly what was on the DVD.