Tag Archives: Matroska

MKVToolNix v20.0.0 released

Well, hello everyone!

The holidays are always a nice time for coding as the world seems to turn just a tad slower than usual and people are that tiny bit more relaxed. I took the opportunity to work on my backlog and fix quite a number of bugs in mkvmerge. I’ve also removed those options and features that I had deprecated a year ago.

Another huge change was the near complete rewrite of mkvinfo’s internals. The goal is to include its GUI into MKVToolNix GUI in the next release. It won’t be a 1:1 copy; instead, the new GUI will have more features. A result is that the output generated by the command-line utility has changed in several ways. See the corresponding NEWS entry below for more details.

An important change for package maintainers is the new requirement for the cmark library. Fedora/CentOS/openSUSE already contain the necessary package (cmark-devel), whereas Debian/Ubuntu don’t just yet (there’s the cmark package, but that only contains the binary, whereas MKVToolNix needs the library & header files).

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

Here are the NEWS since the previous release:

Important notes

  • Feature removal: several deprecated features have been removed:
    • mkvmerge: the deprecated options --identify-verbose (and its counterpart
      -I), --identify-for-gui, --identify-for-mmg and
      --identification-format verbose-text
    • all command line tools: support for the deprecated, old, proprietary format
      used for option files
    • all command line tools: support for passing command line options via the
      deprecated environment variables MKVTOOLNIX_OPTIONS, MKVEXTRACT_OPTIONS,
      MKVINFO_OPTIONS, MKVMERGE_OPTIONS and MKVPROPEDIT_OPTIONS
  • mkvinfo: most of its code was re-written in order to lay the groundwork for
    including its functionality in MKVToolNix GUI but with more features than
    the existing mkvinfo GUI. The result is that a lot of its output has been
    changed slightly while keeping the basic layout. Changes include but aren’t
    limited to:

    • Several element names are a bit clearer (e.g. Maximum cache instead of
      MaxCache).
    • All timestamps and durations are now output as nanoseconds in formatted
      form (e.g. 01:23:45.67890123). All additional formats (e.g. floating
      point numbers output in seconds or milliseconds) were removed.
    • Element names for chapters and tags are now translated if a translation is
      available.
    • Elements located in wrong positions within the Matroska document are
      handled better.
      While mkvinfo’s output is mostly kept very stable, it is not designed to be
      parsed by other utilities. Even though I’ve tried hard to cram all changes
      and cleanups into this version, additional changes may be made in the next
      couple of releases depending on user feedback and bug reports.

New features and enhancements

  • mkvmerge: AVC/h.264 packetizer (framed): access unit delimiter NALUs will
    now be removed. Implements #2173.

Bug fixes

  • mkvmerge: AVC/h.264 parser: when fixing the bitstream timing information
    mkvmerge will now use exact representations of the desired field duration if
    possible. For example, when indicating 50 fields/second num_units_in_tick
    is set to 1 and time_scale to 50 instead of 5368709 and 268435456. Part of
    the fix for #1673.
  • mkvmerge: AVC/h.264 parser: mkvmerge no longer assumes that encountering
    sequence parameter set or picture parameter set NALUs signal the start of a
    new frame. Fixes #2179.
  • mkvmerge: AVC/h.264 packetizer (framed): when mkvmerge is told to fix the
    bitstream timing information, it will now update all SPS NALUs, not just the
    ones in the AVCC. Part of the fix for #1673.
  • mkvmerge: MPEG TS reader: TS packet payloads will only be treated as PES
    packets if the payload actually starts with a PES start code. The prior
    behavior led to wrong timestamps and potentially broken frame data. Fixes
    #2193.
  • mkvmerge: MPEG TS reader: mkvmerge will now drop incomplete PES packets as
    soon as an error is detected in the transport stream instead of passing the
    incomplete frame to the packetizer. An error is assumed either if the
    transport_error_indicator flag is set or if the value of the
    continuity_counter header field doesn’t match the expected value. Fixes
    #2181.
  • mkvmerge: Opus: when re-muxing Opus from Matroska mkvmerge will now write
    "block duration" elements for all block groups where a "discard padding" is
    set, too. Fixes #2188.
  • mkvmerge: SRT reader: mkvmerge can now handle SRT files with timestamps
    without decimal places (e.g. 00:01:15 instead of 00:01:15.000).
  • mkvmerge: read buffer I/O class: the class could get out of sync regarding
    the file position of the underlying file I/O class causing wrong data to be
    returned on subsequent read operations. One result was that trying to
    identifying MPLS files that refer to very short M2TS files caused mkvmerge
    to segfault.
  • mkvmerge: multiplexer core: if there’s a gap in audio timestamps, a new
    block group/lace will be started for the first frame after each gap. Before
    the fix the frame after the gap was often stored in the previous block group
    causing the gap to be in the wrong place: at the end of that block
    group. Fixes #1700.
  • mkvextract: AVC/h.264: if two consecutive IDR frames with the same
    idr_pic_id parameter and no access unit delimiters are found between them,
    mkvextract will insert an access unit delimiter in order to signal the start
    of a new access unit. Fixes #1704.
  • MKVToolNix GUI: update check dialog: Markdown links will now be converted to
    clickable links. Fixes #2176.
  • build system: fixed a race condition when creating new directories if rake
    is run with -jN in newer versions of Ruby/rake. Fixes #2194.

Build system changes

  • cmark, the CommonMark parsing and
    rendering library in C, is now required when building the GUIs.

Have fun :)

MKVToolNix v19.0.0 released

The year’s almost over, so I’m just in time for the last release of the year: MKVToolNix v19.0.0 is out. It’s not that big of release, but it still contains a couple of improvements all over the place — and two nice performance improvements on Windows that people will likely notice.

There were no changes for package maintainers.

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

Here are the NEWS since the previous release:

Important notes

  • The MKVToolNix project now contains a Code of Conduct.
  • The MKVToolNix project’s source code repository, bug tracker and wiki have been moved to GitLab.

New features and enhancements

  • mkvmerge: splitting by duration, by timestamps or by timestamp-based parts: mkvmerge will now consider the first key frame within 1ms of the requested value to be eligible for splitting.
  • MKVToolNix GUI: the GUI will now save and restore the widths of columns in tree and list views. Implements #2057.
  • MKVToolNix GUI: header editor: when closing or reloading a modified file, the GUI will now focus the first element that’s been modified before asking the user for confirmation regarding discarding unsaved changes.

Bug fixes

  • mkvmerge: fixed reading text files encoded in UTF-16 order UTF-32 that have different forms of line endings (new lines, carriage returns or a mix of both). Fixes #2160.
  • mkvmerge: MP4 reader: fixed mkvmerge’s interpretation of edit list entries with segment_duration == 0 when there’s more than one edit list entry. In that case mkvmerge was reading the whole content more than once. Fixes #2152.
  • mkvmerge, GUI’s multiplexer: MIME types: added the font top-level media types from RFC 8081. This means that the following new MIME types for fonts can be used: font/ttf, font/otf, font/woff and font/woff2.
  • mkvmerge: MPEG transport stream reader: fixed slow speed on Windows due to lack of buffering.
  • mkvextract: fixed slow track extraction speed on Windows due to lack of buffering. Fixes #2166.
  • MKVToolNix GUI: multiplexer: changing the "subtitle/chapter character set" drop-down was ignored when the selected track was a chapter track. Fixes #2165.
  • MKVToolNix GUI: multiplexer: once a "subtitle/chapter character set" was set for a track it couldn’t be changed back to the empty entry (= auto-detection) anymore.
  • MKVToolNix GUI: header editor: fixed re-translating several displayed strings when the GUI language is changed if the language the GUI was started with was not English. Fixes #2159.
  • MKVToolNix GUI: header editor: whenever a file did not contain a "date" element in its segment information section, the GUI would erroneously ask the user to confirm discarding unsaved changes when closing or reloading the tab. Fixes #2167.
  • MKVToolNix GUI: job queue: jobs are now saved when their status changes in addition to when the program exits. Fixes #2168.

Have fun :)

MKVToolNix v17.0.0 released

Here’s release v17.0.0 of MKVToolNix. The rather short timespan since the previous release is due to a nasty bug in the VC-1 code that a lot of people are hitting with v16.

Other important changes are the overhaul of mkvextract’s command line interface and all programs using the word “timestamp” instead of “timecode” (which also affects mkvmerge’s command line interface). See the news below for more information.

There were no changes for package maintainers.

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

Here are the NEWS since the previous release:

Important notes

  • The word "timecode" has been changed to "timestamp" everywhere it was used in MKVToolNix. This affects program output (including mkvinfo’s), GUI controls, command line parameters (e.g. mkvmerge --timestamp-scale …) and file formats. All programs remain backwards compatible insofar as they still accept "timecode" in all those places (e.g. mkvmerge --timecode-scale …).
    The reason for the change is wrong usage. What both the Matroska specification and MKVToolNix used "timecode" for is normally called a "timestamp" in audio & video domains. A "timecode" on the other hand has a specific meaning. As the Matroska specification is moving towards implementing real timecodes, it will also move towards correcting the verbiage. MKVToolNix is following this change.
  • mkvextract’s command line interface has been changed to allow extraction of multiple items at the same time. The first argument must now be the source file’s name. All following arguments either set the mode (e.g. tracks) or specify what to extract in the currently active mode.
    Those items that were written to the standard output (chapters, tags and cue sheets) are now always written to files instead. Therefore the respective modes require an output file name.
    For example, extracting two tracks, the chapters and the tags can be done with the following command:
    mkvextract input.mkv tracks 0:video.h265 1:audio.aac chapters chapters.xml tags tags.xml
    The old interface (specifying the mode first and the source file name second) remains working and supported. However, it is now deprecated and will be removed at the end of 2018.

New features and enhancements

  • mkvmerge: AC-3: during identification regular AC-3 and E-AC-3 tracks will now be identified differently for most container formats (exception: AVI, Real Media, Ogg/OGM). The codec will be reported as AC-3 for regular AC-3 and as E-AC-3 for E-AC-3 tracks instead of the combined AC-3/E-AC-3.
  • mkvextract: the command line interface has been changed to allow extraction of multiple items at the same time. See section "Important notes" for details.

Bug fixes

  • mkvmerge: AAC ADTS parser: mkvmerge will now parse the program_config_element if it is located at the start of an AAC frame in order to determine the actual number of channels. This overrides invalid channel configurations in the ADTS headers, for example. Fixes #2107.
  • mkvmerge: fixed AC-3 being misdetected as encrypted MPEG program streams under certain conditions.
  • mkvmerge: Dirac: under certain conditions (e.g. only muxing a single Dirac track without any other tracks) mkvmerge was always setting the pixel width & height to 123. The frame rate was wrong, too.
  • mkvmerge: E-AC-3 in Matroska: if AC-3 cores and their corresponding E-AC-3 extension are located in two different Matroska blocks, then mkvmerge will now re-assemble them into a single block and only use the first block’s timestamp.
  • mkvmerge: SRT reader: fixed calculating the duration of entries starting with at a negative timestamp.
  • mkvmerge: VC-1: under certain conditions (e.g. only muxing a single VC-1 track without any other tracks) mkvmerge was always setting the pixel width & height to 123. The frame rate was wrong, too. Fixes #2113.
  • mkvmerge: command line options: an error message will be output if the single-value-form of the --sync option is used and it isn’t a number (e.g. --sync 0:asd). Fixes #2121.
  • mkvpropedit, GUI’s header editor: both programs will now show proper error messages instead of crashing when certain kinds of data corruption is found when reading a file. Fixes #2115.

Have fun :)