[Matroska-users] MKVToolNix v20.0.0 released

Moritz Bunkus moritz at bunkus.org
Mon Jan 15 20:20:53 CET 2018

Well, hello everyone!

The holidays are always a nice time for coding as the world seems to
turn just a tad slower than usual and people are that tiny bit more
relaxed. I took the opportunity to work on my backlog and fix quite a
number of bugs in mkvmerge. I've also removed those options and
features that I had deprecated a year ago.

Another huge change was the near complete rewrite of mkvinfo's
internals. The goal is to include its GUI into MKVToolNix GUI in the
next release. It won't be a 1:1 copy; instead, the new GUI will have
more features. A result is that the output generated by the
command-line utility has changed in several ways. See the
corresponding NEWS entry below for more details.

An important change for package maintainers is the new requirement for
the "cmark" library. Fedora/CentOS/openSUSE already contain the
necessary package ("cmark-devel"), whereas Debian/Ubuntu don't just
yet (there's the "cmark" package, but that only contains the binary,
whereas MKVToolNix needs the library & header files).

Here are the usual links:

…to the source code: https://mkvtoolnix.download/source.html
…to the binaries: https://mkvtoolnix.download/downloads.html

The Windows and macOS binaries are available already. The Linux
binaries are still being built and will be available of the course of
the next couple of hours.

Here are the NEWS since the previous release:

# Version 20.0.0 "I Am The Sun" 2018-01-15

## Important notes

* Feature removal: several deprecated features have been removed:

  * mkvmerge: the deprecated options `--identify-verbose` (and its counterpart
    `-I`), `--identify-for-gui`, `--identify-for-mmg` and
    `--identification-format verbose-text`
  * all command line tools: support for the deprecated, old, proprietary format
    used for option files
  * all command line tools: support for passing command line options via the
    deprecated environment variables `MKVTOOLNIX_OPTIONS`, `MKVEXTRACT_OPTIONS`,

* mkvinfo: most of its code was re-written in order to lay the groundwork for
  including its functionality in MKVToolNix GUI but with more features than
  the existing mkvinfo GUI. The result is that a lot of its output has been
  changed slightly while keeping the basic layout. Changes include but aren't
  limited to:

  * Several element names are a bit clearer (e.g. `Maximum cache` instead of
  * All timestamps and durations are now output as nanoseconds in formatted
    form (e.g. `01:23:45.67890123`). All additional formats (e.g. floating
    point numbers output in seconds or milliseconds) were removed.
  * Element names for chapters and tags are now translated if a translation is
  * Elements located in wrong positions within the Matroska document are
    handled better.

  While mkvinfo's output is mostly kept very stable, it is not designed to be
  parsed by other utilities. Even though I've tried hard to cram all changes
  and cleanups into this version, additional changes may be made in the next
  couple of releases depending on user feedback and bug reports.

## New features and enhancements

* mkvmerge: AVC/h.264 packetizer (framed): access unit delimiter NALUs will
  now be removed. Implements #2173.

## Bug fixes

* mkvmerge: AVC/h.264 parser: when fixing the bitstream timing information
  mkvmerge will now use exact representations of the desired field duration if
  possible. For example, when indicating 50 fields/second `num_units_in_tick`
  is set to 1 and `time_scale` to 50 instead of 5368709 and 268435456. Part of
  the fix for #1673.
* mkvmerge: AVC/h.264 parser: mkvmerge no longer assumes that encountering
  sequence parameter set or picture parameter set NALUs signal the start of a
  new frame. Fixes #2179.
* mkvmerge: AVC/h.264 packetizer (framed): when mkvmerge is told to fix the
  bitstream timing information, it will now update all SPS NALUs, not just the
  ones in the AVCC. Part of the fix for #1673.
* mkvmerge: MPEG TS reader: TS packet payloads will only be treated as PES
  packets if the payload actually starts with a PES start code. The prior
  behavior led to wrong timestamps and potentially broken frame data. Fixes
* mkvmerge: MPEG TS reader: mkvmerge will now drop incomplete PES packets as
  soon as an error is detected in the transport stream instead of passing the
  incomplete frame to the packetizer. An error is assumed either if the
  `transport_error_indicator` flag is set or if the value of the
  `continuity_counter` header field doesn't match the expected value. Fixes
* mkvmerge: Opus: when re-muxing Opus from Matroska mkvmerge will now write
  "block duration" elements for all block groups where a "discard padding" is
  set, too. Fixes #2188.
* mkvmerge: SRT reader: mkvmerge can now handle SRT files with timestamps
  without decimal places (e.g. `00:01:15` instead of `00:01:15.000`).
* mkvmerge: read buffer I/O class: the class could get out of sync regarding
  the file position of the underlying file I/O class causing wrong data to be
  returned on subsequent read operations. One result was that trying to
  identifying MPLS files that refer to very short M2TS files caused mkvmerge
  to segfault.
* mkvmerge: multiplexer core: if there's a gap in audio timestamps, a new
  block group/lace will be started for the first frame after each gap. Before
  the fix the frame after the gap was often stored in the previous block group
  causing the gap to be in the wrong place: at the end of that block
  group. Fixes #1700.
* mkvextract: AVC/h.264: if two consecutive IDR frames with the same
  `idr_pic_id` parameter and no access unit delimiters are found between them,
  mkvextract will insert an access unit delimiter in order to signal the start
  of a new access unit. Fixes #1704.
* MKVToolNix GUI: update check dialog: Markdown links will now be converted to
  clickable links. Fixes #2176.
* build system: fixed a race condition when creating new directories if `rake`
  is run with `-jN` in newer versions of Ruby/`rake`. Fixes #2194.

## Build system changes

* [cmark](https://github.com/commonmark/cmark), the CommonMark parsing and
  rendering library in C, is now required when building the GUIs.

Have fun :)


More information about the Matroska-users mailing list