MKVToolNix v61.0.0 released

Greetings, gentle fellow humans!

Oh wow, time is moving very strangely for me during this pandemic, sometimes slowing to a crawl, sometimes just going by very quickly. It’s been four weeks since the last release already; so let’s get the August one out just in time: v61.

This release is on the smaller side. Couple of improvements to the IETF BCP 47 language tag handling, couple other things. Nothing earth shattering, though.

For package maintainers there was a small change. See the NEWS below.

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

  • all: IETF BCP 47/RFC 5646 language tags: implemented support for officially registered IANA language tag extensions.
  • mkvmerge: track selection: when using language tags for selecting which tracks to keep, mkvmerge will now use component-based language tag matching instead of comparing them verbatim. This means that only those components (language, region etc.) the user specified will be required to exist and be equal. For example, if a file contains three subtitle tracks with languages es (generic Spanish), es-MX (Spanish as spoken in Mexico) and es-ES (Spanish as spoken in Spain), the user can use --stracks es to match all three tracks or be more specific with e.g. --stracks es-MX which would only match one track. Similarly inverting the selection with e.g. --stracks !es would get rid of all three tracks, not just the one for the generic Spanish.
  • MKVToolNix GUI: multiplexer: deriving track languages from file names: the GUI can now detect full BCP 47/RFC 5646 language tags in file names. Part of the implementation of #3173.
  • MKVToolNix GUI: multiplexer: deriving track languages from file names: the default list of boundary characters now includes -. Part of the implementation of #3173.
  • MKVToolNix GUI: multiplexer: the GUI now defaults to the “lower” process priority setting for new installations in order to leave more room for other applications, especially interactive ones. Up to and including v59 the default was the “normal” process priority. v60 changed that to “lowest”, which turned out to be much slower on Windows for no real gain over “lower”. The setting will be auto-corrected by the GUI if the settings file were saved last with a version between v60.0.0.0 & v60.0.0.17 & “lowest” & it is still set to “lowest”.
  • HEVC dumper development tool: the tool has been renamed to xvc_dump and extended to be able to dump AVC/H.264 bitstreams, too. It now also detects the type of bitstream framing (ISO 14496-15 vs. ITU-T H.264/H.265 Annex B).

Bug fixes

  • all: IETF BCP 47/RFC 5646 language tags: fixed a corner case of wrongfully allowing scripts/variants not listed in any of the entries in the prefix list when the prefix list contains prefixes restricting scripts/variants and a prefix solely with the language at the same time (example: the variant ekavsk with its prefixes sr, sr-Cyrl and sr-Latn where e.g. sr-ekavsk and sr-Cyrl-ekavsk should be allowed but not sr-Bali-ekavsk).
  • mkvmerge: HEVC/H.265: the frame type of B frames was often wrongfully signalled as P frames instead, both with BlockGroup (missing second references) and SimpleBlock (“discardable” flag not set) elements.
  • mkvmerge: SSA/ASS packetizer: the frame numbers will now be re-calculated when appending SSA/ASS tracks so that frame numbers of appended tracks are always strictly higher than frame numbers of the track they’re appended to.
  • mkvmerge, MKVToolNix GUI’s chapter editor: BCP 47/RFC 5646 language tags: when BCP 47 language tags are used with a language code that isn’t part of ISO 639-2, the programs will now write a legacy language element set to und (“undetermined”) instead of not writing such an element at all or writing one with an invalid code. Fixes #3174.
  • mkvmerge, MKVToolNix GUI’s chapter editor: BCP 47/RFC 5646 language tags: the programs will ensure that the legacy and IETF language elements written will be unique within the scope of the same “chapter display” element.
  • mkvinfo, MKVToolNix GUI’s info tool: in summary mode the frame type was reported wrong for BlockGroup elements in which the ReferenceBlock elements were located behind the Block element.

Build system changes

  • all: std::codecvt_utf8 is now used instead of Boost’s utf8_codecvt_facet. The bundled copy the latter in lib/boost has therefore been removed.

Have fun 😁

MKVToolNix v60.0.0 released

Heya everyone.

Here’s a new release of MKVToolNix: v60. It includes a substantial amount of improvements for BCP 47/RFC 5646 language tags. It also fixes a nasty bug in the HEVC code that could lead to a loss of some frames when appending HEVC tracks under certain circumstances.

Nothing’s changed for package maintainers this time around.

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

  • all: IETF BCP 47/RFC 5646 language tags: added support for language families from ISO 639-5 that aren’t part of 639-2.
  • all: IETF BCP 47/RFC 5646 language tags: implemented support for Alpha 2 country codes of the “user-defined” category: AA, QMQZ, XAXZ and ZZ.
  • all: IETF BCP 47/RFC 5646 language tags: updated the various lists of valid subtags from the official specs.
  • MKVToolNix GUI: multiplexer: pressing the keyboard shortcut for the track’s “Language” label (Alt+L for English) will now open the language dialog.
  • MKVToolNix GUI: multiplexer: added an option in the preferences for turning off the colored boxes indicating which file each track belongs to.

Bug fixes

  • all: IETF BCP 47/RFC 5646 language tags: fixed validating extended language & variant subtags against their allowed prefixes (e.g. a valid tag with a country code as in de-CH-1996 is recognized as valid while two generally known variants that aren’t allowed together as in de-1901-1996 is recognized as invalid).
  • all: IETF BCP 47/RFC 5646 language tags: when looking up a language for a two- or three-letter code, the programs will no longer compare that code with language names as that was unintended, ambiguous (e.g. the code “Ga” could be interpreted as the 639-2 alpha-2 code for “Irish” or as the name of the language called “Ga”) and only worked with languages whose name was at most three letters long.
  • mkvmerge: HEVC/H.265: appending Matroska files with HEVC tracks might lead to the loss of the first couple of frames from each of the second and all following files. Fixes #3170.
  • mkvmerge, mkvextract: HEVC/H.265 parser: fixed the programs aborting when parsing VPS or SPS NALUs with invalid content due to unhandled exceptions. Fixes #3162.
  • MKVToolNix GUI: multiplexer: when the option “use legacy MIME types for font attachments” is enabled, the GUI will now use application/x-truetype-font for font collection files.
  • MKVToolNix GUI: multiplexer: fixed escaping the mkvmerge argument in the “Show command-line options” dialog for the “Windows (cmd.exe)” mode. Fixes #3164.
  • MKVToolNix GUI: multiplexer: when adding multiple files at once, the GUI will sort file names with numbers the way a human would expect it to. For example, 1.mp4, 9.aac, 10.srt, 11.srt are now sorted exactly that order instead of 1.mp4, 10.srt, 11.srt, 9.aac.
  • MKVToolNix GUI: header editor: the header editor will now honor the “use legacy MIME types when adding font attachments” setting when adding new attachments.

Have fun 😎

MKVToolNix v59.0.0 released

Heyooo!

Summer’s here, so let’s stay inside & play with a new release of MKVToolNix: v59. There were several nice quality of life improvements to the GUI as well as the usual bug fixes.

Several things have changed for packagers, so many that I won’t list them here. You can find them the NEWS below.

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: WebVTT parser: the parser now follows the specs’ rules for parsing timestamps more closely by being more lenient: it allows arbitrary number of spaces & tabs at the start of the line & around the arrow; it allows any number of digits for the hours. Part of #3139.
  • MKVToolNix GUI: multiplexer: when adding a Blu-ray playlist without scanning for other playlists the GUI will now look for disc library information & let the user select which one to use if there’s more than one entry. Implements #3143.
  • MKVToolNix GUI: multiplexer: added an option for sorting files & tracks by track types when adding them to multiplex settings. The order is: video first followed by audio, subtitles and other types. Files & tracks can still be reordered manually later. The option is enabled by default & can be found in the preferences → “Multiplexer” page → “Adding files” section. Implements #2366.
  • MKVToolNix GUI: multiplexer: added an option for recognizing file name sequences such as movie.001.mp4, movie.002.mp4, movie.003.mp4 when adding multiple files at once. If a sequence is detected, the only first file will be added while the second and following file names will be appended to the first one. The option is enabled by default & can be found in the preferences → “Multiplexer” page → “Adding files” section. Implements #2866.
  • MKVToolNix GUI: multiplexer: added small colored boxes for each file & track in order to indicate from which file each track is read. The colors used can be configured in the preferences → “Multiplexer” page → “File & track colors” section.

Bug fixes

  • build system: fixed compilation with fmt v8. Fixes #3151.
  • mkvmerge: SRT subtitle reader: characters that aren’t valid according to the assumed encoding of the file will now be replaced by the Unicode “Replacement Character” U+FFFD instead of keeping the invalid characters, potentially violating the Matroska specs.
  • mkvmerge: WebVTT parser: the parser now accepts timestamps with hours larger than 99. Part of #3139.
  • mkvextract: TTA extraction, only on Windows: fixed removing the temporary file created during extraction.
  • mkvmerge, mkvpropedit, MKVToolNix GUI’s multiplexer & header editor: MIME type detection is now done using Qt instead of the magic library. The main impact is the MIME types of TrueType & OpenType fonts are now detected correctly. Fixes #3137.
  • mkvmerge, mkvinfo, MKVToolNix GUI’s info tool: only on Windows: displaying dates before 1970-01-01 00:00:00 UTC or after 2038-01-19 03:14:08 UTC was broken. Note that the header editor was not affected. Fixes #3148.
  • MKVToolNix GUI: only on 64-bit Windows: under certain conditions, the 64-bit Windows binaries crashed when opening dialog windows. Even though the underlying bug hasn’t been identified, the investigation showed that building it with newer versions than 10.2.0 of the mingw/gcc cross-compiler enabled the crashes, while binaries built with 10.2.0 were fine. This affected v57 and v58 which were built with gcc versions 10.3.0 and 11.1.0 respectively. For the time being I’ve switched back to building Windows binaries with gcc 10.2.0. Fixes #3132 & #3133.
  • MKVToolNix GUI: multiplexer: when adding files to the multiplexer by running the GUI’s executable with file names as command line arguments, the source directory will be remembered as the “last open directory” again, causing subsequent uses of the “open file” dialog to start in the same directory.
  • MKVToolNix GUI: multiplexer: the “default track flag” column in the track list was missing its icons. Additionally it contained text even for things that aren’t regular tracks and therefore do not actually have that flag (e.g. chapters or tags). Fixes #3144.
  • MKVToolNix GUI: multiplexer: the default for the dialog asking the user what to do with dragged & dropped files if they’ve never seen the dialog is back to adding the files to the current multiplex settings instead of “add as additional parts” which was an unintentional default.
  • MKVToolNix GUI: multiplexer: the “show command line” dialog will now always use backward slashes for the “Windows (cmd.exe)” mode and forward slashes for the “Linux/Unix shells” mode, regardless of the operating system it’s currently running on. Fixes #3155.

Build system changes

  • The Qt library is now required for building all applications, even the command-line ones, as they use Qt’s MIME type detection capabilities. In turn this means that you cannot disable the Qt usage anymore; either Qt5 or Qt 6 is required. You can still chose not to build MKVToolNix GUI, though. A new option has been added to configure for this purpose: --disable-gui.
  • The gmp library is now required.
  • The magic library is not used anymore.
  • The PCRE2 & JPCRE2 libraries are not used anymore. The bundled version of JPCRE2 was removed.
  • Boost’s “rational” library is not used anymore.
  • configure: the option --enable-appimage has been removed. The location of the relevant directories within an AppImage is now detected automatically.
  • The bundled fmt library was updated to v8.0.0.

Have fun 😁

MKVToolNix v58.0.0 released

Heyo,

Summer is here, and so is MKVToolNix v58.0.0. Unlike the previous releases a lot more time has gone into it. The most noticeable change (to end users at least) is how the “default track” flag is handled, bringing it up to how the latest spec says the flag should be handled by players. Another prominent change is which MIME types are used for attached fonts on Windows. See the news below for details on both changes.

There were a couple of changes for packages, though none of them should actually require work on recent distros. Again, see the news below for details.

Last, but not least: get vaccinated if at all possible, y’all!

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, MKVToolNix GUI’s multiplexer: the handling of the “default track” flag has been changed to match the recent changes to the Matroska specifications. The new semantics are that if it is set, it is supposed to signal to the player that this track is eligible for being played by default, potentially taking other factors such as user preferences regarding languages into account. This implies that more than one track of each type can have this flag set. For example, a Blu-ray disc with three audio tracks might have the main audio in both English and Japanese, whereas the third audio track contains the director’s comments. In such a case the first two tracks should have the “default track” flag set, the third one shouldn’t. Earlier mkvmerge was enforcing that only one track of each type could have the flag set. This restriction has been removed, both in mkvmerge and in the GUI’s multiplexer. mkvpropedit and the GUI’s header editor are unaffected as they’ve always allowed to set the flag on as many tracks as the user wanted.
  • mkvmerge: AVC/H.264 & HEVC/H.265 identification: added the stream’s pixel dimensions (AVC only; were present for HEVC already) & default duration. Implements #3116.
  • mkvmerge, mkvextract: HEVC/H.265: added support for reading single-layer Dolby Vision from Annex B type bitstreams (elementary streams, MPEG transport streams). Patch by quietvoid. Implements #3113.
  • mkvinfo: the option -X/--full-hexdump now affects all binary elements, not just the frame data in SimpleBlock and BlockGroup elements.
  • MKVToolNix GUI: multiplexer: the “delay” and “sync” options can now be used for chapters in source files, too. Implements #3129.
  • MKVToolNix GUI: when moving list entries up & down with the optional buttons or the keyboard shortcuts (instead of using drag & drop), the GUI ensures that the top-most selected entry remains visible after the move. Implements #3123.
  • MKVToolNix GUI: added an option in the preference to use legacy MIME types for font attachments instead of the current standard ones (e.g. ‘application/x-truetype-font’ instead of ‘font/sfnt’ and ‘font/ttf’).

Bug fixes

  • build system: fixed filtering out optimization options when compiling the file iso639_language_list.cpp (before only numeric optimization levels were filtered out and only if it wasn’t the last option in the list of flags). See #3105 for context.
  • build system: when libmagic was detected via pkg-config, MKVToolNix was actually compiled without support for libmagic due to a preprocessor symbol not being defined.
  • mkvmerge: MP4 reader: fixed an issue with timestamps overflowing when the file’s or the track’s time scale is large. Fixes #3124.
  • mkvmerge, mkvextract: fixed key frame handling for BlockGroup elements with a forward reference but no backward references. Patches by Tom Yan.
  • mkvmerge, mkvpropedit, MKVToolNix GUI’s chapter editor: the programs will no longer omit writing mandatory elements set to their default value if other elements of the same type are present in the same master. This affects mostly the “chapter language” element which may occur multiple times within the same “chapter display” master. If it does occur multiple times and one of them is set to “English” (which is that element’s default value), that element will now be written, too. Part of the fix of #3120.
  • mkvmerge, mkvpropedit, MKVToolNix GUI’s chapter editor: when parsing chapter files IETF & legacy language elements as well as legacy country elements will now be properly generated depending on which exist already, especially when there’s more than one language and/or country element in a “chapter display” element. Part of the fix of #3120.
  • mkvmerge, mkvpropedit, MKVToolNix GUI’s chapter editor: fixed reading OGM-style chapter files with timestamps that don’t have exactly three decimal places. Any number of decimal places between one and nine is now supported for nanosecond precision. Fixes #3121.
  • MKVToolNix GUI: chapter editor: added/fixed support for “chapter display” elements with multiple languages or countries. Part of the fix of #3120.

Build system changes

  • Qt 6: added support for building with Qt 6. configure will look for Qt 6 first and only continue looking for Qt 5 if Qt 6 isn’t found or disabled via --disable-qt6. Qt 6 detection works by first looking for the qmake6 binary. Its location can be specified with the --with-qmake6=… option. All other Qt 6 related facts (such as compiler & linker flags or the position of the other required tools such as lconvert, moc, rcc and uic) will be derived from the output generated by qmake6. Note that at this point Qt 6 is not yet supported for the cross-compilation build to Windows, nor is a static Qt 6 build supported yet. Note that the command line options --enable-static-qt, --with-qt-pkg-config-modules and --without-qt-pkg-config only apply to the Qt 5 and have no effect on Qt 6.
  • Qt 5: the options for specifying the position of the tools (--with-moc=…, --with-rcc=… and --with-uic=…) have been removed. Their position will now be derived from the output generated by qmake.
  • configure: completely disabling the GUI now requires passing both --disable-qt6 and --disable-qt options.
  • Boost’s multi-precision library is now required.
  • Boost v1.66 or newer is now required.

Other changes

  • The Windows build is now using an updated version of the file/magic library for MIME type detection of attachments. This affects fonts whose MIME types will now be the current standard MIME types (e.g. font/sfnt or font/ttf for TrueType fonts). As this might pose problematic with older players that only support the legacy MIME type (e.g. application/x-truetype-font), a new option was added in the GUI’s preferences to use the legacy MIME types instead of the current standard ones. This is off by default. Builds for other operating systems have already been using newer versions of the file/magic library for a long time.

Have fun 😁