Author Archives: mosu

MKVToolNix v51.0.0 released

Hello everyone,

I’ve just pushed out MKVToolNix v51. As expected the new IETF BCP 47 language tag functionality introduced in v50 had a couple of bugs, which I’ve fixed in v51. Apart from that I’ve also started fuzzying mkvmerge, which turned up several issues that have also been fixed. Fuzzying will continue in the future and I fully expect a lot more bugs to be unearthed by it.

Important news for package managers is that `configure` can now detect and use a system-wide installed copy of the JPCRE2 header library. If it isn’t found, the bundled version will be used (just like in v50).

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, mkvpropedit, MKVToolNix GUI: IETF BCP 47 language tags: added
    missing support for UN M.49 regions for which there are no corresponding ISO
    3166 alpha codes. This enables language tags such as es-419 = Spanish in
    Latin America and the Caribbean. Implements #2919.
  • MKVToolNix GUI: IETF BCP 47 language tags: the text in the widget displaying
    the current language & the corresponding edit button is now displayed like a
    link (depending on the theme: different color & underlined), making it
    clearer that not just the edit button can be clicked but the text, too.

Bug fixes

  • mkvmerge: AV1 parser: fixed mkvmerge crashing after uncaught exceptions due
    to certain data conditions. Found by fuzzying.
  • mkvmerge: AV1 packetizer: the duration of frames wasn’t set properly. When
    appending AV1 IVF or OBU files this meant that the last frame of the Nth
    file and the first frame of file N+1 had the same timestamp. Fixes #2937.
  • mkvmerge: DTS reader: fixed handling of buffers with an odd length when
    byte-swapped DTS is detected so that mkvmerge doesn’t abort with a failed
    assertion. Found by fuzzying.
  • mkvmerge: h.264/AVC and h.265/HEVC elementary stream readers: mkvmerge will
    no longer claim to recognize data that looks like AVC or HEVC but with
    invalid video width/height values as that lead to failed assertions in
    libEBML later. Found by fuzzying.
  • mkvmerge: h.265/HEVC parser: fixed mkvmerge aborting after uncaught
    exceptions due to certain data constellations found by fuzzying.
  • mkvmerge: IVF reader: fixed mkvmerge crashing with a "division by zero"
    error due to certain data conditions. Found by fuzzying.
  • mkvmerge: fixed mkvmerge aborting with a "division by zero" error due to the
    timestamp scaling factor being 0 after handling certain data constellations
    found by fuzzying.
  • mkvmerge: track statistics: fixed a "division by zero" error when the
    content’s shorter than 1ms. Found by fuzzying.
  • mkvmerge, mkvinfo, mkvextract, mkvpropedit: Matroska access class: fixed an
    invalid memory access under certain data conditions. Found by fuzzying.
  • MKVToolNix GIU: IETF BCP 47/RFC 5646 language tags: the GUI will no longer
    open the language dialog when clicking on a disabled language display
    widget.
  • MKVToolNix GUI: IETF BCP 47 language tags: the "variants" combo-boxes were
    not populated even when the language tag was valid and contained at a
    variant. Fixes #2923.
  • MKVToolNix GUI: IETF BCP 47 language tags: when no language is selected, at
    least one of the other components (extended subtags, region, or variants)
    has something selected and "private use" is not empty, the GUI would claim
    this to be a valid tag, which it isn’t. Fixes #2924.
  • MKVToolNix GUI: multiplexer: when the tracks/chapters/tags selection changes
    from "at least one entry selected" to "no entry selected", the input
    controls will be reset to their default state and not just disabled. Fixes
    #2927.

Build system changes

  • configure now checks for the presence of the a system-wide installed copy
    of the JPCRE2 C++ wrapper library for the PCRE2 library and uses that if
    it’s new enough (at least v10.32.1). If not, the bundled version will be
    used as a fallback. Implements #2929.

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!

MKVToolNix v49.0.0 released

Hey y’all,

this is more or less a small bugfix release of MKVToolNix. One rather important new feature is support for the new Matroska elements introduced for storing additional codec-initialization data needed for techniques such as MVC (3D video) or Dolby Vision metadata. mkvmerge cannot produce them itself yet, but it will keep the data that’s present, e.g. when reading files created by MakeMKV.

Important news for package managers is that libMatroska v1.6.1 is now required (that one was released earlier today). As usual MKVToolNix bundles that version as a fallback.

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 copying the new track header elements
    BlockAddIDName, BlockAddIDType, BlockAddIDValue and
    BlockAddIDExtraData from Matroska files if they exist. Part of the
    implementation of #2887.
  • mkvinfo: added support for the new track header elements
    BlockAdditionMapping, BlockAddIDName, BlockAddIDType, BlockAddIDValue
    and BlockAddIDExtraData. Part of the implementation of #2887.
  • MKVToolNix GUI: multiplexer: the list of recent directories can now be
    edited in the preferences → "Multiplexer" → "Destination file
    name". Implements #2861.
  • MKVToolNix GUI: preferences: the values in the various "predefined values"
    lists can now be re-ordered freely by dragging & dropping.

Bug fixes

  • mkvmerge: Matroska reader: when reading tracks (e.g. a subtitle track) from
    Matroska files with their default track flag set to yes, and when
    overwriting those via the command line to no, mkvmerge would not promote
    additional tracks of the same type from other files (e.g. another subtitle
    track from an SRT file). Fixes #2863.
  • mkvmerge: SRT reader: empty lines inside entries were doubled. Fixes #2888.
  • mkvmerge: subtitles: when calculating the rounded duration of each entry the
    error from rounding the corresponding timestamp will be taken into
    account. Fixes #2890.
  • mkvextract: SSA/ASS extraction: mkvextract is no longer inserting empty
    lines before the Dialogue: lines. Fixes #2876.
  • mkvextract: USF subtitles: start & end timestamps were too high by a factor
    of 1.000.000. Fixes #2875.
  • MKVToolNix: info tool: when saving to a text file the checkbox "Save as
    default for saving output to text files" did nothing. Fixes #2869.
  • MKVToolNix: info tool: when saving to a text file in "all elements in a
    tree-like structure" mode, the GUI always stopped at the first cluster
    regardless of the setting of the "verbosity" option.
  • MKVToolNix GUI: preferences: when tooltips were disabled the dialogs for
    adding new entries to the various "predefined values" lists were missing
    their texts.
  • Windows installer: the images are shown again. Fixes #2868.
  • configure: fixed detection of QtDBus. Fixes #2886.

Build system changes

  • libMatroska v1.6.1 is now required. The bundled version has been updated to
    that version.

Have fun!

MKVToolNix v48.0.0 released

Hey everyone,

summer’s upon us, and surely we’re all itching to stay at home some more, aren’t we? Well, despair not, at least you can update your MKVToolNix version to the latest & shiniest there ever was.

This release’s highlight is the big improvement to the handling of Blu-ray playlists (MPLS files) & corresponding MPEG transport streams (M2TS files), both bug fixes and real enhancements. See the news below for details.

Important news for package managers are the new reuquirements for libEBML/libMatroska & the main development branch having been renamed in my source code repo. Again, see the news 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: AC-3: file identification will report AC-3 tracks encoded in Dolby
    Surround EX as codec "AC-3 Dolby Surround EX". Implements #2740.
  • MKVToolNix GUI: multiplexer: on new installations the GUI will now recognize
    all known ISO 639-2 language codes in file names by default instead of only
    the top 100 of languages by native speakers.
  • MKVToolNix GUI: multiplexer: on new installations the list of "often used
    languages" will by default only contain certain agnostic ones ("multiple
    languages", "no linguistic content", "reserved for local use", "uncoded
    languages"), "English" and the default user interface language. The "list of
    spoken languages by native speaks" isn’t used anymore. Also implements #2716.
  • MKVToolNix GUI: header editor: added an option to remove all attachments to
    the tree context menu. Implements #2835.
  • MKVToolNix GUI: while the GUI is running it will remember the last page that
    was selected when the preferences dialog is closed. Upon re-opening the
    preferences that page will be selected by default. Implements #2852.

Bug fixes

  • mkvmerge: fixed a segmentation fault when exiting prematurely due to write
    errors such as the destination having run out of space. Fixes #2843.
  • mkvmerge: DTS: fixed wrong channel count for DTS tracks with XCh
    extensions. Fixes #2715.
  • mkvmerge: MPEG TS reader: fixed detecting h.264/AVC and h.265/HEVC tracks
    that consist of only a single frame. Part of the fix of #2849.
  • mkvmerge: MPEG TS reader: fixed handling of unbounded PES sizes for tracks
    that consist of only a single PES packet. Part of the fix of #2849.
  • mkvmerge: MPEG TS reader: PGS subtitle tracks are now exempt from the
    "detect bogus subtitle timestamps" heuristic which could lead to some PGS
    subtitles not being timestamped correctly. Symptoms were that they were
    shown at the wrong time or that they were shown indefinitely. Fixes #2736
    and partially fixes #2824.
  • mkvmerge: MPEG TS reader: when reading MPLS playlists the start timestamps
    of a play items were handled wrong: all the timestamps of packets read were
    compared to that start timestamp, dropping those packets whose timestamps
    were smaller than the play item’s start timestamp. The correct behavior is
    to accept all packets as soon as the first one with a timestamp equal to or
    larger than the play item’s start timestamp is encountered. This could
    result in PGS subtitle entries located right at the start of the play item
    being garbled/lost as they consist of multiple PES packets for which some
    timestamps are often slightly smaller. Part of the fix of #2824.
  • mkvmerge: MPEG TS reader: when reading MPLS playlists mkvmerge will no
    longer read the whole M2TS files they reference, processing only the packets
    lying inside the timestamp range given by the playlists’s play item’s start
    & end timestamps. Instead mkvmerge will use the index information present in
    corresponding clip information (CLPI) files in order to seek to the nearest
    file position of the play item’s start timestamp. Additionally mkvmerge will
    simply stop processing a file once the end timestamp is seen. This change
    greatly speeds up processing files from which only small portions must be
    read. Part of the fix of #2824.
  • mkvmerge: WavPack: fixed support for files created by v5 of the
    program. Checksums, DSD audio data and non-standard sampling rates are
    handled correctly. Patch by David Bryant.
  • MKVToolNix GUI: multiplexer: fixed the cursor being positioned wrong after
    entering or pasting characters that aren’t allowed in file names into the
    "destination file" control. Fixes #2855.

Build system changes

  • libEBML v1.4.0 and libMatroska v1.6.0 are now required.

Other changes

  • The source code repository’s main development branch was renamed to main.

Have fun!