Author Archives: mosu

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

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