Moritz Bunkus - ( Open Source)
MKVToolNix is a handy and powerful set of tools for easily creating and working with Matroska (.MKV) files.
MKVtoolnix is a handy application that helps you to work with Matroska - a multimedia container that allows to unite in a single file video, audio and subtitle tracks, taking the concept of mkvextract GUI but empowered with some additional features. The application lets you extract the audio, video and subtitles of MKV container, mix new audio tracks, videos or subtitles, convert videos and audios to Matroska (MKV) format, offering the possibility to choose the default audio or add more, and the same with subtitle tracks. In addition, you can retouch MKVToolnix quality and appearance of the video. MKVToolnix supports the many formats such as for video: 264, AVC, H.264, AVI, DRC, MP4, MPG, MPEG, M1V, M2V, EVO, MKV, OGG, MOV, RA, RAM, RMVB, VC1; audio: AC3, AAC, M4A, MP4, DTS, FLAC, OGG, MP2, MP3, MKA, TTA, WAV, WV and subtitles: SRT, ASS, SSA, USF, XML, IDX.
# New features and enhancements:
- GUI: chapter editor: added a character set selection in the preferences for text files. If a character set is selected there, it will be used instead of asking the user when opening text chapter files.
- GUI: multiplexer: added a column "character set" to the "tracks, chapters and tags" list view showing the currently selected character set for that track.
- mkvmerge: added an engage option "all_i_slices_are_key_frames" for treating all I slices of an h.264/AVC stream as key frames in pathological streams that lack real key frames.
- GUI: running programs after jobs: added a new variable <MTX_INSTALLATION_DIRECTORY> for the directory the MKVToolNix GUI executable is located in.
- mkvmerge: DVB subtitle tracks whose CodecPrivate data is only four bytes long will now be fixed up to the proper five bytes by adding the subtitling type byte.
- mkvmerge: MP4 reader: "ctts" version 1 atoms are now supported.
# Bug fixes
- mkvmerge: AC-3 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).
- mkvmerge: MP4 reader: mkvmerge was only reading a small part of MP4 DASH files where the first "moov" "mdat" atoms occur before the first "moof" atom.
- mkvmerge: MP4 reader: edit list ("edts" atoms) that are part of the "moof" atoms used in MP4 DASH files werent parsed. Instead the edit lists from the main track headers inside the "moov" atom were used.
- mkvmerge: MP4 reader: when an MP4 DASH file contained both normal chunk offset table ("stco"/"co64" atoms) in their regular "moov" atoms, a sample-to-chunk table ("stsc" atom) whose last entry had a "samples per chunk" count greater than 1 and DASH "trun" atoms, then mkvmerge was calculating wrong positions the frame content.
- mkvmerge: MP4 reader: mkvmerge couldnt deal with the key frame index table having duplicate entries. The result was that only key frames up to and including the first duplicate entry were marked as key frames in the output file. All other frames werent, even though some of them were referenced from the key frame table after the first duplicate entry.
- mkvmerge: MP4 reader: when an MP4 file contained more than one copy of the "moov" atom (the track headers etc.), mkvmerge was parsing them all adding tracks multiple times.
- mkvmerge: MP4 reader: fixed an integer overflow during the timestamp calculation leading to files with wrong timestamps. Such files could not be played back properly by most players.
- mkvmerge: MPEG TS reader: if the PMT lists a DVBSUB track, mkvmerge will now recognize it without having to find a packet for it within the probed range.
- mkvmerge: splitting by parts (both the "timestamps" and the "frames" variants): fixed the calculation of track statistics tags. When calculating the duration the skipped portions werent taken into account leading to a too-high duration. As a consequence the BPS tag (bits per second) was wrong, too.
- mkvmerge: reading files with DVB/HDMV TextSV subtitle tracks with invalid CodecPrivate caused mkvmerge to abort with an error from boost::format about the format string not having enough arguments.
- mkvmerge: fixed misdetection of certain AC-3 files as MP3 files which led to an error message that "the demultiplexer could not be initialized".
- mkvmerge: fixed huge memory consumption when appending big Matroska files with sparse tracks (e.g. forced subtitle tracks). The Matroska reader will now queue at most 128 MB of data.
- mkvmerge: MP4 reader: the timestamps of all multiplexed tracks will now be 0-based properly.
- mkvmerge: MP4 reader: the DTS-to-PTS offsets given by the "ctts" atoms are now applied for all tracks containing a "ctts" atom, not just h.264 & h.265 tracks.
# Build system changes
- Up to and including release 9.8.0 the man pages and their translations came pre-built and bundled with the source code. Those pre-built files have now been removed and must be built during the build process. Therefore the tool "xsltproc" and the DocBook XSL stylesheets for man pages are now required dependencies. Additionally the tool "po4a" must be installed for the translated man pages to be built and installed, though this is optional. In order to facilitate finding the new requirements new options have been added to confiure: "with-xsltproc=prog", "with-docbook-xsl-root=dir", "with-po4a=prog" and "with-po4a-translate=prog.
- pugixml detection will be attempted via "pkg-config" first. If that fails, "configure" will fall back to the previous method of trying just to compile and link a test program with the standard include and library locations.