MKVToolNix v14.0.0 released

I’m releasing MKVToolNix v14.0.0. It strikes a nice balance between bug fixes and new features/enhancements.

Changes for package maintainers: a new translation of the programs to Romanian (ro.po) has been added. There are two other minor changes you should be aware of. Please see the NEWS section “Build system changes” below for details.

Deprecation warning

This is a reminder that certain features having been deprecated since v9.7.0. They’re scheduled to be removed in the first release of 2018. These features are:

  • mkvmerge: the options “–identify-verbose”, “–identify-for-gui”, “–identify-for-mmg” and “–identification-format verbose” (use “–identification-format json –identify” or its short form “-J” instead)
  • all command line tools: the old, proprietary format used for option files (use JSON option files instead)

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 are the NEWS since the previous release:

New features and enhancements

  • mkvmerge: AAC: implemented support for AAC with 960 samples per frame. Implements #2031.
  • mkvmerge: identification: if the encoding/character set of a text subtitle track is known (e.g. because a byte order mark is present in the file), then it will be output during identification as the encoding property. Implements mkvmerge’s part of #2053.
  • mkvmerge: WAV reader: added support for Wave64 files. Implements #2042.
  • mkvmerge, mkvpropedit, MKVToolNix GUI (chapter editor): added support for chapters in WebM files that is spec-compliant by removing all tag elements not supported by the WebM spec. Implements #2002.
  • mkvpropedit: added support for tags in WebM files that is spec-compliant by removing all tag elements not supported by the WebM spec.
  • MKVToolNix GUI: multiplexer: if the encoding/character set of a subtitle track cannot be changed, the GUI will deactivate the "subtitle character set" drop-down box and ignore changes to it when multiple tracks are selected. Additionally, if the track’s encoding is known and cannot be changed (e.g. due to a byte order mark in the file), that encoding will be selected in the drop-down box automatically. Both changes signal to the user that she doesn’t have to take care of the encoding herself. Implements the GUI’s part of #2053.
  • MKVToolNix GUI: chapter editor: added a function to the "additional modifications" dialog for calculating and setting the end timestamps. Implements #1887.
  • MKVToolNix GUI: changed the shortcuts for switching between the various tools from Alt+number (e.g. Alt+1 for the multiplexer tool) to Ctrl+Alt+number in order to avoid clashing with Windows’ input method for arbitrary characters (pressing and holding Alt and typing the codepoint on the number pad). Implements #2034.
  • MKVToolNix GUI: added a "Window" menu and entries with shortcuts for selecting the next (Ctrl+F6) respectively previous tab (Ctrl+Shift+F6) in the current tool. Implements #1972, #2032.
  • MKVToolNix GUI: on Windows the GUI will now determine the default font to use by querying Windows for the default UI/message box font instead of using the hardcoded Segoe UI. This might fix issues such as #2003 (unverified).
  • translations: added a Romanian translation of the programs by Daniel (see AUTHORS).

Bug fixes

  • mkvmerge: AVC/h.264 parser: fixed wrong frame order & timestamp calculation in certain situations when SPS (sequence parameter sets) or PPS (picture parameter sets) change mid-stream. Fixes #2028.
  • mkvmerge: HEVC/h.265 parser: fixed wrong frame order & timestamp calculation in certain situations when SPS (sequence parameter sets) or PPS (picture parameter sets) change mid-stream. This is the HEVC/h.265 equivalent of #2028.
  • mkvmerge: MPEG-1/-2 video: the "remove stuffing bytes" feature introduced in v5.8.0 (feature request #734) was broken. In a lot of situations it did not detect the end of a slice correctly and removed 0 bytes that were actually part of the slice structure. Often there were no visual problems as decoders were able to ignore such errors, but in other cases there are visual artifacts upon decoding. As detecting the slice end properly requires parsing the whole slice structure, this feature has been removed again. Fixes #2045.
  • mkvmerge: MPEG PS reader: fixed mkvmerge trying to handle an "end" code the same way as a "program stream map" code.
  • mkvmerge: MPEG TS reader: mkvmerge won’t emit warnings if the system’s iconv library doesn’t support the ISO 6937 character set. Fixes #2023.
  • mkvmerge: when appending fails the error message details (e.g. "the number of channels differs: 1 and 2") were often not output. Fixes #2046.
  • MKVToolNix GUI: multiplex tool: implemented a workaround for a crash that could occur during drag & drop if at least one of the columns is hidden. Fixes #2009.
  • MKVToolNix GUI: multiplex tool: appended tracks can no longer be enabled (selected for multiplexing) if the track they’re going to be appended to is not enabled. Fixes #2039.
  • MKVToolNix GUI: multiplex tool: if the GUI is set to ensure unique output file names, it will now verify that right before starting to multiplex/adding the job to the queue, too. Fixes #2052.
  • MKVToolNix GUI: fixed the total progress reverting to 0% instead of staying at 100% when all jobs have finished. This was introduced by the attempt at fixing the computation of the value of total progress bar for multiple jobs running. Fixes #2005.
  • configure: fixed DocBook detection if /bin/sh is dash. Patch by Steve Dibb. Fixes #2054.

Build system changes

  • Boost: the minimum required version has been bumped to 1.49.0. Earlier releases fail to build on my current systems and will therefore not be supported anymore.
  • configure: when looking for the "nlohnmann JSON" include files configure will now try the path "nlohmann/json.hpp" first, "json.hpp" second (only "json.hpp" was tried before). If neither is found, the copy included in the MKVToolNix sources will be used. Fixes #2048.

Have fun :)

MKVToolNix v13.0.0 released

Here’s v13.0.0 of MKVToolNix. It contains a few small enhancements and a handful of bug fixes. Nothing major this time around, though I still recommend everyone to update.

There have been no additional changes since v12.0.0 that package maintainers should be aware of.

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

Have fun :)

MKVToolNix v12.0.0 released

Today I’ve released v12.0.0 of MKVToolNix. Not too many changes in this one, but at least one rather important bug fix in the HEVC/h.265 code that can result in invalid files. I therefore recommend everyone to update.

Windows users should note that starting with v11.0.0 the GUI requires Microsoft’s “Media Foundation” framework to be installed. This is the case out of the box on the consumer versions of Windows other than the N and KN variants of Windows 10. You’ll have to download and install it separate on N and KN. On server variants you can install the framework via the server administration console. See this FAQ entry for more details.

There have been no additional changes since v11.0.0 that package maintainers should be aware of.

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

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

Have fun :)

MKVToolNix v11.0.0 released

Here’s release v11.0.0 of MKVToolNix. There have been several important bug fixes to the HEVC/h.265 and AVC/h.264 parsers. Among the fixed bugs are some that will silently produce invalid files. I therefore recommend everyone to update.

This release includes a couple of smaller enhancements to the GUI as well. Noteworthy is the implementation of features that have been requested several in the past: playing a sound or shutting down the computer after the current job’s been completed. The implementation is very flexible and not limited to those two actions, though.

There have been several changes the package maintainers should be aware of, see the section “build system changes” below.

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: FLAC reader: added support for handling embedded pictures as attachments. Implements #1942.
  • mkvmerge: MP4 reader: merged pull request #1804 adding support for parsing the "COLR" atom and including its values as track headers.
  • MKVToolNix GUI: watch jobs: the user can now have the GUI execute an action once as soon as the current job or the whole queue finishes. The actions are the same ones that can be configured to be run automatically after job or queue completion.
  • MKVToolNix GUI: implemented several built-in actions that can be executed either on special events or once via the "watch jobs" tool. These are: playing an audio file (implemented for all operating systems); hibernating, sleeping and shutting down the computer (only implemented for Windows and for Linux systems using systemd).
  • MKVToolNix GUI: multiplex tool: added a new option for what to do after starting to multiplex/adding to the job queue: "close current settings" will close the current multiplex settings without opening new ones.

Bug fixes

  • mkvmerge: AAC parser: fixed mis-detection of certain data as valid ADTS AAC headers resulting in memory allocation failures. Fixes #1941.
  • mkvmerge: AVC/h.264 parser: mkvmerge will now ignore bogus timing information in the sequence parameter sets (values indicating more than 100000 progressive frames per second). Fixes #1946.
  • mkvmerge: AVC/h.264 & HEVC/h.265 parsers: all trailing zero bytes will now be removed from NALUs. Fixes #1952.
  • mkvmerge: HEVC/h.265 parser: fixed copying the `bitstream_restriction_flag` and all dependent fields in the VUI parameters of the sequence parameter sets. Fixes #1924.
  • mkvmerge: HEVC/h.265 parser: fixed the calculation of the number of parameter set arrays in the HEVCC data structure stored in CodecPrivate. Fixes the video-related part of #1938.
  • mkvmerge: HEVC/h.265 parser: fixed writing superfluous and uninitialized bytes at the end of the HEVCC data structure stored in CodecPrivate. Another fix for the video-related part of #1938.
  • mkvmerge: HEVC/h.265 parser: fixed the assumption that the HEVCC data structure always includes arrays for all parameter set types (VPS, SPS, PPS and SEI), and that the order is always VPS → SPS → PPS → SEI. Instead now only the arrays actually present are parsed, and they can be in any order. This fixes mkvinfo’s output for Matroska files created from files such as the one from #1938.
  • mkvmerge: AVC/h.264 packetizer: when reading a framed track (e.g. from Matroska or MP4 files), specifying a default duration as fields (e.g. `50i`) would result in double the actual duration for each frame and the track’s default duration header field. Fixes #1916.
  • mkvmerge: Matroska reader: invalid track language elements are now treated as if they were set to `und` = "undetermined". See #1929 for context.
  • mkvmerge: MPEG TS reader, AAC: mkvmerge will now require five consecutive AAC headers with identical parameters before track type determination is considered valid. This avoids false positives and consequently wrong track parameters. Fixes the audio-related part of #1938.
  • mkvmerge: fixed an endless loop in certain circumstances when splitting by `parts` or `parts-frames` and the start of the file is discarded. Fixes #1944.
  • MKVToolNix GUI: multiplexer tool: the "show command line" dialog will no longer include the mkvmerge executable’s location as the first argument for the two "MKVToolNix option files" escape modes. Fixes #1949.
  • MKVToolNix GUI, header editor: empty track language elements are now treated the same as those set to invalid ISO 639-2 codes: as if they were set to `und` = "undetermined". See #1929 for context.

Build system changes

  • bug fix: configure now looks for the `strings` binary by using the `AC_CHECK_TOOL()` autoconf macro. That way it will be found in multiarch setups, too. Fixes #1923.
  • bug fix: the environment variable USER_CXXFLAGS was accidentally removed from the compiler flags in release 9.8.0. It’s been re-added. Fixes #1925.
  • The `.desktop` files have been renamed to `org.bunkus.mkvtoolnix-gui.desktop` and `org.bunkus.mkvinfo.desktop`. This allows Wayland compositors to associate the correct icons with running applications for e.g. task switchers. Fixes #1948.
  • Qt’s multimedia component is required for compilation of the GUIs since version 11.0.0.

Have fun :)