MKVToolnix (Updates)



Latest Version 9.3.1 Last updated: July 14, 2016


[B]2016-08-22 Moritz Bunkus <>

  • Released v9.4.0 “Knurl”.[/B]

2016-08-16 Moritz Bunkus <>

  • mkvpropedit: bug fix: mkvpropedit will no longer say that it’s writing the changes if only attachment changes are specified and none of the specified attachments can be found.

2016-08-11 Moritz Bunkus <>

  • MKVToolNix GUI: chapter editor bug fix: overly long chapter names don’t cause the GUI’s window to become overly wide anymore. Fixes #1760.

2016-08-10 Moritz Bunkus <>

  • mkvmerge: DTS bug fix: if present mkvmerge will use an XLL extension’s sample rate information as the sample rate to put into the track headers. Fixes #1762.

2016-08-06 Moritz Bunkus <>

  • mkvmerge: new feature: added support for reading Apple ProRes video from MOV/MP4 files. Patch by Chao Chen (see AUTHORS).

2016-08-02 Moritz Bunkus <>

  • mkvmerge: bug fix: when appending files mkvmerge wasn’t starting clusters on video key frame anymore for the first and all following appended files. Fixes #1757.

2016-07-31 Moritz Bunkus <>

  • MKVToolNix GUI: merge tool enhancement: when adding attachments the GUI will check if there are attachments or attached files with the same name as the file to add. If so the GUI will tell the user and ask for confirmation.

2016-07-30 Moritz Bunkus <>

  • mkvmerge: enhancement: mkvmerge now accepts file names in square brackets for appending files, e.g. “mvkmerge -o out.mkv [ in1.avi in2.avi in3.avi ]” instead of “mkvmerge -o out.mkv in1.avi + in2.avi + in3.avi”.

2016-07-29 Moritz Bunkus <>

  • mkvmerge: bug fix: VP8 in Ogg: fixed dropping the first frame and the timestamp calculation. Fixes #1754.
  • mkvmerge: bug fix: mkvmerge does no longer emit a warning if no comment header packet is found when reading tracks from Ogg/OGM files. See #1754.

2016-07-19 Moritz Bunkus <>

  • MKVToolNix GUI: merge tool enhancement: the “select a play list to add” dialog does now contain a column with the number of chapters for each play list found.
  • MKVToolNix GUI: job queue enhancement: dragging & dropping a valid .mtxcfg file (either a full job file or one containing only merge settings without the job properties) onto the job queue window will import the dropped .mtxcfg job into the job queue. Rest of the implementation of #1714.

2016-07-18 Moritz Bunkus <>

  • MKVToolNix GUI: merge tool enhancement: dragging & dropping a job queue .mtxcfg file onto the merge tool or using one as a command line parameter to the mkvtoolnix-gui executable will import the .mtxcfg job into the job queue. Part of the implementation of #1714.

2016-07-15 Moritz Bunkus <>

  • MKVToolNix GUI: merge tool bug fix: the automatic adjustments to the output file name based on the track types selected for muxing and the mechanism for keeping output file names unique had been broken since release v9.3.0. Fixes #1743.
  • MKVToolNix GUI: merge tool enhancement: toggling the WebM mode check box will update the output file name’s extension automatically.


[B]2016-12-27 Moritz Bunkus <>

  • Released v9.7.1 “Pandemonium”.[/B]
  • MKVToolNix GUI: multiplex tool bug fix: under certain circumstances the GUI was creating invalid JSON files when starting to multiplex resulting in an error message (“JSON option files must contain a JSON array consisting solely of JSON strings”).

2016-12-27 Moritz Bunkus <>

  • Released v9.7.0 “Numbers”.
  • Deprecation warning: Several options and features are now deprecated and will be removed at the start of 2018. These are:
  • mkvmerge: the options “–identify-verbose”, “–identify-for-gui”, “–identify-for-mmg” and “–identification-format verbose”. Please convert existing users of these interfaces to use mkvmerge’s JSON identification output which can be invoked with “–identification-format json --identify …”.
  • all command line tools: the old, proprietary format used for option files. Please convert users of this interface to the new JSON option file format introduced in this release.
  • all command line tools: the option “–check-for-updates” (the GUI will keep its online check for updates, though). There is and will be no equivalent interface in the tools themselves. Users of this interface can switch to retrieving the information about available updates directly from the MKVToolNix website. The information is available as JSON and XML files at the following URLs:

2016-12-26 Moritz Bunkus <>

  • mkvmerge: enhancement: added a new track property in JSON/verbose identification mode called “multiplexed_tracks”. It’s an array of track IDs that describe which of the tracks mkvmerge reports as separate ones were originally part of the same source track (e.g. TrueHD+AC-3 in a single track in MPEG transport streams). Implements #1835.

2016-12-23 James Almer <>

  • mkvmerge: added support for skipping APE(v2) tags in TTA files.

2016-12-22 Moritz Bunkus <>

  • mkvextract: enhancement: added support for reporting progress in --gui-mode the same way mkvmerge does.
  • mkvmerge: bug fix: when using --track-order without specifying all tracks, the track numbers could end up in a way the user did not expect. Now mkvmerge will always assign track numbers for those tracks that are listed in --track-order first. The other tracks are assigned numbers afterwards. Fixes the second part of #1832.
  • mkvmerge: bug fix: when reading Matroska files the movie title was always taken from the first Matroska source file, even if that file didn’t have a title set. Fixes one part of #1832.

2016-12-19 Moritz Bunkus <>

  • all: new feature: all command line tools can now read JSON-formatted option files. Such a file’s name must have an extension of “.json” (e.g. “mkvmerge @options.json”). Its content must be a valid JSON array consisting solely of JSON strings.

2016-12-17 Moritz Bunkus <>

  • build system: building the GUI components of MKVToolNix now requires Qt v5.3.0 or newer.

2016-12-16 Moritz Bunkus <>

  • MKVToolNix GUI: header editor & jot output enhancement: added menu entries for saving or closing all open tabs.

2016-12-13 Moritz Bunkus <>

  • MKVToolNix GUI: chapter editor enhancement: added menu entries for saving or closing all open tabs.
  • build system: MKVToolNix now requires a compiler that supports the following features of the C++14 standard: “std::make_unique()”, “digit separators”, “binary literals” and “generic lambdas”. For the GNU Compiler Collection (gcc) this means v4.9.x or newer; for clang it means v3.4 or newer.

2016-12-11 Moritz Bunkus <>

  • mkvmerge: MPEG TS/MPLS reader improvements: added support for subtitle tracks that are referenced from the MPLS file as sub-paths in other M2TS files than the main tracks.

2016-12-08 Moritz Bunkus <>

  • MKVToolNix GUI: re-worked the startup code not to use lock files when trying to open a socket for communicating with an already-running instance. This aims to prevent situations with stale lock files not being cleaned up and the GUI not starting anymore as a result. This might fix or prevent issues like #1805.
  • mkvmerge: teletext subtitle bug fix: fixed the handling of DVB teletext subtitles signaled with data unit ID 0x02 and that contain pages from multiple magazines.

2016-12-05 Moritz Bunkus <>

  • MKVToolNix GUI: multiplexer enhancement: the file identification process has been re-written to be properly multi-threaded. This allows the user to continue working with the GUI while e.g. playlists from a Blu-ray are identified.

2016-12-03 Moritz Bunkus <>

  • mkvmerge: enhancement: mkvmerge can now handle Blu-ray playlists from the “BACKUP” sub-directory of a Blu-ray disc.
  • MKVToolNix GUI: new multiplexer feature: added a menu entry for copying the title to the destination file name. It will replace the destination file’s base name but keep its path & extension.
  • MKVToolNix GUI: new multiplexer feature: all positive file identification results will now be cached between runs. This speeds up adding the same file a lot, especially when scanning the same Blu-ray playlists again. Cached results are invalidated automatically with newer MKVToolNix releases or when the source file changes.

2016-12-02 Moritz Bunkus <>

  • MKVToolNix GUI: multiplexer enhancement: when the user tries to add one of the main Blu-ray index files (index.bdmv, MovieObject.bdmv) the GUI will automatically scan the Blu-ray playlist files and offer them for selection.
  • mkvmerge: bug fix: files smaller than 4 bytes were wrongly identified as MPEG transport streams.
  • MKVToolNix GUI: multiplexer enhancement: tracks, chapters, tags, attachments not selected for multiplexing will be displayed the same way as other disabled controls. Implements #1819.

2016-11-30 Moritz Bunkus <>

  • mkvmerge: bug fix: the MPEG transport stream reader was using an outdated format for the “CodecPrivate” element for HDMV TextST subtitles. This has been updated to the current format which only contains the “dialog style element”.
    Existing Matroska files using this outdated scheme can be fixed by running them through mkvmerge v9.6.0 itself or any later release as the old format is automatically converted to the new one when it is read from Matroska files.


[B]# Version 9.8.0 “Kuglblids” 2017-01-22[/B]

Important notes

  • build system: the included version of the “drake” build tool has been removed. Since Ruby 2.1 rake has supported parallel builds, too. The MKVToolNix build system has been adjusted to enable parallel builds by default.

New features and enhancements

  • mkvmerge: VobSub in Matroska: mkvmerge will now create and use a default index for VobSub tracks read from Matroska files that are missing their CodecPrivate element (which normally contains said index). Implements #1854.
  • GUI: added checks for several common problems with the installation. These checks will be executed when the GUI starts, and any problems will be reported to the user.
  • mkvmerge: added the ISO 639-2 language codes “qaa” and “qad” (both are titled “reserved for local use”) as both are used often in France. See #1848 for more information.
  • mkvmerge: the JSON identification result now includes a track’s codec delay if set (only for Matroska source files). The JSON schema version has been bumped to 6.
  • mkvmerge: MPEG TS: added a workaround for files where the subtitle packets are multiplexed properly, but where their timestamps are way off from the audio and video timestamps. Implements #1841.
  • mkvmerge: added support for Digital Video Broadcasting (DVB) subtitles (CodecID S_DVBSUB). They can be read from MPEG transport streams and from Matroska files. Implements #1843.

Bug fixes

  • mkvmerge: MP4 reader: when an MP4 file contained fewer entries for timestamps than frames (which they never should), mkvmerge would use 0 as the timestamp for all the other frames. This resulted in effects such as the last frame of an output file having a timestamp of 0 and in split files having a much longer duration than they should have. Fixes #1847.
  • GUI: the cache cleanup process that’s run automatically when the GUI starts no longer blocks file identification until it is finished. Additionally the process will only be run once per release of MKVToolNix. Fixes #1860.
  • GUI: certain failures during file identification that can be traced to broken installations (e.g. mkvmerge being too old) won’t be stored in the cache anymore. Without this fix the GUI would still use the cached failed identification result even though the underlying might have already been fixed.
  • mkvmerge: fixed that the error message “not enough space on disk” was shown twice on some operating systems. Fixes #1850.
  • mkvmerge, Matroska: if a codec delay is set for a track in the input file, it is kept. Fixes #1849.
  • GUI: multiplexer: changing default values in the preferences (e.g. the default track language to set) did not affect files whose identification results had already been cached.
  • mkvmerge, MP4: fixed detection of MP3 audio when the object type ID in the ESDS signals MP2 and the track headers have invalid values for number of channels or sampling frequency. Fixes #1844.

Build system changes

  • nlohman json-cpp: configure now looks for a system-wide installed version of the nlohmann json-cpp header-only library. If one is found, it is used; otherwise the included version will be used. Implements #1858.
  • If MKVToolNix is built with rake v10.0.0 or newer, its “multitask” feature will be turned on allowing automatic parallel builds.
  • CURL is no longer used by MKVToolNix and is therefore not required for building anymore.

Other changes

  • GUI: the update check now uses Qt’s networking classes instead of CURL.
  • The command line option “–check-for-updates” has been removed, even though the deprecation warning in release 9.7.0 stated that it would be removed in 2018.


[B] Version 9.9.0 “Pick Up” 2017-02-19

New features and enhancements

  • GUI: chapter editor: added a character set selection in the preferences for text files. If a character set is selected there, it will be used instead of asking the user when opening text chapter files. Implements #1874.
  • GUI: multiplexer: added a column “character set” to the “tracks, chapters and tags” list view showing the currently selected character set for that track. Implements #1873.
  • mkvmerge: added an --engage option “all_i_slices_are_key_frames” for treating all I slices of an h.264/AVC stream as key frames in pathological streams that lack real key frames. Implements #1876.
  • GUI: running programs after jobs: added a new variable <MTX_INSTALLATION_DIRECTORY> for the directory the MKVToolNix GUI executable is located in.
  • mkvmerge: DVB subtitle tracks whose CodecPrivate data is only four bytes long will now be fixed up to the proper five bytes by adding the subtitling type byte.
  • mkvmerge: MP4 reader: “ctts” version 1 atoms are now supported.

Bug fixes

  • mkvmerge: AC-3 handling: some source files provide timestamps for audio tracks only once every n audio frames. In such situations mkvmerge was buffering too much data resulting in a single gap in the timestamps of one frame duration after frame number n - 1 (the second audio timestamp read from the source file was used one output frame too early). Fixes #1864.
  • mkvmerge: MP4 reader: mkvmerge was only reading a small part of MP4 DASH files where the first “moov” “mdat” atoms occur before the first “moof” atom. This is part of the fix for #1867.
  • mkvmerge: MP4 reader: edit list (“edts” atoms) that are part of the “moof” atoms used in MP4 DASH files weren’t parsed. Instead the edit lists from the main track headers inside the “moov” atom were used. This is part of the fix for #1867.
  • mkvmerge: MP4 reader: when an MP4 DASH file contained both normal chunk offset table (“stco”/“co64” atoms) in their regular “moov” atoms, a sample-to-chunk table (“stsc” atom) whose last entry had a “samples per chunk” count greater than 1 and DASH “trun” atoms, then mkvmerge was calculating wrong positions the frame content. This is part of the fix for #1867.
  • mkvmerge: MP4 reader: mkvmerge couldn’t deal with the key frame index table having duplicate entries. The result was that only key frames up to and including the first duplicate entry were marked as key frames in the output file. All other frames weren’t, even though some of them were referenced from the key frame table after the first duplicate entry. This is part of the fix for #1867.
  • mkvmerge: MP4 reader: when an MP4 file contained more than one copy of the “moov” atom (the track headers etc.), mkvmerge was parsing them all adding tracks multiple times. Fix for #1877.
  • mkvmerge: MP4 reader: fixed an integer overflow during the timestamp calculation leading to files with wrong timestamps. Such files could not be played back properly by most players. Fixes #1883.
  • mkvmerge: MPEG TS reader: if the PMT lists a DVBSUB track, mkvmerge will now recognize it without having to find a packet for it within the probed range.
  • mkvmerge: splitting by parts (both the “timestamps” and the “frames” variants): fixed the calculation of track statistics tags. When calculating the duration the skipped portions weren’t taken into account leading to a too-high duration. As a consequence the BPS tag (bits per second) was wrong, too. Fixes #1885.
  • mkvmerge: reading files with DVB/HDMV TextSV subtitle tracks with invalid CodecPrivate caused mkvmerge to abort with an error from boost::format about the format string not having enough arguments. Fixes #1894.
  • mkvmerge: fixed misdetection of certain AC-3 files as MP3 files which led to an error message that “the demultiplexer could not be initialized”.
  • mkvmerge: fixed huge memory consumption when appending big Matroska files with sparse tracks (e.g. forced subtitle tracks). The Matroska reader will now queue at most 128 MB of data. Fixes #1893.
  • mkvmerge: MP4 reader: the timestamps of all multiplexed tracks will now be 0-based properly.
  • mkvmerge: MP4 reader: the DTS-to-PTS offsets given by the “ctts” atoms are now applied for all tracks containing a “ctts” atom, not just h.264 & h.265 tracks.

Build system changes

  • Up to and including release 9.8.0 the man pages and their translations came pre-built and bundled with the source code. Those pre-built files have now been removed and must be built during the build process. Therefore the tool “xsltproc” and the DocBook XSL stylesheets for man pages are now required dependencies. Additionally the tool “po4a” must be installed for the translated man pages to be built and installed, though this is optional.
    In order to facilitate finding the new requirements new options have been added to confiure: “–with-xsltproc=prog”, “–with-docbook-xsl=dir”, “–with-po4a=prog” and "–with-po4a-translate=prog.
  • pugixml detection will be attempted via “pkg-config” first. If that fails, “configure” will fall back to the previous method of trying just to compile and link a test program with the standard include and library locations. Implements #1891.


Version 10.0.0


Version 12.0.0 “Trust / Lust” 2017-05-20

New features and enhancements

  • MKVToolNix GUI: the key combination Ctrl+Shift+Space will now toggle the selection of the current item in all tree views where multiple selections are allowed. Implements #1983.
  • MKVToolNix GUI: chapter editor: added the extension *.cue (for cue sheet files) to the “open chapter file” dialog.
  • mkvmerge: cue sheet parser: if the cue sheet contains a non-empty TITLE entry and if no other segment title has been set yet, then the segment title will be set to the cue sheet’s TITLE value. Implements #1977.
  • mkvmerge, MKVToolNix GUI (multiplexer): added an option --no-date that prevents the “date” field from being written to the segment information headers. Implements one half of #1964.
  • mkvpropedit, MKVToolNix GUI: header editor: added support for editing the “date” segment information field. Implements the other half of #1964.

Bug fixes

  • MKVToolNix GUI: preferences ? job actions, type “play audio file”: the GUI will no longer clear the audio file name input if the user aborts the audio file selection dialog.
  • MKVToolNix GUI: preferences ? job actions, type “play audio file”, on Windows: the default “play audio” action was pointing to the wrong directory. Existing configurations with such a wrong path will be fixed automatically upon starting the GUI. Fixes #1956.
  • mkvmerge: HEVC/h.265 parser: fixed the superfluous copying of the bitstream_restriction_flag and its dependent flags in the VUI parameters of the sequence parameter sets if the timing information is present, too. This fixes #1924 properly, and it also fixes #1958.
  • mkvmerge: MPEG TS reader, AAC parser: the MPEG TS reader will now force the AAC parser to use the multiplex mode that the MPEG TS reader has detected (e.g. LOAS/LATM). This prevents the AAC packetizer from mis-detecting it in its own attempt to identify the mode. Fixes #1957.
  • mkvmerge: MPEG TS reader: valid MPEG transport streams that start with an h.264/h.265 start code (e.g. a file created by cutting at an arbitrary position) were not recognized as a supported file type.
  • mkvmerge: MPEG TS reader: fixed a potential read access from invalid memory addresses in the code parsing the program map table (PMT).
  • mkvmerge: MPEG TS reader: if packets are encountered that belong to a PID not listed in the program map table (PMT), mkvmerge will attempt to determine their type and codec from the content. This supported content types are AAC (ADTS only) and AC-3. Fixes #1980.
  • mkvmerge: MP4 reader: fixed finding and parsing the colr atom if there are more than one video extension atoms and the colr atom is not the first one.
  • mkvmerge: MP4 reader: the nclx colour type of the colr atom is now recognized, too (as defined by ISO/IEC 14496-12, “ISO base media format”).
  • configure: fixed configure aborting if a moc, uic, rcc or qmake binary is found, but the binary’s version is too old. Fixes #1979.


Version 13.0.0 “The Juggler” 2017-06-25

New features and enhancements

  • mkvmerge: MPEG TS reader: information about multiple programs will be output as container properties during verbose/JSON identification. See #1990 for the use case.
  • MKVToolNix GUI: multiplex tool: added a column “program” to the tracks list. Certain container types such as MPEG transport streams can contain multiple programs. The new column will contain the service name (think TV station names such as “arte HD”) for such streams. Implements the GUI part of #1990.
  • MKVToolNix GUI: multiplex tool: the dialog asking the user what to do with dropped files (add to current settings, add to new settings etc.) now remembers the previous decision and defaults to it the next time it’s shown. Implements #1997.
  • MKVToolNix GUI: tabs can now be closed by pressing the middle mouse button. Implements #1998.

Bug fixes

  • mkvmerge: MP4 reader: MPEG-1/2 video read from MP4 files was written with an invalid codec ID (e.g. V_MPEG7) in certain cases. Fixes #1995.
  • mkvmerge: MPEG PS reader: made the file type detection less strict so that garbage at the start of the file doesn’t prevent detection. Fixes #2008.
  • mkvmerge: MPEG PS reader: (E-)AC-3 tracks were not detected if the very first packet for that track didn’t contain a full (E-)AC-3 frame. Fixes #2016.
  • mkvmerge: MPEG TS reader: fixed mkvmerge not detecting all tracks in MPEG transport streams containing multiple programs. Fixes one part of #1990.
  • mkvmerge: MPEG TS reader: fixed track content being broken for some tracks read from MPEG transport streams containing multiple programs. Fixes another part of #1990.
  • mkvmerge: JSON identification: the stream_id and sub_stream_id track properties were output as hexadecimal strings instead of unsigned integers. As the ts_pid track property was only used for MPEG transport streams, its value is now output as stream_id instead, and the ts_pid property has been removed. The JSON schema version has been bumped to 8 due to this change.
  • mkvmerge: fixed a crash when appending video tracks where one track has a CodecPrivate member and the other one doesn’t.
  • mkvmerge: track statistics tags: the NUMBER_OF_BYTES tag is supposed to contain the number of bytes in a track before any of the content encoding schemes such as lossless compression is applied; however, mkvmerge was wrongfully using the number of bytes after the schemes had been applied. Fixes #2022.
  • mkvmerge: CLPI & MPLS parsers: MPLS and CLPI files with version number 0300 as used on Ultra HD Blu-ray Discs are now accepted as well. Fixes #2010.
  • mkvpropedit: fixed a crash when the selector used for --tags is invalid.
  • MKVToolNix GUI: fixed computation of value of total progress bar for multiple jobs running. Fixes #2005.
  • MKVToolNix GUI: multiplexer, adding new attachments: when the GUI checks if there’s an attachment with the same name it will now disregard disabled attached files. Fixes #2001.
  • Debian/Ubuntu packaging: during a dpkg-buildpackage run the test suite was failing when a non-English locale was active and MKVToolNix packages had already been installed. Fixes #2011.


Version 15.0.0 “Duel with the Devil” 2017-08-19

Important notes

  • mkvmerge, mkvpropedit, GUI’s header and chapter editors: the programs will no longer add most missing Matroska elements that are mandatory but have a default value in the Matroska specification (e.g. the TagLanguage element with a value of und if it isn’t present in its SimpleTag parent). Due to this change libEBML v1.3.5 is now required.

New features and enhancements

  • MKVToolNix GUI: multiplex tool: added a new entry to the “source files” context menu labeled “Set destination file name from selected file’s name”. It will force the GUI to consider the selected file to be the reference for automatically setting the file name, no matter which file was originally added as the first file. It will also force setting the destination file name once if automatic destination file name generation is turned off in the preferences. Implements part of #2058.
  • MKVToolNix GUI: multiplex tool: added an option in the preferences on “Multiplexer” ? “Output” labeled “Only use the first source file that contains a video track”. If enabled, only source files containing video tracks will be used for setting the destination file name. Other files that are added are ignore. Implements the rest of #2058.
  • MKVToolNix GUI: header editor: added support for editing the video colour attributes. Implements the second half of #2038.
  • MKVToolNix GUI: header editor: added support for the “video projection” track header attributes. Part of the implementation of #2064.
  • MKVToolNix GUI: job queue: selected jobs can now be move up and down by pressing the Ctrl+Up and Ctrl+Down keys. Additionally, push buttons to move them up & down are shown if the corresponding option is enabled in the preferences. Implements #2060.
  • mkvmerge: added support for the “video projection” track header attributes. Part of the implementation of #2064.
  • mkvinfo: added support for the “video projection” track header attributes. Part of the implementation of #2064.
  • mkvpropedit: added support for editing the video colour attributes. Implements one half of #2038.
  • mkvpropedit: added support for the “video projection” track header attributes. Part of the implementation of #2064.

Bug fixes

  • all: selecting the program’s language (e.g. via the --ui-language command-line option or via the GUI’s preferences) did not work on Linux & Unix if the LANGUAGE environment variable was set and didn’t include the desired language. Fixes #2070.
  • MKVToolNix GUI: removed the keyboard shortcuts for switching between the different tools (e.g. Ctrl+Alt+1 for the multiplexer). They overlapped with basic functionality on keyboards that use an AltGr key, e.g. German ones, where AltGr+7 emits {. As AltGr+key is implemented as Ctrl+Alt+key under the hood, this means that AltGr+7 is really Ctrl+Alt+7 which the GUI now took to mean “switch to the job queue” instead of "insert {". Fixes #2056.
  • MKVToolNix GUI: header editor: after saving the file the GUI wasn’t updating its internal file modification timestamp. That lead to the GUI wrongfully claiming that the file had been modified externally when the user wanted to save the file once more, requiring a reload of the file losing all modifications made since saving the first time.
  • mkvmerge: DTS handling: some source files provide timestamps for audio tracks only once every n audio frames. In such situations mkvmerge was buffering too much data resulting in a single gap in the timestamps of one frame duration after frame number n - 1 (the second audio timestamp read from the source file was used one output frame too early). Fixes #2071.
  • mkvinfo: fixed a null pointer dereference if an EbmlBinary element’s data pointer is a null pointer. Fixes #2072.

Build system changes

  • configure: added option --disable-update-check. If given, the code checking online for available updates will be disabled. The update check is enabled and included in the GUI by default.
  • libEBML v1.3.5 is now required.

Other changes

  • mkvmerge: the option --colour-matrix has been renamed to --colour-matrix-coefficients in order to match the specification more closely. The old option name will continue to be recognized as well.


Version 16.0.0 “Protest” 2017-09-30

New features and enhancements

  • mkvmerge: MP4 reader: added support for Vorbis. Implements #2093.

Bug fixes

  • configure: the checks for libEBML and libMatroska have been fixed to require libEBML 1.3.5 and libMatroska 1.4.7 as intended.

  • mkvmerge: AAC reader: mkvmerge will now emit an error message for AAC files whose header fields imply a sampling frequency or number of channels of 0. See #2107.

  • mkvmerge: AVC/h.264 ES parser: fixed the calculation of reference information for P and B frames. This also fixes some P frames being marked as B frames and vice versa.

  • mkvmerge: AVC/h.264 ES parser: only non-key frames that have the NALU header field nal_ref_idc set to 0 will be marked as “discardable” in SimpleBlock elements. Other half of the fix for #2047.

  • mkvmerge: HEVC/h.265: the generation of the HEVCC structure stored in CodecPrivate was wrong in two places: 1. the position of the number of sub-layers was swapped with reserved bits and 2. the VPS/SPS/PPS/SEI lists did not start with a reserved 1 bit.

  • mkvmerge: output: the doc type version will be set at least to 2 if certain elements are written (CodecState, CueCodecState, FlagInterlaced).

  • mkvmerge: output: the track header attributes MinCache and MaxCache will not be written anymore. Fixes #2079.

  • mkvmerge: Matroska reader: the “key” and “discardable” flags of SimpleBlock elements will be kept as they are. Partial fix for #2047.

  • mkvmerge: Matroska reader: if present in the file, the “white colour coordinate x” track header attribute was written to both “white colour coordinate x” and “white colour coordinate y” in the output file.

  • mkvmerge: Opus output: mkvmerge will now put all frames with discard padding into their own block group. Fixes #2100.

  • MKVToolNix GUI: header editor: removed the check for external modification when saving the file. Fixes #2097.

  • MKVToolNix GUI: job queue: fixed calculation of total progress when automatic removal of completed is enabled. Fixes #2105.

Build system changes

  • libEBML v1.3.5 and libMatroska v1.4.8 are now required. In fact v15.0.0 already requires libEBML v1.3.5 and libMatroska v1.4.7 but did not include proper version checks for them (nor was there a entry for the new libMatroska requirement). New is the requirement for libMatroska v1.4.8 due to it fixing writing block groups for tracks with the track number 128 (see #2103).


Version 18.0.0 “Apricity” 2017-11-18

New features and enhancements

  • build system: when building with clang v3.8.0 or newer, configure will no longer restrict optimization flags to -O1 and use -O3 again (older versions of clang suffered from excessive memory usage with higher optimization levels).
  • build system: when building with mingw 7.2.0 or newer, configure will no longer restrict optimization flags to -O2 and use -O3 again (older versions of mingw suffered from bugs such as segmentation faults with higher optimization levels).
  • build system: stack protection is enabled when building with clang 3.5.0 or newer on all platforms.
  • mkvmerge: AVC & HEVC ES parsers: performance improvements by copying much less memory around.
  • mkvmerge: tags: reintroduced a workaround for non-compliant files with tags that do not contain the mandatory SimpleTag element. This workaround was removed during code refactoring in release v15.0.0.
  • GUI: multiplexer: the “AAC is SBR/HE-AAC/AAC+” checkbox in the “audio properties” section will be disabled if the functionality is not implemented for the selected track’s codec & container.
  • GUI: multiplexer: the “reduce to core” checkbox in the “audio properties” section will be disabled if the functionality is not implemented for the selected track’s codec. See #2134.

Bug fixes

  • mkvmerge: AAC ADTS parser: fixed interpretation of the channel_configuration header element for ADTS files that do not contain a program configuration element: value 7 means 7.1 channels. Fixes #2151.
  • mkvmerge: Matroska identification: the date_local and date_utc attributes will only be output if the identified Matroska file actually contains the “date” header field.
  • mkvmerge: WebVTT: mkvmerge did not recognize timestamp lines if the hours components were absent. Fixes #2139.
  • mkvpropedit, GUI’s header editor: the date header field won’t be added automatically anymore whenever the segment info section is edited and the date element is either deleted or not present in the first place. Fixes #2143.


Version 21.0.0 “Tardigrades Will Inherit The Earth” 2018-02-24

New features and enhancements

  • mkvmerge: track statistics tags: the TagDefault element will not be written anymore as it was always set to the default value 1 anyway. Implements #2202.
  • mkvmerge, MKVToolNix GUI: JSON files can now contain C+±style line comments outside of strings (e.g. something like this: // this is ignored). Such comments, even though not part of the official JSON specifications, are now ignored when reading JSON files.
  • MKVToolNix GUI: chapter editor: opening a Matroska file without chapters in it will now open the file in an empty chapter editor instead of showing an error message. Implements #2218.
  • MKVToolNix GUI: an “info” tool has been added, replacing the functionality of mkvinfo’s GUI. The functionality is not on par yet but will be for release v22. Implements most of the functionality of #2104.

Bug fixes

  • build system: configure was treating --disable-ubsan and --disable-addrsan the same as --enable-ubsan and --enable-addrsan. Fixes #2199.
  • build system: an error message is output if a command to execute is not found instead of silently failing.
  • build system: in addition to looking for the gettext C function and library, configure now also verifies the presence of the msgfmt program instead of simply relying on it.
  • mkvmerge: appending files with additional parts at the same time was broken if more than one additional part was appended (e.g. when appending files from DVDs with something like '(' VTS_01_1.VOB VTS_01_2.VOB ')' + '(' VTS_02_1.VOB VTS_02_2.VOB ')'). In such a situation the content from files VTS_02_1.VOB and VTS_02_2.VOB where laid out in parallel to the content from the earlier files.
  • mkvmerge: FLV reader: a single invalid AAC frame was written for AAC audio tracks with codec initialization data longer than five bytes.
  • mkvmerge: FLV reader: timestamps will be normalized down to 0. Fixes #2220.
  • mkvmerge: MP4 reader: if an AAC track doesn’t contain an AAC-specific decoder configuration in the ESDS portion, then a default decoder configuration will be generated based on the track’s header data instead of skipping the track. Fixes #2221.
  • mkvmerge: MP4 reader: fixed reading HEVC/h.265 video tracks if they’re stored as Annex B byte streams inside MP4. Fixes #2215.
  • mkvmerge: Ogg Opus reader: mkvmerge will now emit a warning instead of aborting when it encounters an Ogg Opus page with no data in the packet. Fixes #2217.
  • mkvmerge, mkvextract: Matroska parser: fixed a segmentation fault that occurred whenever the first level 1 element after resyncing after an error in the file structure isn’t a cluster. Fixes #2211.
  • mkvmerge, MKVToolNix GUI multiplexer & header editor: fixed a crash during file type detection for attachments if MKVToolNix is installed in a path with non-ASCII characters (e.g. German Umlauts). Fixes #2212.
  • mkvinfo: the --hex-positions parameter did nothing in summary mode.
  • mkvinfo: Windows: line endings will be written as \r\n (carriage return & line feed) again instead of just \n (line feed).
  • mkvpropedit: adding track statistics tags: for tracks with content encoding (compression) mkvpropedit is now accounting the uncompressed number of bytes, not the encoded (compressed) number of bytes. Fixes #2200.
  • MKVToolNix GUI: multiplexer: the subtitle character set can now be set for appended subtitle files, too. Fixes #2214.
  • MKVToolNix GUI: multiplexer: when appending, all tracks appended to disabled tracks will start out disabled, too.

Build system changes

  • mkvinfo: the GUI portion has been removed. mkvinfo is now a pure command-line program again.


Version 22.0.0 “At The End Of The World” 2018-04-01

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. Implements #1981.
  • 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. Implements #2243.
  • 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). Implements #1808.
  • 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. Implements the rest of #2104.
  • 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. Implements #2231.

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). Part of the fix for #2240.
  • mkvmerge: the ‘document type version’ header field is now set to 4 correctly if any of the version 4 Matroska elements is written. Part of the fix for #2240.
  • 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. Part of the fix for #2240.
  • mkvpropedit, MKVToolNix GUI header editor: mandatory elements can now be deleted if there’s a default value for them in the specifications. Fixes #2241.
  • source code: fixed a compilation error on FreeBSD with clang++ 5.0. Fixes #2255.

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).


Version 24.0.0 “Beyond The Pale” 2018-06-10

New features and enhancements

  • mkvmerge: MP4 reader: improved the detection of edit lists consisting of two identical entries, each spanning the file’s duration as given in the movie header atom. The second entry is ignored in such cases. See #2306.
  • mkvmerge: JSON identification: the “display unit” video track property is now reported as display_unit. The JSON schema has been bumped to v11 for this change.
  • mkvmerge, mkvextract: AVC/h.264: empty NALUs will now be removed.
  • mkvextract: VobSub extraction: empty SPU packets will now be dropped during extraction as other tools such as MP4Box cannot handle them correctly. Implements #2293.

Bug fixes

  • mkvmerge: E-AC-3 parser: fixed determining the number of channels for streams that contain an AC-3 core with dependent E-AC-3 frames. Fixes #2283.
  • mkvmerge: Matroska reader: fixed mkvmerge buffering the whole file if a video track is multiplexed that consists of only one or a few frames. Fixes #2304.
  • mkvmerge: the “display unit” video track property will now be kept if it is set in the source file. Fixes #2317.
  • MKVToolNix GUI: multiplexer: when scanning playlists, all playlists were offered for selection regardless of the value of the “minimum playlist duration” setting. Fixes #2299.
  • MKVToolNix GUI: multiplexer: deriving track languages from file names: the regular sub-expressions for ISO 639-1 codes could match on empty strings, too, causing matches in wrong places and hence no language being recognized in certain situations. Fixes #2298.
  • MKVToolNix GUI: header editor: fixed a crash when saving the file fails (e.g. because it isn’t writable). Fixes #2319.
  • MKVToolNix GUI: header editor: the editor was wrongfully claiming that mandatory elements with default values cannot be removed in the “status” text. Fixes #2320.
  • MKVToolNix GUI: preferences: on macOS & Linux the setting “enable copying tracks by their type” wasn’t restored on program start. Fixes #2297.

Other changes

  • Niels Lohmann’s JSON library: the bundled version has been updated from v1.1.0 (git revision 54d3cab) to v3.1.1 (git revision g183390c1).
  • pugixml library: the bundled version has been updated from v1.8 to v1.9 (git revision e584ea3).


Version 25.0.0 “Prog Noir” 2018-07-12

New features and enhancements

  • mkvmerge: SRT/ASS/SSA text subtitles: for files for which no encoding has been specified, mkvmerge will try UTF-8 first before falling back to the system’s default encoding. Part of the implementation of #2246.
  • mkvmerge: SRT/ASS/SSA/WebVTT text subtitles: a warning is now emitted if invalid 8-bit characters are encountered outside valid multi-byte UTF-8 sequences. Part of the implementation of #2246.
  • mkvmerge: Matroska & MPEG transport stream readers: the encoding of text subtitles read from Matroska files can now be changed with the --sub-charset parameter.
  • Linux: starting with release 25 an AppImage will be provided which should run on any Linux distribution released around the time of CentOS 7/Ubuntu 14.04 or later.
  • macOS: translations: updated the script to build libiconv and a complete gettext. Together with an additional fix to how translation files are located, MKVToolNix can now use all interface languages on macOS, too. Fixes #2110, #2307, #2323.

Bug fixes

  • mkvmerge: AVC/h.264: fixed file identification failing for certain elementary streams due to internal buffers not being cleared properly. Fixes #2325.
  • mkvmerge: HEVC/h.265: fixed file identification failing for certain elementary streams due to internal buffers not being cleared properly. This is the HEVC analog to what was fixed for AVC in #2325.
  • mkvmerge: MLP code: fixed various issues preventing MLP from being parsed correctly. Fixes #2326.
  • mkvmerge: TrueHD/MLP packetizer; dialog volume normalization removal isn’t attempted if the track is an MLP track as the operation is only supported for TrueHD, not MLP.
  • mkvmerge: MPEG TS reader: when reading MPLS mkvmerge will now compare the MPLS’s start and end timestamps against the transport stream’s PTS instead of its DTS. Otherwise the first key frame of a video track might be dropped if it isn’t the first in presentation order. Fixes #2321.
  • mkvmerge: JSON identification: mkvmerge will ensure that all strings passed to the JSON output modules are valid UTF-8 encoded strings by replacing invalid bytes with placeholder characters. This avoids the JSON library throwing an exception and mkvmerge aborting on such data. Fixes #2327.
  • mkvmerge: audio packetizers: mkvmerge will now keep discard padding values if they’re present for packets read from Matroska files. Fixes #2296.
  • mkvmerge: Ogg Opus reader: packet timestamps aren’t calculated by summing up the duration of all packets starting with timestamp 0 anymore. Instead the algorithm is based on the Ogg page’s granule position and which packet number is currently timestamped (special handling for the first and last packets in the stream).
  • This fixes the first timestamp if the first Ogg packet’s granule position is larger than the number of samples in the first packet (= if the first sample’s timestamp is bigger than 0). mkvmerge will keep those offsets now and inserts “discard padding” only where it’s actually needed. * It also improves handling of invalid files where the first Ogg packet’s granule position is smaller than the number of samples in the first packet (= the first sample’s timestamp is smaller than 0). mkvmerge will now shift all timestamps up to 0 in such a case instead of inserting “discard padding” elements all over the place. * mkvmerge will no longer insert “discard padding” elements if the difference between a) the calculated number of samples in the packet according to the granule position and b) the actual number of samples as calculated from the bitstream is one sample or less and if the packet isn’t the last one in the stream. This circumvents certain rounding errors. * The timestamp of the first packet after a gap in the middle of the stream is now calculated based on the Ogg page the packet belongs to, and not based on the timestamps before the gap.
    Fixes #2280.
  • mkvmerge: complete rewrite of the progress handling. It’s now based upon the total size of all source files and the current position within them instead of the number of frames/blocks to be processed. This simplifies calculation when appending files and fixes rare cases of when progress report was obvious wrong (e.g. stuck at 0% right until the end). Fixes #2150 and #2330.
  • MKVToolNix GUI: header editor: non-mandatory elements couldn’t be removed anymore due to a regression while fixing #2320. They can now be removed again. Fixes #2322.


Version 27.0.0 “Metropolis” 2018-09-26

New features and enhancements

  • mkvmerge: chapters: the timestamps of chapters read from containers or from chapter files can be adjusted (multiplication and addition) with the new --chapter-sync option or using the special track ID -2 for the existing --sync option. Part of the implementation of #2358.
  • MKVToolNix GUI: multiplexer: adjusted & added controls for mkvmerge’s new feature of being able to adjust chapter timestamps. Part of the implementation of #2358.
  • MKVToolNix GUI: multiplexer: the GUI can now ask for confirmation when the user is about to create a file that won’t contain audio tracks. It does this by default if at least one source file contains an audio track. Implements #2380.

Bug fixes

  • mkvmerge: AC-3: dialog normalization gain removal was corrupting E-AC-3 frames irreversibly by writing checksums in places where they didn’t belong. Additionally only the first E-AC-3 frame in a Matroska was processed but not additional dependent frames in the same block. Fixes #2386.
  • MKVToolNix GUI: fixed a leak of Windows font resources leading to a general slowdown and subsequent crash. Fixes #2372.


Version 30.1.0 “Forever And More” 2019-01-05

Bug fixes

  • build system: fixed building on non-UTF-8 locales. Fixes #2474.
  • MKVToolNix GUI: multiplexer: implemented a workaround for drag & drop not working on macOS with Qt 5.12 due to a bug in Qt 5.12. Fixes #2472.
  • MKVToolNix GUI: chapter editor: when opening a Matroska/WebM file that doesn’t contain chapters and later saving chapters back to them, the editor was truncating the file down to a couple of KB in size. This was a regression introduced with the implementation of #2439 in v30.0.0 Fixes #2476.


Version 31.0.0 “Dolores In A Shoestand” 2019-02-09

New features and enhancements

  • all programs: added a new option --abort-on-warnings that will cause the program to abort after it has emitted the first warning, similar to how it aborts after the first error. Implements #2493.
  • mkvmerge, mkvextract: when closing files that were opened for writing, cached data will not be flushed to storage automatically anymore. This reverts the workaround implemented for #2469. A new option was added to both programs (--flush-on-close) that re-enables flushing for people who are affected by data loss such as described in #2469.
    The reason is that automatic flushing causes long delays in processing queues when the output by mkvmerge/mkvextract isn’t the final product but just an intermediate result to be processed further.
    Implements #2480.
  • MKVToolNix GUI: multiplexer: the dialog previewing different character sets for text subtitles will now keep the position of the displayed text when switching between character sets. Implements #2489.

Bug fixes

  • mkvmerge: AVI reader: using DV type 1 AVIs will now result in an unsupported file type being reported (as the underlying AVI library doesn’t support them) instead of crashing mkvmerge. Fixes #2491.
  • mkvmerge: HEVC: the height of interlaced streams will now be set correctly to the height of the full frame instead of the height of a single interlaced field. Fixes #2446.
  • mkvmerge: MP4 reader: edit lists consisting solely of elements that mkvmerge doesn’t support (such as dwells) are simply ignored. Before no data was read for such tracks at all. Fixes #2487.
  • mkvmerge: text subtitles: entries with an explicit duration of 0ms will now be handled correctly: the 0ms duration will be stored in Matroska instead of the difference between the current and the following entry. Fixes #2490.
  • MKVToolNix GUI: multiplexer, chapter editor: fixed drag & drop handling with Qt 5.12.0 and newer. Fixes #2472.
  • MKVToolNix GUI: multiplexer: the GUI did not clean up temporary files created when running mkvmerge. Fixes #2499.

Build system changes

  • Qt 5.4.0 or newer has required (up from 5.3.0) since version 30.0.0; I just forgot to include this entry.


Version 33.0.0 “A Little Bit of Madness” 2019-04-12

Bug fixes

  • mkvinfo: when using the --size option, mkvinfo will now report the correctly if an element has an unknown size. Part of the fix of #2530.
  • MKVToolNix GUI: info tool: clusters with an unknown size will now be read and displayed correctly. Part of the fix of #2530.
  • MKVToolNix GUI: multiplexer: Windows: trying to open Blu-ray index or playlist files failed when the path to the files contained symbolic links (e.g. when mounting a drive in a sub-folder via Windows’ disk management utility). Fixes #2522.
  • MKVToolNix GUI: multiplexer: if a destination file names ends with a number in parenthesis (e.g. a year such as “(2017)”), that number will not be stripped anymore during the process of ensuring the destination file name is unique. Only those suffixes added automatically in prior attempts to make the file name unique will be removed. Fixes #2521.
  • MKVToolNix GUI: multiplexer: Windows: the GUI will let the user change the drive letter part of the destination file name freely again and only verify its validity right before starting to mux/adding to the job queue. Before it tried to force that into something valid, often resulting in unintentional paths (such as “C:\users\…\DC\files\…”). Fixes #2527.


Version 33.1.0 “Primrose” 2019-04-15

Bug fixes

  • MKVToolNix GUI: multiplexer: Windows: using UNC paths (e.g. \serverVideos) when the option “automatically set the destination file name” was set in the preferences, the GUI would create a destination file name with forward slashes (e.g. //server/Videos/outputfile.mkv), a syntax not supported by mkvmerge. Fixes #2533 & #2534.
  • build system: the programs were accidentally built without stack protection (-fstack-protector-strong) on recent versions of gcc and clang.