Monthly Archives: January 2015

Migrating the MKVToolNix bug tracker to GitHub issues

I’ve migrated my previous bug tracker (a Trac installation) to GitHub’s issues. Why? Due to spam.

First things first: what does that mean for my users?

  • Due to technical reasons I had to delete my GitHub repository and create a new, private one for the migration which has been made public again afterwards under the usual name, »mkvtoolnix«. This means that all the subscriptions, stars and existing pull requests (both closed and open) have been lost. I’m sorry for this, and if you still want to receive notifications then please just re-subscribe to the repository.
  • The user information from Trac couldn’t be kept. This means that all the GitHub issues have myself as the author. The original author is still mentioned in each comment as »originally posted by …«, though.
  • Due to the point above the notifications won’t work for migrated issues (meaning that if you had a bug open on Trac then you will need to re-subscribe to the corresponding issue on GitHub in order to receive notifications). Newly created issues on GitHub will automatically have their author subscribed to them, of course.
  • You will need an account on GitHub if you want to post a bug. Overall this is a good change: it’s free, it’s easy, GitHub offers two-factor authentication (and is therefore a lot more secure than a standard Trac installation), and a lot of people already have GitHub accounts.
  • The issue numbers on GitHub should be the same as the ticket numbers in Trac.
  • Links to the old Trac installation will be forwarded to the corresponding issues on GitHub.
  • The FAQ that’s currently hosted on Trac as well might be moved to GitHub or a separate web page as well. If I decide to do that I’ll have links to the old FAQ be forwarded to the new location, too.

Here’s some background information how I came to this decision:

Over the last couple of months the amount of spam has increased significantly. Even though I required verified user accounts before anyone can open a ticket there were bots that created such accounts automatically, handled the email verification and posted spam tickets afterwards. I had to clean up this mess time and again.

I had been using a Captcha plugin for registration as a countermeasure. Unfortunately that plugin is no longer compatible with the user management plugin (and a plain Trac installation doesn’t have any user registration capabilities on its own, so you have to rely on third-party addons for such tasks).

A second countermeasure I had deployed was administrator approval. Each newly registered account had to be approved by me, and I was getting pretty good at sniffing out obvious spam accounts. However, I sometimes erred, on both sides: spammers were still getting through and posting their crap while legitimate users weren’t allowed to post and complained via private emails. This countermeasure also meant that I received around 50 emails a day about new accounts having been created.

So that’s why I don’t want to host my own bug tracker anymore.

MKVToolNix v7.5.0 released


I’ve released MKVToolNix v7.5.0. It contains a lot of new features dealing with h.265/HEVC video & AAC audio, some minor assorted enhancements and quite a number of bug fixes – especially some which prevent invalid memory access.

One important change for everyone building the packages: libEBML v1.3.1 and libMatroska v1.4.2 are now required. Both have been released today. Note that both libraries have been switched to use an autoconf/automake based build system and provide pkg-config files.

MKVToolNix’ own configure script has therefore been changed to look for the libraries via their respective pkg-config files. This means that the configure options --with-extra-includes and --with-extra-libs don’t affect the detection of libEBML/libMatroska anymore. Instead you can set the environment variable PKG_CONFIG_PATH to where the pkg-config scripts of libEBML and libMatroska are located.

You can download the source code or one of the binaries.

Here’s the full ChangeLog since the previous release:

  • 2015-01-04 Moritz Bunkus <>
    • Released v7.5.0.
    • mkvmerge: bug fix: If the target drive is full then a nicer error message is output instead of simply crashing due to an uncaught exception.
    • mkvmerge: bug fix: Fixed reading MPEG transport streams in which all PATs and/or PMTs have CRC errors. Fixes #1100.
  • 2015-01-03 Moritz Bunkus <>
    • all: bug fix: Re-wrote the whole checksum calculation code. This lead to a fix for the Adler32 checksum algorithm that was triggered under certain circumstances. Adler32 is used in mkvinfo’s output (e.g. in summary mode or if checksums are activated), in the h.265/HEVC bitstream and TrueAudio (TTA) file headers.
  • 2015-01-01 Moritz Bunkus <>
    • mkvmerge: bug fix: fixed handling of HE-AACv2 with object type »parametric stereo«.
    • mkvmerge: new feature: implemented support for MP4 DASH files. Implements #1038.
  • 2014-12-31 Moritz Bunkus <>
    • mkvmerge: new feature: implemented reading MPEG-H p2/HEVC video tracks from MP4 files. Implements #996.
  • 2014-12-30 Moritz Bunkus <>
    • mkvinfo: bug fix: track statistics: the duration (and therefore the estimated bitrate) was wrong for files in which the frame with the maximum timecode wasn’t the last frame in the file. Fixes #1092.
    • mkvmerge: new feature: implemented support for AAC in LOAS/LATM multiplex if read from MPEG transport streams or raw LOAS/LATM AAC files. Implements #877 and fixes the underlying issue in #832.
  • 2014-12-21 Moritz Bunkus <>
    • build system: libEBML and libMatroska have been changed to provide pkg-config configuration files. Therefore MKVToolNix’ build system has been switched to look for both libraries via pkg-config.
  • 2014-12-20 Moritz Bunkus <>
    • all: bug fix: several fixes have gone into libEBML and libMatroska that prevent illegal memory access (both reading from and writing to unallocated addresses). The bugs #1089 and #1096 have thus been fixed.
  • 2014-12-19 Moritz Bunkus <>
    • build system: libMatroska v1.4.2 is now required as part of a fix for #1096.
  • 2014-12-18 Moritz Bunkus <>
    • build system: libEBML v1.3.1 is now required as a part of a fix for #1089.
    • mkvinfo: bug fix: mkvinfo will abort with a proper error message if the first element found is not an EBML head element. See #1089.
    • all: enhancement: improved exception messages that can occur when reading damaged Matroska files to make it clearer for the user what’s happening. See #1089.
  • 2014-12-16 Moritz Bunkus <>
    • mkvmerge: new feature: Added support for reading h.265/HEVC video tracks from MPEG transport streams. Implements #995.
    • mkvinfo: bug fix: Timecodes output with ms resolution are now rounded to ms instead of simply cut off. Fixes #1093.

Have fun.

libEBML v1.3.1 & libMatroska v1.4.2 released

I’ve released new versions of libEBML (v1.3.1) and libMatroska (v1.4.2). Download links for the impatient:

Important news about the changes below; so please continue to read:

Both are binary-compatible to their respective previous releases and did not have their .so version bumped.

In both libraries several instances of out-of-bounds memory accesses have been fixed. libEBML will also not catch exceptions thrown by an IOCallback instance anymore.

The build system of both libraries has been switched to use autoconf, automake and libtool. Now you can (or have to) use the normal three-point procedure of »configure && make && make install«. The upside is that this should make cross-compilation easier.

In addition both libraries now come with pkg-config files. These are called »libebml« and »libmatroska« respectively (all lower-case). libMatroska’s configure script already uses pkg-config for determining libEBML’s location. Here the usual environment variables used for pkg-config are used as well (most notably PKG_CONFIG_PATH).

The upcoming release of MKVToolNix will require both of these two new versions.

Here’s libEBML’s ChangeLog since the previous release (v1.3.0):

  • 2015-01-04 Moritz Bunkus <>
    • Released v1.3.1.
    • EbmlElement::Render(): doesn’t catch exceptions anymore. Instead exceptions generated from the IOCallback class (e.g. if a write failed) are propagated to the caller.
  • 2014-12-21 Moritz Bunkus <>
    • build system: switched the build system from hand-crafted Makefiles to an autoconf/automake-based system. A pkg-config file will be installed as well; its name is »libebml«. Patch by Jan Engelhardt <>.
  • 2014-12-20 Moritz Bunkus <>
    • EbmlMaster::Read(): when reading with SCOPE_ALL_DATA only those elements that could successfully be read will be kept (e.g. defective block groups will be dropped).
  • 2014-12-19 Moritz Bunkus <>
    • EbmlMemoryStream: add a new class for safe memory access that throws exception on failures.
  • 2014-12-18 Moritz Bunkus <>
    • EbmlMaster: Fixed read() trying to calculate the end position of elements with an unknown size. This avoids endless loops and assertions in certain cases. See

Here’s libMatroska’s ChangeLog since the previous release (v1.3.0):

  • 2015-01-04 Moritz Bunkus <>
    • Released v1.4.2.
  • 2014-12-21 Moritz Bunkus <>
    • build system: switched the build system from hand-crafted Makefiles to an autoconf/automake-based system. A pkg-config file will be installed as well; its name is »libmatroska«. Based on a similar patch for libEBML by Jan Engelhardt <>.
  • 2014-12-20 Moritz Bunkus <>
    • KaxBlock::ReadData(): fixed several instances of unchecked memory access leading to invalid memory access/segmentation faults with invalid or broken data inside block groups/simple blocks.
  • 2014-12-19 Moritz Bunkus <>
    • KaxBlock::ReadInternalHead(): fixed a off-by-one buffer overflow if with EBML lacing and exactly one frame in the lace.

Have fun.