Skip to content
Cross-platform D2V creator
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.



D2V Witch indexes various video streams and writes D2V files. These can be used with the VapourSynth plugin d2vsource.

Supported container formats:

  • MPEG elementary streams
  • MPEG program streams (aka DVD)
  • MPEG transport streams (aka Blu-ray and TV captures)
  • PVA streams.

Supported video codecs:

  • MPEG 1
  • MPEG 2

The executable is both a console application and a graphical one. The graphical interface is shown if the command line parameters passed are all recognised by Qt, or if there are no command line parameters.

Due to technical reasons, D2V Witch will not look quite right in cmd.exe, but it's still pretty usable.

In order to help with cutting and demuxing parts of the video, the graphical interface will use the VapourSynth plugin d2vsource to display the video, if VapourSynth and the plugin can be found. Cutting parts of the video can still be done even if they are not found.

Usage: d2vwitch [options] input_file1 input_file2 ...

        Display this message.

        Display version numbers and ffmpeg configuration.

        Display relevant information about the input file(s), such as a
        list of all the video and audio tracks and their ids.

        Do not print progress information or warnings. Fatal errors are
        always printed.

    --output <d2v name>
        Specify the name of the D2V file. The special name "-" means
        standard output. If not specified, the name of the D2V file is
        deduced from the name of the first input file.

    --audio-ids <id1,id2,...>
        Demux the audio tracks with the specified ids. The special
        value "all" means that all audio tracks should be demuxed. By
        default, no audio tracks are demuxed. The names of the audio
        files are deduced from the name of the D2V file.

    --video-id <id>
        Process the video track with this id. By default, the first
        video track found will be processed.

    --input-range <range>
        Set the YUVRGB_Scale field in the d2v file according to the
        video's input colour range. Possible values are "limited" and
        "full". By default, the video is assumed to have limited range.

    --ffmpeg-log-level <level>
        Control how much of ffmpeg's messages will be printed. Possible
        values: 'quiet', 'panic', 'fatal', 'error', 'warning', 'info',
        'verbose', 'debug', and 'trace'. The default is 'panic'.

    --relative-paths <yes|no>
        If 'yes', the paths to the video files written in the d2v file
        will be relative to the location of the d2v file. If 'no', the
        paths will be absolute paths. If the name of the d2v file is
        '-' (standard output), then this option is ignored and the
        paths will be absolute paths. The default is to use the value
        stored in the program's configuration file. If no value is
        stored in the configuration file, then the default is 'no'.

        Index only the one file provided on the command line. Without
        this parameter, D2V Witch will detect sequences of files
        called "VTS_xx_y.VOB" and it will index any such files that
        follow the provided file in the sequence. The detection and
        sorting are case-insensitive.

        For example, if a folder contains the files vts_01_1.vob,
        vts_01_2.vob, vts_01_3.vob, vts_02_1.vob, vts_03_1.vob,
        file1.mpg, and file2.mpg:
            `d2vwitch vts_01_2.vob` will index vts_01_2.vob and
                vts_01_3.vob. It will not index vts_01_1.vob because
                it comes before the file provided in the command. It
                will not index vts_02_1.vob or vts_03_1.vob because
                those don't go together with the file provided in the
            `d2vwitch --single-input vts_01_2.vob` will index only
                vts_01_2.vob because --single-input disables the
                automatic detection of sequences.
            `d2vwitch file1.mpg` will index only file1.mpg because the
                file name doesn't follow the special pattern.
            `d2vwitch vts_01_1.vob vts_01_2.vob` will index only the
                files provided in the command, because more than one
                file was provided.


The usual steps work:

  • A C++11 compiler
  • FFmpeg 3.4 or newer (Libav maybe works too)
  • Qt 5.2, or maybe newer (5.5.1 works)
  • VapourSynth.h


The "skip" field is always 0, because the author has no clue about this stuff/the DGIndex manual's Appendix A doesn't explain it well enough.

The "vob" and "cell" fields are always 0, because ffmpeg doesn't know about the structure of DVDs, and the author doesn't care.


MPEGParser.cpp is available under the LGPL v2.1 license. The rest of the code is available under the ISC license.

You can’t perform that action at this time.