Version 37.0.0 "Leave It"
New features and enhancements
* MKVToolNix GUI: the list of often used languages now contains those from
Wikipedia's "List of languages by native speakers" by default. Also by
default only those languages will be shown in the language drop-down boxes.
Bug fixes
* MKVToolNix GUI: multiplexer: fixed a bug in the "make destination file names
unique" logic that caused an existing number-in-parenthesis at the end of
the file base name to be removed in certain situations (e.g. when the first
added file was named `m (3).mkv` and both `m (3) (1).mkv` and `m (3)
(2).mkv` existed already, the GUI was suddenly use `m.mkv` instead of `m (3)
(3).mkv`).
* MKVToolNix GUI: on Windows the GUI is built with a slightly older version of
the Qt library again (5.12.4). The Qt version used in release v36.0.0,
v5.13.0, lead to crashes when doing certain things such as selecting
multiple tracks in the multiplexer.
Version 36.0.0 "Is That Jazz?"
New features and enhancements
* mkvmerge: mkvmerge now allows appending AV1, VP8, VP9, H.264/AVC and
H.265/HEVC tracks whose pixel dimensions differ.
Bug fixes
* source code: fixed building with Boost 1.71.0.
* all: fixed the spelling of the H.264 & H.265 codec names.
* mkvmerge: Blu-ray MPLS handling: mkvmerge will now find corresponding M2TS
files even if the `clip_codec_identifier` playlist item field is not set to
`M2TS` in the MPLS file.
* mkvmerge: fixed handling of text files that use both DOS-style and
Unix-style line endings resulting in problems such as text subtitle files
not being parsed correctly.
Version 35.0.0 "All The Love In The World"
New features and enhancements
* mkvmerge: JSON identification: the "codec name" track property will be
output as `codec_name`. The JSON schema has been bumped to v12 for this
change.
* MKVToolNix GUI: job queue: added a new type of action to execute after job
completion: deleting source files for of multiplexer jobs. As this is a
destructive operation, the action is disabled by default.
Bug fixes
* mkvmerge: the "codec name" track property wasn't copied from Matroska
files.
* MKVToolNix GUI: multiplexer: Windows: clearing the destination file name
will reset the tab name to "\<No destination file\>" again.
* MKVToolNix GUI: multiplexer: the file types were not re-translated if the UI
language was changed.
Version 34.0.0 "Sight and Seen":
Bug fixes
* mkvmerge: all subtitle frames are now treated as key frames in order to fix
wrong data in source files.
* mkvmerge: AV1: fixed frame timestamp calculation when reading bitstreams
that lack timing information from IVF files.
* mkvmerge: Matroska reader: fixed an infinite loop that could happen with
large video frames and applied timestamp files due to too much data being
buffered at the wrong time.
Version 33.1.0 "Primrose"
Bug fixes
* MKVToolNix GUI: multiplexer: Windows: using UNC paths
(e.g. \\server\Videos) when the option "automatically set the destination
file name" was set in the preferences, the GUI would create a destination
file name with forward slashes (e.g. //server/Videos/outputfile.mkv), a
syntax not supported by mkvmerge.
* build system: the programs were accidentally built without stack protection
(-fstack-protector-strong) on recent versions of gcc and clang.
Version 33.0.0 "A Little Bit of Madness"
Bug fixes
* mkvinfo: when using the --size option, mkvinfo will now report the
correctly if an element has an unknown size.
* MKVToolNix GUI: info tool: clusters with an unknown size will now be read
and displayed correctly.
* MKVToolNix GUI: multiplexer: Windows: trying to open Blu-ray index or
playlist files failed when the path to the files contained symbolic links
(e.g. when mounting a drive in a sub-folder via Windows' disk management
utility).
* MKVToolNix GUI: multiplexer: if a destination file names ends with a number
in parenthesis (e.g. a year such as "(2017)"), that number will not be
stripped anymore during the process of ensuring the destination file name is
unique. Only those suffixes added automatically in prior attempts to make
the file name unique will be removed.
* MKVToolNix GUI: multiplexer: Windows: the GUI will let the user change the
drive letter part of the destination file name freely again and only verify
its validity right before starting to mux/adding to the job queue. Before it
tried to force that into something valid, often resulting in unintentional
paths (such as "C:\users\…\DC\files\…").
Version 32.0.0 "Astral Progressions":
New features and enhancements
* mkvinfo: when sizes are output the size of the element's data portion is
output in addition to the element's total size.
* MKVToolNix GUI: info tool: the element's data portion is
shown as an extra column.
* MKVToolNix GUI: multiplexer: added column "Delay" to the track list
containing the additional delay to apply during multiplexing.
Bug fixes
* all: fixed handling of Unicode code points > U+FFFF.
* mkvmerge: Windows: mkvmerge was crashing with an exception when trying to
identify certain files that can be used on Blu-rays (such as MPEG transport
streams of MPLS play list files) and when the file name was given as a UNC
path (e.g. `\\servername\sharename\path\to\file.m2ts`). The GUI emitted
errors such as "the JSON output could not be parsed" in that case.
* MKVToolNix GUI: the portable mode wasn't detected correctly when the current
working directory the GUI was started from wasn't the directory the GUI's
executable file was located it. Examples for when this is the case are
Windows' "send to" or "open with" functions.
* MKVToolNix GUI: multiplexer: using button to change the current destination
directory to one of the recently used ones did not update the file name
according to the "make file name unique" setting.
* MKVToolNix GUI: multiplexer: the function "set destination file name from
selected file's name" will now only change the destination file's name but
not its path.
Build system changes
* libEBML v1.3.7 and libMatroska 1.5.0 are now required as they fix their
handling of Unicode code points > U+FFFF.
Version 31.0.0 "Dolores In A Shoestand":
New features and enhancements
* all programs: added a new option --abort-on-warnings that will cause the
program to abort after it has emitted the first warning, similar to how it
aborts after the first error.
* mkvmerge, mkvextract: when closing files that were opened for writing,
cached data will not be flushed to storage automatically anymore. This
reverts the workaround implemented for 2469. A new option was added to both
programs (--flush-on-close) that re-enables flushing for people who are
affected by data loss such as described in 2469.
The reason is that automatic flushing causes long delays in processing
queues when the output by mkvmerge/mkvextract isn't the final product but
just an intermediate result to be processed further.
* MKVToolNix GUI: multiplexer: the dialog previewing different character sets
for text subtitles will now keep the position of the displayed text when
switching between character sets.
Bug fixes
* mkvmerge: AVI reader: using DV type 1 AVIs will now result in an unsupported
file type being reported (as the underlying AVI library doesn't support
them) instead of crashing mkvmerge.
* mkvmerge: HEVC: the height of interlaced streams will now be set correctly
to the height of the full frame instead of the height of a single interlaced
field.
* mkvmerge: MP4 reader: edit lists consisting solely of elements that mkvmerge
doesn't support (such as dwells) are simply ignored. Before no data was read
for such tracks at all.
* mkvmerge: text subtitles: entries with an explicit duration of 0ms will now
be handled correctly: the 0ms duration will be stored in Matroska instead of
the difference between the current and the following entry.
* MKVToolNix GUI: multiplexer, chapter editor: fixed drag & drop handling with
Qt 5.12.0 and newer.
* MKVToolNix GUI: multiplexer: the GUI did not clean up temporary files
created when running mkvmerge.
Build system changes
* Qt 5.4.0 or newer has required (up from 5.3.0) since version 30.0.0; I just
forgot to include this entry.
Version 30.1.0 "Forever And More":
Bug fixes
* build system: fixed building on non-UTF-8 locales.
* MKVToolNix GUI: multiplexer: implemented a workaround for drag & drop not
working on macOS with Qt 5.12 due to a bug in Qt 5.12.
* MKVToolNix GUI: chapter editor: when opening a Matroska/WebM file that
doesn't contain chapters and later saving chapters back to them, the editor
was truncating the file down to a couple of KB in size.
Version 30.0.0 "Interstellar"
New features and enhancements
* mkvextract: WAV extractor: mkvextract will now write W64 files instead of
WAV files if the file name extension is `.w64` or if the final file size is
bigger than 4 GB, the file size limit for WAV files.
* MKVToolNix GUI: multiplexer: a new button was added next to the "destination
file" controls. Clicking it shows a menu with the ten most recently used
output directories. Selecting one of them will change the destination file
to the selected directory keeping the file name.
* MKVToolNix GUI: multiplexer (preferences): the ten most recently used values
for the "relative output directory" and "fixed output directory" settings
are now saved. The corresponding settings have been changed into combo boxes
allowing quick access to those recent values.
* MKVToolNix GUI: multiplexer (preferences): the predefined split sizes and
durations can now be customized in the preferences.
* MKVToolNix GUI: chapter editor: added an option in the "Chapter editor" menu
for appending chapters from an existing file to the currently open editor
tab.
* MKVToolNix GUI: chapter editor: added an action in the context menu for
copying the selected entry and all of its children to another open editor
tab.
Bug fixes
* mkvmerge: all files opened for writing will now be flushed once before
they're closed. This ensures the operating system actually writes all cached
data to disk preventing data loss in certain situations such as power
outages or buggy drivers in combination with suspending the computer.
* mkvmerge: AAC: under certain conditions 8 channel audio files were taken for
7 channel ones.
* MKVToolNix GUI: multiplexer: removing a file added as an "additional part"
will no longer cause a crash.
* source code: fixed compilation with Boost 1.69.0 after API-breaking change
to the `boost::tribool` class.
Version 29.0.0 "Like It Or Not"
Important notes
* The string formatting library used was switched from boost::format to
[fmt](http://fmtlib.net/). See the section "Build system changes" for
details.
New features and enhancements
* MKVToolNix GUI: added an option in the preferences for disabling automatic
scaling for high DPI displays.
* MKVToolNix GUI: the GUI will now prevent the system from going to sleep
while the job queue is running. This feature is implemented for macOS,
Windows and Linux/Unix systems where the org.freedesktop.login1.Manager
D-Bus interface is available.
Bug fixes
* mkvmerge: chapter generation: the start timestamps of chapters generated in
intervals was wrong for files whose smallest video timestamp was bigger than
0.
* mkvmerge: MP4 reader: fixed handling of atoms whose size exceeds the parent
atom's size.
* mkvmerge, MKVToolNix GUI's chapter editor: the chapter name template will
now also be used when reading Ogg-style chapter files with empty chapter
names.
* mkvextract: AAC: mkvextract will now write the program config element (PCE)
before the first AAC raw data packet if the PCE is present in the
AudioSpecificConfig structure in the Codec Private Matroska element. The
PCE carries vital information about the number of channels and is required
in certain cases.
* mkvpropedit, MKVToolNix GUI's header editor: in situations when a one-byte
space must be covered by a new EBML void element the following element must
be moved up instead. If that moved element is a cluster, the corresponding
cue entries will now be updated to reflect the cluster's new position.
* MKVToolNix GUI: Windows: the application manifest is now included properly
so that Windows actually recognizes it.
Build system changes
* Qt's D-Bus implementation is now required for building on systems other than
macOS and Windows,
* The boost::format library is not used anymore.
* The [fmt library](http://fmtlib.net/) is now required. Versions 3 and
newer are supported. As not all Linux distributions include packages for the
library, its release 5.2.1 comes bundled with MKVToolNix. The configure
script will check for a system version of the library and use it if present
and recent enough. Otherwise it will fall back to the bundled version and
link that statically.
* mkvmerge, mkvinfo, mkvextract, mkvpropedit, MKVToolNix GUI's info tool &
chapter editor: fixed a case of memory being accessed after it had been
freed earlier. This can be triggered by specially crafted Matroska files and
lead to arbitrary code execution. The vulnerability was reported as Cisco
TALOS 2018-0694 on 2018-10-25.
Version 28.1.0 "Morning Child":
Bug fixes
* mkvmerge: AV1 parser: fixed an error in the sequence header parser if
neither the reduced_still_picture_header nor the
frame_id_numbers_present_flag is set.
* mkvmerge: AV1 parser: when creating the av1C structure for the Codec
Private element the sequence header OBU wasn't copied completely: its common
data (type field & OBU size among others) was missing.
* mkvmerge: Matroska reader, AV1: mkvmerge will try to re-create the av1C
data stored in Codec Private when reading AV1 from Matroska or WebM files
created by mkvmerge v28.0.0.
* MKVToolNix GUI: info tool: the tool will no longer stop scanning elements
when an EBML Void element is found after the first Cluster element.
Version 28.0.0 "Voice In My Head":
New features and enhancements
* mkvmerge: AV1 parser: updated the code for the finalized AV1 bitstream
specification.
* mkvmerge: AV1 packetizer: updated the code for the finalized AV1-in-Matroska
& WebM mapping specification.
* mkvmerge: AV1 support: the `--engage enable_av1` option has been removed
again.
* mkvmerge: MP4 reader: added support for AV1.
* mkvmerge: DTS: implemented dialog normalization gain removal for extension
substreams.
* mkvmerge, mkvextract: simple text subtitles: added a workaround for simple
text subtitle tracks that don't contain a duration.
* mkvextract: added support for extracting AV1 to IVF.
* mkvextract: IVF extractor (AV1, VP8, VP9): precise values will be used for
the frame rate numerator & denominator header fields for certain well-known
values of the track's default duration.
* mkvmerge: VP9: mkvmerge will now create codec private data according to the
VP9 codec mapping described in the WebM specifications.
* MKVToolNix GUI: automatic scaling for high DPI displays is activated if the
GUI is compiled with Qt ≥ 5.6.0.
* MKVToolNix GUI: added a menu item ("Help" → "System information") for
displaying information about the system MKVToolNix is running on in order to
make debugging easier.
* MKVToolNix GUI: multiplexer, header editor: the user can enter a list of
predefined track names in the preferences. She can later select from them in
"track name" combo box.
Bug fixes
* mkvmerge: JSON identification: fixed a bug when removing invalid UTF-8 data
from strings before they're output as JSON.
* mkvmerge: MP4/QuickTime reader: fixed handling of PCM audio with FourCC
`in24`.
* mkvmerge: MPEG transport stream reader, teletext subtitles: the decision
whether or not to keep frames around in order to potentially merge them with
the following frame is made sooner. That avoids problems if there are large
gaps between teletext subtitle frames which could lead to frames being
interleaved too late.
* mkvextract: IVF extractor (AV1, VP8, VP8): the frame rate header fields
weren't clamped to 16 bits properly causing wrong frame rates to be written
in certain situations.
* mkvpropedit, MKVToolNix GUI's header editor: fixed file corruption when a
one-byte space must be covered with a new EBML void element but all
surrounding elements have a "size length" field that's eight bytes long
already.
Version 27.0.0 "Metropolis":
New features and enhancements
* mkvmerge: chapters: the timestamps of chapters read from containers or from
chapter files can be adjusted (multiplication and addition) with the new
`--chapter-sync` option or using the special track ID `-2` for the existing
`--sync` option.
* MKVToolNix GUI: multiplexer: adjusted & added controls for mkvmerge's new
feature of being able to adjust chapter timestamps.
* MKVToolNix GUI: multiplexer: the GUI can now ask for confirmation when the
user is about to create a file that won't contain audio tracks. It does this
by default if at least one source file contains an audio track.
Bug fixes
* mkvmerge: AC-3: dialog normalization gain removal was corrupting E-AC-3
frames irreversibly by writing checksums in places where they didn't
belong. Additionally only the first E-AC-3 frame in a Matroska was processed
but not additional dependent frames in the same block.
* MKVToolNix GUI: fixed a leak of Windows font resources leading to a general
slowdown and subsequent crash.
Version 26.0.0 "In The Game":
New features and enhancements
* mkvmerge: chapter generation: if the name template given by
--generate-chapters-name-template is empty, no names (ChapterDisplay
master elements with ChapterString/ChapterLanguage children) will be
generated for the chapter atoms.
* mkvmerge: chapters: chapter names generated from MPLS files will now use the
name template if one is set via --generate-chapters-name-template.
* mkvmerge: mkvmerge will no longer abort with an error message if no audio,
video and subtitle tracks should be multiplexed. This allows copying of
chapters from non-chapter source files (e.g. Matroska or MP4 files).
* MKVToolNix GUI: the font size in the tool selector on the left will scale
with the font size the user selects in the preferences.
* MKVToolNix GUI: the GUI will no longer automatically resize the columns in
tree and list views to match the content size. Instead it remembers and
restores the widths set by the user.
* MKVToolNix GUI: multiplexer: the chapter name template will now be set
automatically to the name template in the preferences' "chapter editor"
section. Additionally the option --generate-chapters-name-template … will
be passed to mkvmerge in situations when mkvmerge will generate chapters
(either because automatic generation is enabled or if chapters are generated
for MPLS playlists).
* MKVToolNix GUI: chapter editor: if the chapter name template is empty,
chapters will be generated without names.
* MKVToolNix GUI: chapter editor: added an option to remove all chapter names
to the "additional modifications" dialog.
Bug fixes
* mkvmerge: Matroska reader: fixed wrong timestamps when appending Matroska
files where the second Matroska file's first timestamp is bigger
than 0.
* mkvmerge: MP4 reader: fixed division by zero errors during file
identification if the timescale is 0 in the MVHD atom.
* mkvmerge: Windows Television DVR files are now recognized as an unsupported
file type. This prevents mis-detection as MPEG-2 with an accompanying flood
of error messages.
* MKVToolNix GUI: info tool: under certain circumstances "cues" were shown at
the wrong level (inside the previous master element instead of on level 1).
* MKVToolNix GUI: job queue: fixed invalid memory handling and consequent
crashes when using the "edit in corresponding tool & remove from job queue"
option if one of the files in that job contained attached files.
Build system changes
* An AppStream metadata file will be installed in $prefix/share/metainfo.
Version 25.0.0 "Prog Noir" 2018-07-12
New features and enhancements
* mkvmerge: SRT/ASS/SSA text subtitles: for files for which no encoding has
been specified, mkvmerge will try UTF-8 first before falling back to the
system's default encoding.
* mkvmerge: SRT/ASS/SSA/WebVTT text subtitles: a warning is now emitted if
invalid 8-bit characters are encountered outside valid multi-byte UTF-8
sequences.
* mkvmerge: Matroska & MPEG transport stream readers: the encoding of text
subtitles read from Matroska files can now be changed with the
`--sub-charset` parameter.
* Linux: starting with release 25 an AppImage will be provided which should
run on any Linux distribution released around the time of CentOS 7/Ubuntu
14.04 or later.
* macOS: translations: updated the `build.sh` script to build `libiconv` and a
complete `gettext`. Together with an additional fix to how translation files
are located, MKVToolNix can now use all interface languages on macOS,
too.
Bug fixes
* mkvmerge: AVC/h.264: fixed file identification failing for certain
elementary streams due to internal buffers not being cleared properly.
* mkvmerge: HEVC/h.265: fixed file identification failing for certain
elementary streams due to internal buffers not being cleared properly.
* mkvmerge: MLP code: fixed various issues preventing MLP from being parsed
correctly.
* mkvmerge: TrueHD/MLP packetizer; dialog volume normalization removal isn't
attempted if the track is an MLP track as the operation is only supported
for TrueHD, not MLP.
* mkvmerge: MPEG TS reader: when reading MPLS mkvmerge will now compare the
MPLS's start and end timestamps against the transport stream's PTS instead
of its DTS. Otherwise the first key frame of a video track might be dropped
if it isn't the first in presentation order.
* mkvmerge: JSON identification: mkvmerge will ensure that all strings passed
to the JSON output modules are valid UTF-8 encoded strings by replacing
invalid bytes with placeholder characters. This avoids the JSON library
throwing an exception and mkvmerge aborting on such data.
* mkvmerge: audio packetizers: mkvmerge will now keep discard padding values
if they're present for packets read from Matroska files.
* mkvmerge: Ogg Opus reader: packet timestamps aren't calculated by summing up
the duration of all packets starting with timestamp 0 anymore. Instead the
algorithm is based on the Ogg page's granule position and which packet
number is currently timestamped (special handling for the first and last
packets in the stream).
* This fixes the first timestamp if the first Ogg packet's granule position
is larger than the number of samples in the first packet (= if the first
sample's timestamp is bigger than 0). mkvmerge will keep those offsets now
and inserts "discard padding" only where it's actually needed.
* It also improves handling of invalid files where the first Ogg packet's
granule position is smaller than the number of samples in the first packet
(= the first sample's timestamp is smaller than 0). mkvmerge will now
shift all timestamps up to 0 in such a case instead of inserting "discard
padding" elements all over the place.
* mkvmerge will no longer insert "discard padding" elements if the
difference between a) the calculated number of samples in the packet
according to the granule position and b) the actual number of samples as
calculated from the bitstream is one sample or less and if the packet
isn't the last one in the stream. This circumvents certain rounding
errors.
* The timestamp of the first packet after a gap in the middle of the stream
is now calculated based on the Ogg page the packet belongs to, and not
based on the timestamps before the gap.
* mkvmerge: complete rewrite of the progress handling. It's now based upon the
total size of all source files and the current position within them instead
of the number of frames/blocks to be processed. This simplifies calculation
when appending files and fixes rare cases of when progress report was
obvious wrong (e.g. stuck at 0% right until the end).
* MKVToolNix GUI: header editor: non-mandatory elements couldn't be removed
anymore due to a regression while fixing 2320. They can now be removed
again.
Version 24.0.0 "Beyond The Pale":
New features and enhancements
* mkvmerge: MP4 reader: improved the detection of edit lists consisting of two
identical entries, each spanning the file's duration as given in the movie
header atom. The second entry is ignored in such cases.
* mkvmerge: JSON identification: the "display unit" video track property is
now reported as `display_unit`. The JSON schema has been bumped to v11 for
this change.
* mkvmerge, mkvextract: AVC/h.264: empty NALUs will now be removed.
* mkvextract: VobSub extraction: empty SPU packets will now be dropped during
extraction as other tools such as MP4Box cannot handle them
correctly.
Bug fixes
* mkvmerge: E-AC-3 parser: fixed determining the number of channels for
streams that contain an AC-3 core with dependent E-AC-3 frames.
* mkvmerge: Matroska reader: fixed mkvmerge buffering the whole file if a
video track is multiplexed that consists of only one or a few frames.
* mkvmerge: the "display unit" video track property will now be kept if it is
set in the source file.
* MKVToolNix GUI: multiplexer: when scanning playlists, all playlists were
offered for selection regardless of the value of the "minimum playlist
duration" setting.
* MKVToolNix GUI: multiplexer: deriving track languages from file names: the
regular sub-expressions for ISO 639-1 codes could match on empty strings,
too, causing matches in wrong places and hence no language being recognized
in certain situations.
* MKVToolNix GUI: header editor: fixed a crash when saving the file fails
(e.g. because it isn't writable).
* MKVToolNix GUI: header editor: the editor was wrongfully claiming that
mandatory elements with default values cannot be removed in the "status"
text.
* MKVToolNix GUI: preferences: on macOS & Linux the setting "enable copying
tracks by their type" wasn't restored on program start.
Other changes
* Niels Lohmann's JSON library: the bundled version has been updated from
v1.1.0 (git revision 54d3cab) to v3.1.1 (git revision g183390c1).
* pugixml library: the bundled version has been updated from v1.8 to v1.9
Version 23.0.0 "The Bride Said No":
New features and enhancements
* mkvmerge: input: format detection uses file-extension to improve performance
and to give preference when several formats match.
* mkvmerge: AV1: added support for reading AV1 video from Open Bitstream Unit
files.
* mkvmerge: AV1: adjusted the code for the AV1 bitstream format changes made
up to 2018-05-02.
* mkvmerge: MP4 reader: if a track has an edit list with two identical
entries, each spanning the file's duration as given in the movie header
atom, then the second entry will now be ignored. Improves the handling of
files with bogus data.
* MKVToolNix GUI: multiplexer: added options to only enable tracks of certain
types by default.
* MKVToolNix GUI: multiplexer: added an option to enable dialog normalization
gain removal by default for all audio tracks for which the operation is
supported.
* MKVToolNix GUI: multiplexer: when deriving track languages from the file
names is active and the file name contains the usual season/episode pattern
(e.g. "S02E14"), then only the part after the season/episode pattern will be
used for detecting the language.
* MKVToolNix GUI: multiplexer: the regular expression used for deriving track
languages from the file names can now be customized in the preferences.
* MKVToolNix GUI: multiplexer: the user can now customize the list of track
languages the GUI recognizes in file names. This list defaults to a handful
of common languages instead of the full list of supported languages.
Version 22.0.0 "At The End Of The World"
New features and enhancements
* mkvmerge, MKVToolNix GUI multiplexer: AC-3, DTS, TrueHD: added an option for
removing/minimizing the dialog normalization gain for all supported types of
the mentioned codecs.
* mkvmerge: AV1: added support for reading AV1 video from IVF, WebM and
Matroska files.
* mkvmerge: FLAC: mkvmerge can now ignore ID3 tags in FLAC files which would
otherwise prevent mkvmerge from detecting the file type.
* mkvinfo: the size and positions of frames within "SimpleBlock" and
"BlockGroup" elements are now shown the same way they're shown for other
elements (by adding the `-v -v` and `-z` options).
* MKVToolNix GUI: multiplexer: added options for deriving the track languages
from the file name by searching for ISO 639-1/639-2 language codes or
language names enclosed in non-word, non-space characters (e.g. "…[ger]…"
for German or "…+en+…" for English).
* MKVToolNix GUI: info tool: implemented reading all elements in the file
after the first cluster. Only top-level elements are shown; child elements
are only loaded on demand.
* MKVToolNix GUI: info tool: added a context menu with the option to show a
hex dump of the element with the bytes making up the EBML ID and the size
portion highlighted in different colors. In-depth highlighting is done for
the data in `SimpleBlock` and `Block` elements.
* MKVToolNix GUI: chapter editor: added an option to remove all end timestamps
to the "additional modifications" dialog.
Bug fixes
* mkvmerge: MP4 reader: fixed reading the ESDS audio header atom if it is
located inside a "wave" atom inside the "stsd" atom.
* mkvmerge: MP4 reader: AAC audio tracks signalling eight channels in the
track headers but only seven in the codec-specific configuration will be
treated as having eight channels.
* mkvmerge: MPEG TS reader: fixed wrong handling of the continuity counter for
TS packets that signal that TS payload is present but where the adaptation
field spans the whole TS packet.
* mkvmerge: the 'document type version' and 'document type read version'
header fields are now set depending on which elements are actually written,
not on which features are active (e.g. if a `SimpleBlock` is never written,
then the 'read version' won't be set to 2 anymore).
* mkvmerge: the 'document type version' header field is now set to 4 correctly
if any of the version 4 Matroska elements is written.
* mkvinfo: summary mode: the file positions reported for frames in
`BlockGroup` elements did not take the bytes used for information such as
timestamp, track number flags or lace sizes into account. They were
therefore too low.
* mkvpropedit, MKVToolNix GUI header editor: the 'document type version' and
'document type read version' header fields are now updated if elements
written by the changes require higher version numbers.
* mkvpropedit, MKVToolNix GUI header editor: mandatory elements can now be
deleted if there's a default value for them in the specifications.
* source code: fixed a compilation error on FreeBSD with clang++ 5.0.
Build system changes
* A compilation database (in the form of a file `compile_commands.json`) can
be built automatically if the variable `BUILD_COMPILATION_DATABASE` is set
to `yes` (e.g. as `rake BUILD_COMPILATION_DATABASE=yes`).
Version 21.0.0 "Tardigrades Will Inherit The Earth"
New features and enhancements
* mkvmerge: track statistics tags: the TagDefault element will not be
written anymore as it was always set to the default value 1
anyway. Implements 2202.
* mkvmerge, MKVToolNix GUI: JSON files can now contain C++-style line comments
outside of strings (e.g. something like this: // this is ignored). Such
comments, even though not part of the official JSON specifications, are now
ignored when reading JSON files.
* MKVToolNix GUI: chapter editor: opening a Matroska file without chapters in
it will now open the file in an empty chapter editor instead of showing an
error message. Implements 2218.
* MKVToolNix GUI: an "info" tool has been added, replacing the functionality
of mkvinfo's GUI. The functionality is not on par yet but will be for
release v22. Implements most of the functionality of 2104.
Bug fixes
* build system: configure was treating --disable-ubsan and
--disable-addrsan the same as --enable-ubsan and
--enable-addrsan.
* build system: an error message is output if a command to execute is not
found instead of silently failing.
* build system: in addition to looking for the gettext C function and
library, configure now also verifies the presence of the msgfmt program
instead of simply relying on it.
* mkvmerge: appending files with additional parts at the same time was broken
if more than one additional part was appended (e.g. when appending files
from DVDs with something like '(' VTS_01_1.VOB VTS_01_2.VOB ')' + '('
VTS_02_1.VOB VTS_02_2.VOB ')'). In such a situation the content from files
VTS_02_1.VOB and VTS_02_2.VOB where laid out in parallel to the content
from the earlier files.
* mkvmerge: FLV reader: a single invalid AAC frame was written for AAC audio
tracks with codec initialization data longer than five bytes.
* mkvmerge: FLV reader: timestamps will be normalized down to 0.
* mkvmerge: MP4 reader: if an AAC track doesn't contain an AAC-specific
decoder configuration in the ESDS portion, then a default decoder
configuration will be generated based on the track's header data instead of
skipping the track.
* mkvmerge: MP4 reader: fixed reading HEVC/h.265 video tracks if they're
stored as Annex B byte streams inside MP4.
* mkvmerge: Ogg Opus reader: mkvmerge will now emit a warning instead of
aborting when it encounters an Ogg Opus page with no data in the
packet.
* mkvmerge, mkvextract: Matroska parser: fixed a segmentation fault that
occurred whenever the first level 1 element after resyncing after an error
in the file structure isn't a cluster.
* mkvmerge, MKVToolNix GUI multiplexer & header editor: fixed a crash during
--enable-addrsan.
* build system: an error message is output if a command to execute is not
* build system: an error message is output if a command to execute is not
found instead of silently failing.
* build system: in addition to looking for the gettext C function and
library, configure now also verifies the presence of the msgfmt program
instead of simply relying on it.
* mkvmerge: appending files with additional parts at the same time was broken
if more than one additional part was appended (e.g. when appending files
from DVDs with something like '(' VTS_01_1.VOB VTS_01_2.VOB ')' + '('
VTS_02_1.VOB VTS_02_2.VOB ')'). In such a situation the content from files
VTS_02_1.VOB and VTS_02_2.VOB where laid out in parallel to the content
from the earlier files.
* mkvmerge: FLV reader: a single invalid AAC frame was written for AAC audio
tracks with codec initialization data longer than five bytes.
* mkvmerge: FLV reader: timestamps will be normalized down to 0.
* mkvmerge: MP4 reader: if an AAC track doesn't contain an AAC-specific
decoder configuration in the ESDS portion, then a default decoder
configuration will be generated based on the track's header data instead of
skipping the track.
* mkvmerge: MP4 reader: fixed reading HEVC/h.265 video tracks if they're
stored as Annex B byte streams inside MP4.
* mkvmerge: Ogg Opus reader: mkvmerge will now emit a warning instead of
aborting when it encounters an Ogg Opus page with no data in the
packet.
* mkvmerge, mkvextract: Matroska parser: fixed a segmentation fault that
occurred whenever the first level 1 element after resyncing after an error
in the file structure isn't a cluster.
* mkvmerge, MKVToolNix GUI multiplexer & header editor: fixed a crash during
file type detection for attachments if MKVToolNix is installed in a path
with non-ASCII characters (e.g. German Umlauts).
* mkvinfo: the --hex-positions parameter did nothing in summary mode.
* mkvinfo: Windows: line endings will be written as \r\n (carriage return &
line feed) again instead of just \n (line feed).
* mkvpropedit: adding track statistics tags: for tracks with content encoding
(compression) mkvpropedit is now accounting the uncompressed number of
bytes, not the encoded (compressed) number of bytes.
* MKVToolNix GUI: multiplexer: the subtitle character set can now be set for
appended subtitle files, too.
* MKVToolNix GUI: multiplexer: when appending, all tracks appended to disabled
tracks will start out disabled, too.
Build system changes
* mkvinfo: the GUI portion has been removed. mkvinfo is now a pure
command-line program again.
Version 20.0.0 "I Am The Sun":
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.
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.
* 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.
* 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.
* 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.
* 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.
* 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.
* 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.
* 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.
* MKVToolNix GUI: update check dialog: Markdown links will now be converted to
clickable links.
* build system: fixed a race condition when creating new directories if rake
is run with -jN in newer versions of Ruby/rake.
Build system changes
* [cmark](https://github.com/commonmark/cmark), the CommonMark parsing and
rendering library in C, is now required when building the GUIs.
Version 18.0.0 "Apricity" 2017-11-18
New features and enhancements
* build system: when building with clang v3.8.0 or newer, `configure` will no
longer restrict optimization flags to `-O1` and use `-O3` again (older
versions of clang suffered from excessive memory usage with higher
optimization levels).
* build system: when building with mingw 7.2.0 or newer, `configure` will no
longer restrict optimization flags to `-O2` and use `-O3` again (older
versions of mingw suffered from bugs such as segmentation faults with higher
optimization levels).
* build system: stack protection is enabled when building with clang 3.5.0 or
newer on all platforms.
* mkvmerge: AVC & HEVC ES parsers: performance improvements by copying much
less memory around.
* mkvmerge: tags: reintroduced a workaround for non-compliant files with tags
that do not contain the mandatory `SimpleTag` element. This workaround was
removed during code refactoring in release v15.0.0.
* GUI: multiplexer: the "AAC is SBR/HE-AAC/AAC+" checkbox in the "audio
properties" section will be disabled if the functionality is not implemented
for the selected track's codec & container.
* GUI: multiplexer: the "reduce to core" checkbox in the "audio properties"
section will be disabled if the functionality is not implemented for the
selected track's codec.
Bug fixes
* mkvmerge: AAC ADTS parser: fixed interpretation of the
`channel_configuration` header element for ADTS files that do not contain a
program configuration element: value 7 means 7.1 channels.
* mkvmerge: Matroska identification: the `date_local` and `date_utc`
attributes will only be output if the identified Matroska file actually
contains the "date" header field.
* mkvmerge: WebVTT: mkvmerge did not recognize timestamp lines if the hours
components were absent.
* mkvpropedit, GUI's header editor: the `date` header field won't be added
automatically anymore whenever the segment info section is edited and the
`date` element is either deleted or not present in the first place.
Version 17.0.0 "Be Ur Friend":
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.
* 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.
* 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`).
* 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.
Version 16.0.0 "Protest":
New features and enhancements
* mkvmerge: MP4 reader: added support for Vorbis.
Bug fixes
* configure: the checks for libEBML and libMatroska have been fixed to require
libEBML 1.3.5 and libMatroska 1.4.7 as intended.
* mkvmerge: AAC reader: mkvmerge will now emit an error message for AAC files
whose header fields imply a sampling frequency or number of channels
of 0.
* mkvmerge: AVC/h.264 ES parser: fixed the calculation of reference
information for P and B frames. This also fixes some P frames being marked
as B frames and vice versa.
* mkvmerge: AVC/h.264 ES parser: only non-key frames that have the NALU header
field `nal_ref_idc` set to 0 will be marked as "discardable" in
`SimpleBlock` elements.
* mkvmerge: HEVC/h.265: the generation of the HEVCC structure stored in
`CodecPrivate` was wrong in two places: 1. the position of the number of
sub-layers was swapped with reserved bits and 2. the VPS/SPS/PPS/SEI lists
did not start with a reserved 1 bit.
* mkvmerge: output: the `doc type version` will be set at least to 2 if
certain elements are written (`CodecState`, `CueCodecState`,
`FlagInterlaced`).
* mkvmerge: output: the track header attributes `MinCache` and `MaxCache` will not be
written anymore.
* mkvmerge: Matroska reader: the "key" and "discardable" flags of SimpleBlock
elements will be kept as they are.
* mkvmerge: Matroska reader: if present in the file, the "white colour
coordinate x" track header attribute was written to both "white colour
coordinate x" and "white colour coordinate y" in the output file.
* mkvmerge: Opus output: mkvmerge will now put all frames with discard padding
into their own block group.
* MKVToolNix GUI: header editor: removed the check for external modification
when saving the file.
* MKVToolNix GUI: job queue: fixed calculation of total progress when
automatic removal of completed is enabled.
Version 15.0.0 "Duel with the Devil":
Important notes
* mkvmerge, mkvpropedit, GUI's header and chapter editors: the programs will
no longer add most missing Matroska elements that are mandatory but have a
default value in the Matroska specification (e.g. the `TagLanguage` element
with a value of `und` if it isn't present in its `SimpleTag` parent). Due to
this change libEBML v1.3.5 is now required.
New features and enhancements
* MKVToolNix GUI: multiplex tool: added a new entry to the "source files"
context menu labeled "Set destination file name from selected file's
name". It will force the GUI to consider the selected file to be the
reference for automatically setting the file name, no matter which file was
originally added as the first file. It will also force setting the
destination file name once if automatic destination file name generation is
turned off in the preferences. Implements part of 2058.
* MKVToolNix GUI: multiplex tool: added an option in the preferences on
"Multiplexer" → "Output" labeled "Only use the first source file that
contains a video track". If enabled, only source files containing video
tracks will be used for setting the destination file name. Other files that
are added are ignore. Implements the rest of 2058.
* MKVToolNix GUI: header editor: added support for editing the video colour
attributes. Implements the second half of 2038.
* MKVToolNix GUI: header editor: added support for the "video projection"
track header attributes. Part of the implementation of 2064.
* MKVToolNix GUI: job queue: selected jobs can now be move up and down by
pressing the `Ctrl+Up` and `Ctrl+Down` keys. Additionally, push buttons to
move them up & down are shown if the corresponding option is enabled in the
preferences. Implements 2060.
* mkvmerge: added support for the "video projection" track header
attributes. Part of the implementation of 2064.
* mkvinfo: added support for the "video projection" track header
attributes. Part of the implementation of 2064.
* mkvpropedit: added support for editing the video colour
attributes. Implements one half of 2038.
* mkvpropedit: added support for the "video projection" track header
attributes. Part of the implementation of 2064.
Bug fixes
* all: selecting the program's language (e.g. via the `--ui-language`
command-line option or via the GUI's preferences) did not work on Linux &
Unix if the `LANGUAGE` environment variable was set and didn't include the
desired language. Fixes 2070.
* MKVToolNix GUI: removed the keyboard shortcuts for switching between the
different tools (e.g. `Ctrl+Alt+1` for the multiplexer). They overlapped
with basic functionality on keyboards that use an `AltGr` key, e.g. German
ones, where `AltGr+7` emits `{`. As `AltGr+key` is implemented as
`Ctrl+Alt+key` under the hood, this means that `AltGr+7` is really
`Ctrl+Alt+7` which the GUI now took to mean "switch to the job queue"
instead of "insert `{`". Fixes 2056.
* MKVToolNix GUI: header editor: after saving the file the GUI wasn't updating
its internal file modification timestamp. That lead to the GUI wrongfully
claiming that the file had been modified externally when the user wanted to
save the file once more, requiring a reload of the file losing all
modifications made since saving the first time.
* mkvmerge: DTS handling: some source files provide timestamps for audio
tracks only once every `n` audio frames. In such situations mkvmerge was
buffering too much data resulting in a single gap in the timestamps of one
frame duration after frame number `n - 1` (the second audio timestamp read
from the source file was used one output frame too early). Fixes 2071.
* mkvinfo: fixed a null pointer dereference if an `EbmlBinary` element's data
pointer is a null pointer. Fixes 2072.
Build system changes
* configure: added option `--disable-update-check`. If given, the code
checking online for available updates will be disabled. The update check is
enabled and included in the GUI by default.
* libEBML v1.3.5 is now required.
Other changes
* mkvmerge: the option `--colour-matrix` has been renamed to
`--colour-matrix-coefficients` in order to match the specification more
closely. The old option name will continue to be recognized as well.