Tag Archives: MKVToolNix

MKVToolNix v54.0.0 released

Heya,

again I’m releasing a bit early, not even four weeks after the previous one. This release, however, does pack quite a bit more of a punch than the previous ones, both in terms of enhancements and bug fixes. On top of that one of the libraries used (libEBML) has just been released fixing several heap overflow bugs, and I didn’t want to wait too long to get those fixes into a new MKVToolNix release.

There have been several changes concerning package maintainers. Please refer to the NEWS below for details.

You can download the source code or one of the binaries. The Windows and macOS binaries as well as the Linux AppImage are available already. The other Linux binaries are stil being built and will be available over the course of the next couple of hours.

Here are the NEWS since the previous release:

New features and enhancements

  • mkvmerge: added support for using ISO 639-3 language codes in IETF BF47 language tags. Part of the implementation of #3007.
  • mkvmerge: AC-3 parser: added support for byte-swapped AC-3 data. Implements
    #3022.
  • mkvmerge: Matroska reader: for audio tracks that have the bit depth track header set mkvmerge will now keep that header even for codecs that don’t require it for decoding. Implements #3009.
  • mkvmerge: MPEG transport stream reader, PCM audio tracks: mkvmerge will now re-order the channels for 5.1, 7.0 and 7.1 channel tracks from the Blu-ray layout to the WAVEFORMATEXTENSIBLE layout expected in Matroska. Patch by Tom Yan. Implements #2988.
  • mkvmerge, mkvinfo, mkvpropedit, MKVToolNix GUI: added support for the following new track header elements: "hearing impaired" flag, "visual impaired" flag, "text descriptions" flag, "original" flag, "commentary" flag. Implements #3011.
  • MKVToolNix GUI: added support for using ISO 639-3 language codes in IETF BF47 language tags. As there are several thousand of them, they’re deactivated by default and must be activated in the preferences ("GUI" → "Often used selections" → "Languages"). Part of the implementation of #3007.
  • MKVToolNix GUI: multiplexer: when adding Blu-rays the user can select multiple playlists to add simultaneously in the "select playlist to add" dialog. Implements #2961.
  • MKVToolNix GUI: multiplexer: the file name extensions "eb3" and "ec3" were added for Dolby Digital Plus & "mpl" for Dolby TrueHD in the file dialogs. Part of the implementation of #3027.
  • MKVToolNix GUI: multiplexer: when adding multiple files the dialog asking the user what to do with them has gained a new checkbox. If enabled, all files containing at least one video track will always be placed in newly created multiplex setting. Implements #2966.
  • MKVToolNix GUI: multiplexer: added a menu entry in the "Multiplexer" for adding all files that are currently in the clipboard. Implements #3006.

Bug fixes

  • all: Windows: fixed compatibility with gettext 0.21 and newer on mingw.
  • all: Windows: fixed several of the programs having problems with certain Unicode characters (primarily emojis) in file names (e.g. mkvextract wrongfully complaining about an "invalid mode" or the GUI not being able to find parts of Blu-ray file structures).
  • mkvextract: AAC: fixed wrong channel mask field in the ADTS headers for 7.1 channel layouts. Fix by Tom Yan. Fixes #2636.
  • mkvextract: h.265/HEVC extraction: if the first frame starts with the parameter sets (SPS, PPS & VPS), the ones from CodecPrivate aren’t written and the ones from the first frame are kept. Fixes #3031.
  • mkvmerge: fixed the calculation of chapter timestamps read from NTSC DVDs. Fix by Tom Yan.
  • MKVToolNix GUI: IETF BCP 47 language widget: the language combo box will now always contain the language code the user enters in the free-form field, even if it isn’t in the list of often-used languages the user configured in the preferences.
  • MKVToolNix GUI: multiplexer: when browsing for the destination file name the default directory is now chosen according to the preferences regarding how the destination file name should be formed. For example, if the policy is set to "fixed output directory" then that output directory will be the one initially set when the directory selection dialog is opened. Fixes #3021.
  • MKVToolNix GUI: multiplexer: fixed the removal of appended source files if the "delete source files" end-of-job action is enabled. Fixes #3029.
  • MKVToolNix GUI: chapter editor: when importing chapters from DVDs the IETF BCP 47 language elements will be set, too, not just the legacy language elements.

Build system changes

  • libEBML v1.4.2 and libMatroska v1.6.3 are now required. The optional, bundled copies of both libraries have been updated to those versions. This bump in requirements fixes several heap overflow bugs in libEBML.
  • MKVToolNix is now using the C++17 library feature "file system library" instead of Boost’s "file system" and "system" libraries. For the GNU Compiler Collection (gcc) libstdc++ this means v8 or newer is required; for clang’s libc++ it means v7 or newer. For macOS this means that provided disk image will only run on 10.15 "Catalina" or newer.

Have fun :)

MKVToolNix v53.0.0 released

Heydiho,

trying to keep up my usual schedule in 2021 of about four to five weeks between releases. This time it’s even a bit less than four weeks. Several bug fixes and small enhancements were made.

There have been no changes for package maintainers.

You can download the source code or one of the binaries. The Windows and macOS binaries as well as the Linux AppImage are available already. The other Linux binaries are stil being built and will be available over the course of the next couple of hours.

Here are the NEWS since the previous release:

New features and enhancements

  • mkvmerge: AVI reader: added support for reading the video aspect ratio from the video properties header (vprp chunk) if present and setting the display dimensions accordingly. Implements #2993.
  • mkvmerge: MP4 reader: for h.264/AVC tracks that don’t have an AVCConfigurationBox (avcC atom) in their sample description (stsd) atom or whose avcC atom contains no content mkvmerge will now re-derive the AVCConfigurationBox from the bitstream. Implements #2995.
  • mkvextract: mkvextract will now check if any of the destination file names is the same as the source file name and abort with an error if that’s the case. Implements #3001.
  • MKVToolNix GUI: when querying the user for a file name for saving things (e.g. multiplexer settings or an attachment in the header editor), the automatically suggested file name will now be based on the situation-specific file names (e.g. the destination file name for multiplexer settings or the attachment’s name when saving an attachment in the header editor) instead of the directory’s name. Implements #3012.
  • MKVToolNix GUI: multiplexer: when deriving track languages from file names the GUI will now select the right-most match instead of the left-most one. For example, "La.vie.en.rose.(fr).srt" will now be detected as French (fr) instead of English (en). Implements #3013.
  • MKVToolNix GUI: preferences: the items in the "pre-defined …" lists can now be renamed by double-clicking with the mouse or pressing the F2 key.
  • Windows installer: the bluray_dump command-line utility will be installed into the tools sub-directory. bluray_dump can read & dump certain file types used on Blu-rays: .mpls playlists, .clpi clip information databases, .bdmv index files, bdmt_….xml disc library databases and tnmt_….xml track & chapter name databases.

Bug fixes

  • mkvmerge: stretching chapter timestamps with --chapter-sync now works correctly with floating point values including fractions of floating point numbers (e.g. 12.3/45.67). The tooltips in the GUI have been adjusted accordingly. Fixes #3002.
  • mkvmerge: MPEG 1/2 video handling: the "default duration" header field was often half the value it actually should be, resulting in all video frames having an explicit block duration with the correct value. This has been fixed with a patch by Tom Yan.
  • mkvmerge: MPEG 1/2 video handling: the data stored in Codec private and Codec state doesn’t contain extensions other than sequence & sequencea display extensions anymore. Fix by Tom Yan.
  • mkvmerge: tag handling: when remuxing a Matroska file with the --no-track-tags, existing SOURCE_ID track tags are now skipped, too.
  • MKVToolNix GUI: multiplexer: the drop-down boxes with pre-defined track names now follow the order set in the preferences instead of sorting the entries alphabetically. Fixes #2999.

Have fun :)

MKVToolNix v52.0.0 released

After three months of not being motivated to spend a significant amount of time on coding outside of work, I finally found some of that motivation again. The result is release v52.0.0 of MKVToolNix. It contains a couple of enhancements to the GUI and one bug fix in libEBML that’s security-sensitive.

You can download the source code or one of the binaries. The Windows and macOS binaries as well as the Linux AppImage are available already. The other Linux binaries are stil being built and will be available over the course of the next couple of hours.

Here are the NEWS since the previous release:

New features and enhancements

  • MKVToolNix GUI: job queue: the maximum number of jobs to run concurrently can now be increased in the preferences. The default remains at 1. Implements #2984.
  • MKVToolNix GUI: the GUI will now add a context-specific default extension to file names selected for saving on platforms that don’t add one itself (e.g. GNOME). For example, when saving multiplexer settings the extension .mtxcfg will be added. Implements #2983.
  • MKVToolNix GUI: added an option to the preferences for the window to stay on top of other windows. Implements #2967.

Bug fixes

  • mkvextract: h.265/HEVC extraction: the code for skipping extraction of prefix SEI NALUs in the first frame was skipping two bytes too few, resulting in broken processing of all following bytes. Patch by Mike Chen.
  • libEBML: the optional, bundled version of libEBML was updated to v1.4.1.

Build system changes

  • libEBML v1.4.1 is now required due to a bug in libEBML that caused pointers to just-freed memory being returned to the caller under certain invalid data constellations, causing use-after-free errors in all of MKVToolNix’s programs. Fixes #2989.

Have fun :)

MKVToolNix v50.0.0 released

Hello everyhone,

another month, another MKVToolNix release. This one includes quite a high number of commits under the hood due to the prominent new feature I’ve implemented: support for the new IETF BCP 47 language elements. Finally you can express things such as “Portuguese as spoken in Brazil” or “Serbian in Cyrillic script as spoken in Serbia”.

Apart from that there are the usual enhancements & bug fixes.

Important news for package managers is that the PCRE2 library is now required (only its UTF-8 variant).

You can download the source code or one of the binaries. The Windows and macOS binaries as well as the Linux AppImage are available already. The other Linux binaries are stil being built and will be available over the course of the next couple of hours.

Here are the NEWS since the previous release:

New feature: IETF BCP 47 language tags

  • I’ve written up a nice FAQ entry about the switch to using IETF BCP 47 language tags, how they interact with legacy language elements, how the programs actually behave and how to disable their use if necessary.
  • mkvmerge: IETF BCP 47/RFC 5646 language tags: mkvmerge will now accept full BCP 47 language tags for all options taking a language. mkvmerge will always write "LanguageIETF" track header elements. If the language tag contains a valid ISO 639-2 language code it will also set the legacy "Language" track header element to the included ISO 639-2 code. Part of the implementation of #2419.
  • mkvmerge: IETF BCP 47/RFC 5646 language tags: if present the "LanguageIETF" track header element will be reported as the language_ietf property in JSON identification mode. Part of the implementation of #2419.
  • mkvmerge: IETF BCP 47/RFC 5646 language tags in chapters: mkvmerge will now write "ChapLanguageIETF" elements when creating chapter atoms, either when reading the simple chapter format or when generating chapters due to the --generate-chapters command line option. Part of the implementation of #2419.
  • mkvmerge: IETF BCP 47/RFC 5646 language tags in tags: mkvmerge will now write "TagLanguageIETF" elements when creating "simple tag" elements, either when reading tag XML files or when generating them. Part of the implementation of #2419.
  • mkvmerge: IETF BCP 47/RFC 5646 language tags: added an option --disable-language-ietf that causes mkvmerge to only write the legacy language elements.
  • mkvmerge, mkvpropedit, MKVToolNix GUI’s chapter editor: IETF BCP 47/RFC 5646 language tags in chapters: when reading XML chapter files the programs will now add "ChapLanguageIETF" elements for atoms that don’t contain them. The values are derived from existing "ChapterLanguage" elements. Part of the implementation of #2419.
  • mkvpropedit: IETF BCP 47/RFC 5646 language tags: setting/deleting the track language now acts on both the old language element as well as the "LanguageIETF" track header element. Part of the implementation of #2419.
  • mkvpropedit: IETF BCP 47/RFC 5646 language tags: added an option --disable-language-ietf that causes mkvpropedit to apply changes to the language track header property only to the legacy language track header element.
  • mkvinfo: IETF BCP 47/RFC 5646 language tags: added support for the "LanguageIETF" track header element. Part of the implementation of #2419.
  • MKVToolNix GUI: multiplexer: added full support for IETF BCP 47/RFC 5646 language tags for both track and chapter languages. Part of the implementation of #2419.
  • MKVToolNix GUI: chapter: added full support for IETF BCP 47/RFC 5646 language tags for chapter languages. Part of the implementation of #2419.
  • MKVToolNix GUI: header editor: added full support for IETF BCP 47/RFC 5646 language tags for track header languages. The header editor allows editing of the legacy language elements and the IETF BCP 47 language elements independent of each other. Part of the implementation of #2419.

Other new features and enhancements

  • mkvmerge: the chapter generation mode when-appending now also works with the splitting modes parts: & parts-frames: when using the …,+… syntax for appending other sections of the source file to the same destination file. Implements #2898.
  • MKVToolNix GUI: multiplexer: the file selection dialogs now include the extension .dtsma for DTS files. Implements #2901.
  • mkvmerge: MP4 reader: sped up parsing MP4 DASH files with a lot of segments (trun atoms) quite a bit. Part of the fix of #2900.
  • The PCRE2 regular expression library is now used instead of std::regex for big performance improvements in all places where regular expressions are used for parsing big chunks of text, e.g. in the subtitle parsers. Part of the fix of #2899.
  • all programs: Windows: all programs now support long file names on Windows 10 release 1604 if they’re turned on in the registry. Implements #2916.

Bug fixes

  • MKVToolNix GUI: preferences: under certain conditions changing the selected entry in the page tree on the left did not cause the page shown on the right to be updated. Fixes #2895.
  • mkvmerge: splitting text by a fixed string (e.g. ,) is now done by using std::string.find() instead of using a regular-expression-based text splitting function, greatly improving its performance. Part of the fix of #2899.
  • mkvmerge: mkvmerge will now read-buffer file I/O when probing text file formats which increases its speed significantly on Windows. Part of the fix of #2899.
  • mkvmerge: MP4 reader: fixed handling of tkhd atoms of version 1. Fixes #2900.

Build system changes

  • The PCRE2 library (the 8-bit variant) is now required.

Have fun!