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 variablesMKVTOOLNIX_OPTIONS
,MKVEXTRACT_OPTIONS
,
MKVINFO_OPTIONS
,MKVMERGE_OPTIONS
andMKVPROPEDIT_OPTIONS
- mkvmerge: the deprecated 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.
- Several element names are a bit clearer (e.g.
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/secondnum_units_in_tick
is set to 1 andtime_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 of00: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 :)
Since version 9 enters the huge window and is outside the screen to reduce the window, does not work. Tell me, how can I fix this?
screenshot: https://prnt.sc/i1ablh
I installed the MKVToolNix v20.0.0, but I found MKVExtractGUI2.exe doesn’t work, no tracks are displayed. Please fix it, thanks.
That’s a problem the MKVExtractGUI2 developers have to fix. See here: https://gitlab.com/mbunkus/mkvtoolnix/issues/2198
Maybe this is the same issue as the following one? https://gitlab.com/mbunkus/mkvtoolnix/issues/1349
Since version 20, mkvmerge is not working with Popcorn audio converter anymore. Up to 19 was working fine. I know it’s an old tool, but still the best to convert audio tracks witin a mkv container. So I will have to stick to 19 from now I guess. :(
You could also notify the developers of that application so that maybe, just maybe, they’ll update their application.
Congratulations for the good job but there is a big con:
Every new version performs slower and slower…
In the versions before (10,11 etc) 2GB MKV was rendered in a couple of seconds. Now it takes longer and longer. Same system…
Hi, first thanks a lot for this nice tool.
Got a question please, i use those switches to remove some of the metadata :
–no-date –disable-track-statistics-tags –engage no_variable_data
In mediaInfo this leaves :
Writing application: no_variable_data
Writing library : no_variable_data
Can then be removed with MkvPropEdit :
mkvpropedit “file.mkv” –set “writing-application=” –set “muxing-application=”
Would like to know if it is possible to achieve this directly during the first step, during the muxing, before the file is create and without mkvpropedit.exe please.
Thanks again.
No, it isn’t.
Thanks for the quick reply,
I guess nothing can be done to change this and i’ll always have to do it in 2 steps with mkvpropedit.exe once the mkv is created then.
Well not a big deal,
thank you very much for the answer and those nice tools.