Moritz Bunkus - ( Open Source)
MKVToolNix is a handy and powerful set of tools for easily creating and working with Matroska (.MKV) files.
MKVtoolnix is a handy application that helps you to work with Matroska - a multimedia container that allows to unite in a single file video, audio and subtitle tracks, taking the concept of mkvextract GUI but empowered with some additional features. The application lets you extract the audio, video and subtitles of MKV container, mix new audio tracks, videos or subtitles, convert videos and audios to Matroska (MKV) format, offering the possibility to choose the default audio or add more, and the same with subtitle tracks. In addition, you can retouch MKVToolnix quality and appearance of the video. MKVToolnix supports the many formats such as for video: 264, AVC, H.264, AVI, DRC, MP4, MPG, MPEG, M1V, M2V, EVO, MKV, OGG, MOV, RA, RAM, RMVB, VC1; audio: AC3, AAC, M4A, MP4, DTS, FLAC, OGG, MP2, MP3, MKA, TTA, WAV, WV and subtitles: SRT, ASS, SSA, USF, XML, IDX.
New features and enhancements:
Mkvmerge, MKVToolNix GUI multiplexer: AC-3, DTS, TrueHD: added an option for removing/minimizing the dialog normalization gain for all supported types of the mentioned codecs.
Mkvmerge: AV1: added support for reading AV1 video from IVF, WebM and Matroska files.
Mkvmerge: FLAC: mkvmerge can now ignore ID3 tags in FLAC files which would otherwise prevent mkvmerge from detecting the file type.
Mkvinfo: the size and positions of frames within "SimpleBlock" and "BlockGroup" elements are now shown the same way they're shown for other elements (by adding the `-v -v` and `-z` options).
MKVToolNix GUI: multiplexer: added options for deriving the track languages from the file name by searching for ISO 639-1/639-2 language codes or language names enclosed in non-word, non-space characters (e.g. "[ger]" for German or "+en+" for English).
MKVToolNix GUI: info tool: implemented reading all elements in the file after the first cluster. Only top-level elements are shown; child elements are only loaded on demand.
MKVToolNix GUI: info tool: added a context menu with the option to show a hex dump of the element with the bytes making up the EBML ID and the size portion highlighted in different colors. In-depth highlighting is done for the data in `SimpleBlock` and `Block` elements.
MKVToolNix GUI: chapter editor: added an option to remove all end timestamps to the "additional modifications" dialog.
Bug fixes:
Mkvmerge: MP4 reader: fixed reading the ESDS audio header atom if it is located inside a "wave" atom inside the "stsd" atom.
Mkvmerge: MP4 reader: AAC audio tracks signalling eight channels in the track headers but only seven in the codec-specific configuration will be treated as having eight channels.
Mkvmerge: MPEG TS reader: fixed wrong handling of the continuity counter for TS packets that signal that TS payload is present but where the adaptation field spans the whole TS packet.
Mkvmerge: the 'document type version' and 'document type read version' header fields are now set depending on which elements are actually written, not on which features are active (e.g. if a `SimpleBlock` is never written, then the 'read version' won't be set to 2 anymore).
Mkvmerge: the 'document type version' header field is now set to 4 correctly if any of the version 4 Matroska elements is written.
Mkvinfo: summary mode: the file positions reported for frames in `BlockGroup` elements did not take the bytes used for information such as timestamp, track number flags or lace sizes into account. They were therefore too low.
Mkvpropedit, MKVToolNix GUI header editor: the 'document type version' and 'document type read version' header fields are now updated if elements written by the changes require higher version numbers.
Mkvpropedit, MKVToolNix GUI header editor: mandatory elements can now be deleted if there's a default value for them in the specifications.
Source code: fixed a compilation error on FreeBSD with clang++ 5.0.
Build system changes:
A compilation database (in the form of a file `compile_commands.json`) can be built automatically if the variable `BUILD_COMPILATION_DATABASE` is set to `yes` (e.g. as `rake BUILD_COMPILATION_DATABASE=yes`).