MKVToolNix v10.0.0 released

Another month, another release of MKVToolNix: v10.0.0. It’s solely a bug fix release, and the number of fixes in this release is on the small side.

Nothing’s changed for packagers.

You can download the source code or one of the binaries. The Windows and macOS binaries have been built already and are available for download. The Linux binaries will be available later today.

Here’s the NEWS since the previous release:

New features and enhancements

  • mkvmerge: AVC/h.264 parser: mkvmerge will now drop all frames before the first key frame as they cannot be decoded properly anyway. See #1908.
  • mkvmerge: HEVC/h.265 parser: mkvmerge will now drop all frames before the first key frame as they cannot be decoded properly anyway. See #1908.
  • mkvmerge: HEVC/h.265 parser: added a workaround for invalid values for the "default display window" in the VUI parameters of sequence parameter sets. Fixes #1907.

Bug fixes

  • mkvmerge: MP4 reader: fixed track offsets being wrong in certain situations regarding the presence or absence of edit lists (‘elst’ atoms) & composition timestamps (‘ctts’ atoms). Fixes #1889.
  • mkvmerge: MP4 reader: offsets in "ctts" are now always treated as signed integers, even with version 0 atoms.
  • mkvinfo: the timestamps of SimpleBlocks with negative timestamps are now shown correctly.
  • mkvmerge: Matroska reader: fixed handling BlockGroups and SimpleBlocks with negative timestamps.
  • mkvmerge: MP3 packetizer: the MP3 packetizer will no longer drop timestamps from source containers if they go backwards. This keeps A/V in sync for files where the source was in sync even though their timestamps aren’t monotonic increasing. Fixes #1909.
  • mkvmerge: AVC/h.264 parser: mkvmerge will now drop timestamps from the source container if no frame is emitted for that timestamp. Fixes #1908.
  • mkvmerge: HEVC/h.265 parser: mkvmerge will now drop timestamps from the source container if no frame is emitted for that timestamp. Fixes the HEVC equivalent of the problem with AVC described in #1908.
  • mkvextract: SSA/ASS: fixed extraction when the "Format" line in the "[Events]" section contains less fields than the default for SSA/ASS would indicate. Fixes #1913.

Have fun :)

MKVToolNix v9.9.0 released

It’s time for v9.9.0 of MKVToolNix. This is mostly a bug fix release. Especially the MP4 input module has received a lot of love. See below for details.

Important note for packagers: pre-built man pages are no longer included. Instead they’re built during compilation requiring xsltproc, the DocBook XSL stylesheets. Additionally the system version of pugixml can now be used. See the news below for details.

You can download the source code or one of the binaries. The Windows and Mac OS binaries have been built already and are available for download. The Linux binaries will be available later today.

Here’s the NEWS since the previous release:

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-root=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.

Have fun :)

MKVToolNix v9.8.0 released

A nice new release is here, v9.8.0. Couple of enhancements, a couple of bug fixes, especially for the new caching functionality introduced in 9.7.0. I recommend upgrading.

Notes for package maintainers: important changes were made to the build process. Please see the NEWS section below for details (both the “important news” and the “build system changes” sections).

You can download the source code or one of the binaries. The Windows and Mac OS binaries have been built already and are available for download. The Linux binaries will be available later today.

Here’s the NEWS since the previous release:

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.

Have fun :)

MKVToolNix v9.7.1 released

Here’s v9.7.1, a hotfix for v9.7.0, which in turn was a more substantial release. There were a lot of enhancements to the GUI all over the place, several bug fixes in mkvmerge, a couple of enhancements there, too.

Note that this release deprecates the options (e.g. “--identify-verbose“) and features. These are scheduled to be removed early in 2018. See the first top-most entry in the ChangeLog below for details.

Notes for package maintainers: MKVToolNix now requires a compiler that supports certain features of the C++14 standard. For gcc v4.9.x or later will work, for clang v3.4 or newer is required. Additionally Qt v5.3.x is now required.

You can download the source code or one of the binaries. The Windows and Mac OS binaries have been built already and are available for download. The Linux binaries will be available later today.

Here’s the full ChangeLog since the previous release:

  • 2016-12-27 Moritz Bunkus <moritz@bunkus.org>
    • Released v9.7.1 "Pandemonium".
    • 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").
    • 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:
        • https://mkvtoolnix.download/latest-release.json.gz
        • https://mkvtoolnix.download/latest-release.xml.gz
  • 2016-12-26 Moritz Bunkus <moritz@bunkus.org>
    • 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 <jamrial@gmail.com>
    • mkvmerge: added support for skipping APE(v2) tags in TTA files.
  • 2016-12-22 Moritz Bunkus <moritz@bunkus.org>
    • 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 <moritz@bunkus.org>
    • 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 <moritz@bunkus.org>
    • build system: building the GUI components of MKVToolNix now requires Qt v5.3.0 or newer.
  • 2016-12-16 Moritz Bunkus <moritz@bunkus.org>
    • MKVToolNix GUI: header editor & job output enhancement: added menu entries for saving or closing all open tabs.
  • 2016-12-13 Moritz Bunkus <moritz@bunkus.org>
    • 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 <moritz@bunkus.org>
    • 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 <moritz@bunkus.org>
    • 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 <moritz@bunkus.org>
    • 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 <moritz@bunkus.org>
    • 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 <moritz@bunkus.org>
    • 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 <moritz@bunkus.org>
    • 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.

Have fun :)