2019-01-04 12:35:06 +00:00
|
|
|
|
MKVToolNix 30.0.0
|
2018-01-15 17:55:01 +00:00
|
|
|
|
=================
|
2003-03-04 19:09:59 +00:00
|
|
|
|
|
2015-03-27 21:02:37 +00:00
|
|
|
|
# Table of contents
|
2010-04-14 08:06:25 +00:00
|
|
|
|
|
2017-01-18 09:45:15 +00:00
|
|
|
|
1. [Introduction](#1-introduction)
|
|
|
|
|
2. [Installation](#2-installation)
|
2018-11-20 10:34:52 +00:00
|
|
|
|
1. [Requirements](#21-requirements)
|
|
|
|
|
1. [Hard requirements](#211-hard-requirements)
|
|
|
|
|
2. [Requirements with bundled fallbacks](#212-requirements-with-bundled-fallbacks)
|
|
|
|
|
2. [Optional components](#22-optional-components)
|
|
|
|
|
3. [Building libEBML and libMatroska](#23-building-libebml-and-libmatroska)
|
|
|
|
|
4. [Building MKVToolNix](#24-building-mkvtoolnix)
|
|
|
|
|
1. [Getting and building a development snapshot](#241-getting-and-building-a-development-snapshot)
|
|
|
|
|
2. [Configuration and compilation](#242-configuration-and-compilation)
|
|
|
|
|
5. [Notes for compilation on (Open)Solaris](#25-notes-for-compilation-on-opensolaris)
|
|
|
|
|
6. [Unit tests](#26-unit-tests)
|
2017-01-18 09:45:15 +00:00
|
|
|
|
3. [Reporting bugs](#3-reporting-bugs)
|
|
|
|
|
4. [Test suite and continuous integration tests](#4-test-suite-and-continuous-integration-tests)
|
2017-11-18 14:52:20 +00:00
|
|
|
|
5. [Code of Conduct](#5-code-of-conduct)
|
2018-11-20 10:34:52 +00:00
|
|
|
|
6. [Included third-party components and their licenses](#6-included-third-party-components-and-their-licenses)
|
|
|
|
|
1. [avilib](#61-avilib)
|
|
|
|
|
2. [Boost's utf8_codecvt_facet](#62-boosts-utf8_codecvt_facet)
|
|
|
|
|
3. [libEBML](#63-libebml)
|
|
|
|
|
4. [libMatroska](#64-libmatroska)
|
|
|
|
|
5. [librmff](#65-librmff)
|
|
|
|
|
6. [nlohmann's JSON](#66-nlohmanns-json)
|
|
|
|
|
7. [pugixml](#67-pugixml)
|
|
|
|
|
8. [utf8-cpp](#68-utf8-cpp)
|
|
|
|
|
9. [Oxygen icons and sound files](#69-oxygen-icons-and-sound-files)
|
|
|
|
|
10. [MKVToolNix icons](#610-mkvtoolnix-icons)
|
|
|
|
|
11. [QtWaitingSpinner](#611-qtwaitingspinner)
|
|
|
|
|
12. [Fancy tab widget](#612-fancy-tab-widget)
|
|
|
|
|
13. [fmt](#613-fmt)
|
2010-04-14 08:06:25 +00:00
|
|
|
|
|
2015-03-27 21:02:37 +00:00
|
|
|
|
-----------------
|
2010-04-14 08:06:25 +00:00
|
|
|
|
|
2015-03-27 21:02:37 +00:00
|
|
|
|
# 1. Introduction
|
2010-04-14 08:06:25 +00:00
|
|
|
|
|
Update README.md
In order to make the text more beautiful and easier to read/understand for readers, I have added the following changes:
1. Added the word **via** before the product names in brackets → (**via** mkvinfo), (**via** mkvextract), (**via** mkvmerge). The word **via** clearly indicates that these tools are meant to be used for something, and they are not lonely.
2. Added many missing commas, inter alia:
a) before the word **then**. In English we (almost) always add a comma before **then** if it is located in the middle of a sentence. The word **then** is often seen in English conditional sentences, but in 99% cases it's optional, so we can use a subject directly (see also: http://images.slideplayer.com/28/9327486/slides/slide_3.jpg)
For more information about **then** and English conditional sentences, you can visit the following websites:
• https://en.wikipedia.org/wiki/English_conditional_sentences
• https://en.wikipedia.org/wiki/Conditional_sentence
b) before a subject (e.g. **I**, **you**) if it is located in the middle of a sentence. For example: **If you want to install it yourself, I suggest you use..........** In such cases we always add a comma in order to emphasize the difference between two sentences (two subjects); in the first one: **you** and in the second one: **I**. Thanks to the comma we can easily distinguish them when reading the text.
c) before an (ad)verb if a sentence starts with **If**. For example: **If at all possible, please include.......**. In this case I have added the comma in order to separate an adjective (**possible**) and an (ad)verb (**please**). And also before the adverb **there** which is located in the middle of a sentence and before a noun (**development**). For example: **As both Matroska and MKVToolNix are under heavy development, there might be features......**.
3. Removed one unnecessary comma which was located before **if** (when the **if-clause** is at the end) → **e.g. include the command line, if you use Windows or Linux etc.pp.** In English we don't generally add a comma if the word **if** is located in the middle of a sentence. See here for rationale: http://images.slideplayer.com/11/3193271/slides/slide_4.jpg and also above for the English Wikipedia (conditional sentences).
2016-12-27 18:49:34 +00:00
|
|
|
|
With these tools one can get information about (via mkvinfo) Matroska
|
|
|
|
|
files, extract tracks/data from (via mkvextract) Matroska files and create
|
|
|
|
|
(via mkvmerge) Matroska files from other media files. Matroska is a new
|
2003-09-11 17:09:10 +00:00
|
|
|
|
multimedia file format aiming to become THE new container format for
|
|
|
|
|
the future. You can find more information about it and its underlying
|
|
|
|
|
technology, the Extensible Binary Meta Language (EBML), at
|
2003-03-04 19:09:59 +00:00
|
|
|
|
|
|
|
|
|
http://www.matroska.org/
|
|
|
|
|
|
|
|
|
|
The full documentation for each command is now maintained in its
|
2014-08-21 01:11:10 +00:00
|
|
|
|
man page only. Type `mkvmerge -h` to get you started.
|
2003-03-04 19:09:59 +00:00
|
|
|
|
|
2014-11-15 16:01:58 +00:00
|
|
|
|
This code comes under the GPL v2 (see www.gnu.org or the file COPYING).
|
2003-03-04 19:09:59 +00:00
|
|
|
|
Modify as needed.
|
|
|
|
|
|
2012-03-15 21:36:05 +00:00
|
|
|
|
The icons are based on the work of Alexandr Grigorcea and modified by
|
2015-03-27 21:02:37 +00:00
|
|
|
|
Eduard Geier. They're licensed under the terms of the
|
|
|
|
|
[Creative Commons Attribution 3.0 Unported license](http://creativecommons.org/licenses/by/3.0/).
|
2011-12-04 15:44:16 +00:00
|
|
|
|
|
2003-03-04 19:09:59 +00:00
|
|
|
|
The newest version can always be found at
|
2015-11-22 10:13:59 +00:00
|
|
|
|
https://mkvtoolnix.download/
|
2003-03-04 19:09:59 +00:00
|
|
|
|
|
|
|
|
|
Moritz Bunkus <moritz@bunkus.org>
|
|
|
|
|
|
2010-04-14 08:06:25 +00:00
|
|
|
|
|
2015-03-27 21:02:37 +00:00
|
|
|
|
# 2. Installation
|
2003-04-11 13:42:27 +00:00
|
|
|
|
|
2016-12-27 19:58:31 +00:00
|
|
|
|
If you want to compile the tools yourself, you must first decide
|
2005-08-25 08:05:07 +00:00
|
|
|
|
if you want to use a 'proper' release version or the current
|
|
|
|
|
development version. As both Matroska and MKVToolNix are under heavy
|
Update README.md
In order to make the text more beautiful and easier to read/understand for readers, I have added the following changes:
1. Added the word **via** before the product names in brackets → (**via** mkvinfo), (**via** mkvextract), (**via** mkvmerge). The word **via** clearly indicates that these tools are meant to be used for something, and they are not lonely.
2. Added many missing commas, inter alia:
a) before the word **then**. In English we (almost) always add a comma before **then** if it is located in the middle of a sentence. The word **then** is often seen in English conditional sentences, but in 99% cases it's optional, so we can use a subject directly (see also: http://images.slideplayer.com/28/9327486/slides/slide_3.jpg)
For more information about **then** and English conditional sentences, you can visit the following websites:
• https://en.wikipedia.org/wiki/English_conditional_sentences
• https://en.wikipedia.org/wiki/Conditional_sentence
b) before a subject (e.g. **I**, **you**) if it is located in the middle of a sentence. For example: **If you want to install it yourself, I suggest you use..........** In such cases we always add a comma in order to emphasize the difference between two sentences (two subjects); in the first one: **you** and in the second one: **I**. Thanks to the comma we can easily distinguish them when reading the text.
c) before an (ad)verb if a sentence starts with **If**. For example: **If at all possible, please include.......**. In this case I have added the comma in order to separate an adjective (**possible**) and an (ad)verb (**please**). And also before the adverb **there** which is located in the middle of a sentence and before a noun (**development**). For example: **As both Matroska and MKVToolNix are under heavy development, there might be features......**.
3. Removed one unnecessary comma which was located before **if** (when the **if-clause** is at the end) → **e.g. include the command line, if you use Windows or Linux etc.pp.** In English we don't generally add a comma if the word **if** is located in the middle of a sentence. See here for rationale: http://images.slideplayer.com/11/3193271/slides/slide_4.jpg and also above for the English Wikipedia (conditional sentences).
2016-12-27 18:49:34 +00:00
|
|
|
|
development, there might be features available in the git repository
|
2014-09-01 12:55:53 +00:00
|
|
|
|
that are not available in the releases. On the other hand the git
|
|
|
|
|
repository version might not even compile.
|
2005-08-25 08:05:07 +00:00
|
|
|
|
|
2015-03-27 21:02:37 +00:00
|
|
|
|
## 2.1. Requirements
|
2005-08-25 08:05:07 +00:00
|
|
|
|
|
2018-11-20 10:34:52 +00:00
|
|
|
|
### 2.1.1. Hard requirements
|
|
|
|
|
|
Update README.md
In order to make the text more beautiful and easier to read/understand for readers, I have added the following changes:
1. Added the word **via** before the product names in brackets → (**via** mkvinfo), (**via** mkvextract), (**via** mkvmerge). The word **via** clearly indicates that these tools are meant to be used for something, and they are not lonely.
2. Added many missing commas, inter alia:
a) before the word **then**. In English we (almost) always add a comma before **then** if it is located in the middle of a sentence. The word **then** is often seen in English conditional sentences, but in 99% cases it's optional, so we can use a subject directly (see also: http://images.slideplayer.com/28/9327486/slides/slide_3.jpg)
For more information about **then** and English conditional sentences, you can visit the following websites:
• https://en.wikipedia.org/wiki/English_conditional_sentences
• https://en.wikipedia.org/wiki/Conditional_sentence
b) before a subject (e.g. **I**, **you**) if it is located in the middle of a sentence. For example: **If you want to install it yourself, I suggest you use..........** In such cases we always add a comma in order to emphasize the difference between two sentences (two subjects); in the first one: **you** and in the second one: **I**. Thanks to the comma we can easily distinguish them when reading the text.
c) before an (ad)verb if a sentence starts with **If**. For example: **If at all possible, please include.......**. In this case I have added the comma in order to separate an adjective (**possible**) and an (ad)verb (**please**). And also before the adverb **there** which is located in the middle of a sentence and before a noun (**development**). For example: **As both Matroska and MKVToolNix are under heavy development, there might be features......**.
3. Removed one unnecessary comma which was located before **if** (when the **if-clause** is at the end) → **e.g. include the command line, if you use Windows or Linux etc.pp.** In English we don't generally add a comma if the word **if** is located in the middle of a sentence. See here for rationale: http://images.slideplayer.com/11/3193271/slides/slide_4.jpg and also above for the English Wikipedia (conditional sentences).
2016-12-27 18:49:34 +00:00
|
|
|
|
In order to compile MKVToolNix, you need a couple of libraries. Most of
|
2005-08-25 08:05:07 +00:00
|
|
|
|
them should be available pre-compiled for your distribution. The
|
2011-10-23 19:06:28 +00:00
|
|
|
|
programs and libraries you absolutely need are:
|
|
|
|
|
|
2016-12-13 21:37:14 +00:00
|
|
|
|
- A C++ compiler that supports several features of the C++11 and C++14
|
2017-04-30 09:48:42 +00:00
|
|
|
|
standards: initializer lists, range-based `for` loops, right angle
|
2018-04-20 18:03:57 +00:00
|
|
|
|
brackets, the `auto` keyword, lambda functions, the `nullptr`
|
|
|
|
|
keyword, tuples, alias declarations, `std::make_unique()`, digit
|
|
|
|
|
separators, binary literals, generic lambdas, user-defined literals
|
|
|
|
|
for `std::string`. Others may be needed, too. For GCC this means at
|
|
|
|
|
least v5.x; for clang v3.4 or later.
|
2005-08-25 08:05:07 +00:00
|
|
|
|
|
2015-03-27 14:37:19 +00:00
|
|
|
|
- [libOgg](http://downloads.xiph.org/releases/ogg/) and
|
|
|
|
|
[libVorbis](http://downloads.xiph.org/releases/vorbis/) for access to Ogg/OGM
|
2005-08-25 08:05:07 +00:00
|
|
|
|
files and Vorbis support
|
2011-10-23 19:06:28 +00:00
|
|
|
|
|
2016-07-03 20:06:52 +00:00
|
|
|
|
- [zlib](http://www.zlib.net/) — a compression library
|
2011-10-23 19:06:28 +00:00
|
|
|
|
|
2016-07-03 20:06:52 +00:00
|
|
|
|
- [Boost](http://www.boost.org/) — Several of Boost's libraries are
|
2018-11-20 10:34:52 +00:00
|
|
|
|
used: `RegEx`, `filesystem`, `system`, `math`, `Range`, `rational`,
|
|
|
|
|
`variant`. At least v1.49.0 is required.
|
2010-08-01 09:43:08 +00:00
|
|
|
|
|
2017-01-25 20:06:37 +00:00
|
|
|
|
- [libxslt's xsltproc binary](http://xmlsoft.org/libxslt/) and
|
|
|
|
|
[DocBook XSL stylesheets](https://sourceforge.net/projects/docbook/files/docbook-xsl/)
|
|
|
|
|
— for creating man pages from XML documents
|
|
|
|
|
|
2017-01-08 20:04:51 +00:00
|
|
|
|
You also need the `rake` or `drake` build program. I suggest `rake`
|
|
|
|
|
v10.0.0 or newer (this is included with Ruby 2.1) as it offers
|
|
|
|
|
parallel builds out of the box. If you only have an earlier version of
|
2017-04-30 09:48:42 +00:00
|
|
|
|
`rake`, you can install and use the `drake` gem for the same gain.
|
2010-04-14 08:06:25 +00:00
|
|
|
|
|
2018-11-20 10:34:52 +00:00
|
|
|
|
### 2.1.2. Requirements with bundled fallbacks
|
|
|
|
|
|
|
|
|
|
Several required libraries might not be available for your
|
|
|
|
|
distribution. Therefore they're bundled with the MKVToolNix source
|
|
|
|
|
code. The `configure` script will look for those libraries and use
|
|
|
|
|
existing versions if present. If not, the bundled versions are used
|
|
|
|
|
instead.
|
|
|
|
|
|
|
|
|
|
It is highly recommended to install the versions provided by your
|
|
|
|
|
distribution instead of relying on the bundled versions.
|
|
|
|
|
|
|
|
|
|
These libraries are:
|
|
|
|
|
|
|
|
|
|
- [fmt](http://fmtlib.net/) — a small, safe and fast formatting
|
|
|
|
|
library. Version 3 or later is required.
|
|
|
|
|
|
|
|
|
|
- [libEBML v1.3.5](http://dl.matroska.org/downloads/libebml/) or later
|
|
|
|
|
and [libMatroska v1.4.8](http://dl.matroska.org/downloads/libmatroska/)
|
|
|
|
|
or later for low-level access to Matroska files. Instructions on how to
|
|
|
|
|
compile them are a bit further down in this file.
|
|
|
|
|
|
|
|
|
|
- [librmff](https://www.bunkus.org/videotools/librmff/index.html) — a
|
|
|
|
|
library for accessing RealMedia files
|
|
|
|
|
|
|
|
|
|
- [nlohmann's JSON](https://github.com/nlohmann/json) — JSON for
|
|
|
|
|
Modern C++
|
|
|
|
|
|
|
|
|
|
- [pugixml](http://pugixml.org/) — light-weight, simple and fast XML
|
|
|
|
|
parser for C++ with XPath support
|
|
|
|
|
|
|
|
|
|
- [utf8-cpp](http://utfcpp.sourceforge.net/) — UTF-8 with C++ in a
|
|
|
|
|
Portable Way
|
|
|
|
|
|
2015-03-27 21:02:37 +00:00
|
|
|
|
## 2.2. Optional components
|
2005-08-25 08:05:07 +00:00
|
|
|
|
|
|
|
|
|
Other libraries are optional and only limit the features that are
|
|
|
|
|
built. These include:
|
|
|
|
|
|
2016-12-20 18:17:13 +00:00
|
|
|
|
- [Qt](http://www.qt.io/) v5.3 or newer — a cross-platform GUI
|
2018-03-29 10:44:44 +00:00
|
|
|
|
toolkit. You need this if you want to use the MKVToolNix GUI.
|
2015-07-13 17:36:53 +00:00
|
|
|
|
|
2018-01-01 13:31:36 +00:00
|
|
|
|
- [cmark](https://github.com/commonmark/cmark) — the CommonMark
|
|
|
|
|
parsing and rendering library in C is required when building the Qt
|
|
|
|
|
GUIs.
|
|
|
|
|
|
2015-03-27 14:37:19 +00:00
|
|
|
|
- [libFLAC](http://downloads.xiph.org/releases/flac/) for FLAC
|
2005-08-25 08:05:07 +00:00
|
|
|
|
support (Free Lossless Audio Codec)
|
2011-10-23 19:06:28 +00:00
|
|
|
|
|
2015-03-27 21:02:37 +00:00
|
|
|
|
- [lzo](http://www.oberhumer.com/opensource/lzo/) and
|
|
|
|
|
[bzip2](http://www.bzip.org/) are compression libraries. These are
|
|
|
|
|
the least important libraries as almost no application supports
|
|
|
|
|
Matroska content that is compressed with either of these libs. The
|
2005-08-25 08:05:07 +00:00
|
|
|
|
aforementioned zlib is what every program supports.
|
2011-10-23 19:06:28 +00:00
|
|
|
|
|
2015-03-27 14:37:19 +00:00
|
|
|
|
- [libMagic](http://www.darwinsys.com/file/) from the "file" package
|
2008-09-28 17:22:35 +00:00
|
|
|
|
for automatic content type detection
|
2011-10-23 19:06:28 +00:00
|
|
|
|
|
2017-01-25 20:06:37 +00:00
|
|
|
|
- [po4a](https://po4a.alioth.debian.org/) for building the translated
|
|
|
|
|
man pages
|
|
|
|
|
|
2015-03-27 21:02:37 +00:00
|
|
|
|
## 2.3. Building libEBML and libMatroska
|
2005-08-25 08:05:07 +00:00
|
|
|
|
|
2011-10-23 19:06:28 +00:00
|
|
|
|
This is optional as MKVToolNix comes with its own set of the
|
|
|
|
|
libraries. It will use them if no version is found on the system.
|
|
|
|
|
|
2018-05-17 21:59:52 +00:00
|
|
|
|
Start by either downloading releases of [libEBML
|
|
|
|
|
v1.3.5](http://dl.matroska.org/downloads/libebml/) and [libMatroska
|
|
|
|
|
v1.4.8](http://dl.matroska.org/downloads/libmatroska/) or by getting
|
|
|
|
|
fresh copies from their git repositories:
|
2005-08-25 08:05:07 +00:00
|
|
|
|
|
2014-09-01 12:55:53 +00:00
|
|
|
|
git clone https://github.com/Matroska-Org/libebml.git
|
|
|
|
|
git clone https://github.com/Matroska-Org/libmatroska.git
|
2005-08-25 08:05:07 +00:00
|
|
|
|
|
2018-05-17 21:59:52 +00:00
|
|
|
|
First build and install libEBML according to the included
|
|
|
|
|
instructions. Afterwards do the same for libMatroska.
|
2007-07-01 18:45:23 +00:00
|
|
|
|
|
2015-11-26 07:30:54 +00:00
|
|
|
|
## 2.4. Building MKVToolNix
|
2007-07-01 18:45:23 +00:00
|
|
|
|
|
2015-03-27 21:02:37 +00:00
|
|
|
|
Either download the current release from
|
2015-11-22 10:13:59 +00:00
|
|
|
|
[the MKVToolNix home page](https://mkvtoolnix.download/)
|
2015-03-27 21:02:37 +00:00
|
|
|
|
and unpack it or get a development snapshot from my Git repository.
|
2005-08-25 08:05:07 +00:00
|
|
|
|
|
2015-03-27 21:02:37 +00:00
|
|
|
|
### 2.4.1. Getting and building a development snapshot
|
2005-08-25 08:05:07 +00:00
|
|
|
|
|
2015-03-27 21:02:37 +00:00
|
|
|
|
You can ignore this subsection if you want to build from a release
|
|
|
|
|
tarball.
|
2005-08-25 08:05:07 +00:00
|
|
|
|
|
2015-03-27 21:02:37 +00:00
|
|
|
|
All you need for Git repository access is to download a Git client
|
|
|
|
|
from the Git homepage at http://git-scm.com/. There are clients
|
|
|
|
|
for both Unix/Linux and Windows.
|
2005-08-25 08:05:07 +00:00
|
|
|
|
|
2015-03-27 21:02:37 +00:00
|
|
|
|
First clone my Git repository with this command:
|
2005-08-25 08:05:07 +00:00
|
|
|
|
|
2017-12-16 16:27:02 +00:00
|
|
|
|
git clone https://gitlab.com/mbunkus/mkvtoolnix.git
|
2009-03-04 09:53:09 +00:00
|
|
|
|
|
2015-11-26 07:30:54 +00:00
|
|
|
|
Now change to the MKVToolNix directory with `cd mkvtoolnix` and run
|
2015-03-27 21:02:37 +00:00
|
|
|
|
`./autogen.sh` which will generate the "configure" script. You need
|
|
|
|
|
the GNU "autoconf" utility for this step.
|
2009-03-04 09:53:09 +00:00
|
|
|
|
|
2015-03-27 21:02:37 +00:00
|
|
|
|
### 2.4.2. Configuration and compilation
|
2005-08-25 08:05:07 +00:00
|
|
|
|
|
Update README.md
In order to make the text more beautiful and easier to read/understand for readers, I have added the following changes:
1. Added the word **via** before the product names in brackets → (**via** mkvinfo), (**via** mkvextract), (**via** mkvmerge). The word **via** clearly indicates that these tools are meant to be used for something, and they are not lonely.
2. Added many missing commas, inter alia:
a) before the word **then**. In English we (almost) always add a comma before **then** if it is located in the middle of a sentence. The word **then** is often seen in English conditional sentences, but in 99% cases it's optional, so we can use a subject directly (see also: http://images.slideplayer.com/28/9327486/slides/slide_3.jpg)
For more information about **then** and English conditional sentences, you can visit the following websites:
• https://en.wikipedia.org/wiki/English_conditional_sentences
• https://en.wikipedia.org/wiki/Conditional_sentence
b) before a subject (e.g. **I**, **you**) if it is located in the middle of a sentence. For example: **If you want to install it yourself, I suggest you use..........** In such cases we always add a comma in order to emphasize the difference between two sentences (two subjects); in the first one: **you** and in the second one: **I**. Thanks to the comma we can easily distinguish them when reading the text.
c) before an (ad)verb if a sentence starts with **If**. For example: **If at all possible, please include.......**. In this case I have added the comma in order to separate an adjective (**possible**) and an (ad)verb (**please**). And also before the adverb **there** which is located in the middle of a sentence and before a noun (**development**). For example: **As both Matroska and MKVToolNix are under heavy development, there might be features......**.
3. Removed one unnecessary comma which was located before **if** (when the **if-clause** is at the end) → **e.g. include the command line, if you use Windows or Linux etc.pp.** In English we don't generally add a comma if the word **if** is located in the middle of a sentence. See here for rationale: http://images.slideplayer.com/11/3193271/slides/slide_4.jpg and also above for the English Wikipedia (conditional sentences).
2016-12-27 18:49:34 +00:00
|
|
|
|
If you have run `make install` for both libraries, then `configure`
|
2005-08-25 08:05:07 +00:00
|
|
|
|
should automatically find the libraries' position. Otherwise you need
|
2015-03-27 21:02:37 +00:00
|
|
|
|
to tell `configure` where the libEBML and libMatroska include and
|
2005-08-25 08:05:07 +00:00
|
|
|
|
library files are:
|
|
|
|
|
|
2014-08-21 01:11:10 +00:00
|
|
|
|
./configure \
|
|
|
|
|
--with-extra-includes=/where/i/put/libebml\;/where/i/put/libmatroska \
|
|
|
|
|
--with-extra-libs=/where/i/put/libebml/make/linux\;/where/i/put/libmatroska/make/linux
|
2005-08-25 08:05:07 +00:00
|
|
|
|
|
2017-01-08 20:04:51 +00:00
|
|
|
|
Now run `rake` and, as "root", `rake install`.
|
2003-03-04 19:09:59 +00:00
|
|
|
|
|
2017-10-17 17:18:07 +00:00
|
|
|
|
### 2.4.3. If things go wrong
|
|
|
|
|
|
|
|
|
|
By default the commands executed by the build system aren't
|
|
|
|
|
output. You can change that by adding `V=1` as an argument to the
|
|
|
|
|
`rake` command.
|
|
|
|
|
|
|
|
|
|
If `rake` executes too many processes at once, then you've stumbled
|
|
|
|
|
across a known bug in `rake`. In that case you should install the
|
|
|
|
|
`drake` Ruby gem and use the command `drake` instead of
|
|
|
|
|
`rake`. `drake` supports parallelism properly and doesn't try to
|
|
|
|
|
execute all jobs at once.
|
|
|
|
|
|
2015-03-27 21:02:37 +00:00
|
|
|
|
## 2.5. Notes for compilation on (Open)Solaris
|
2010-04-14 08:06:25 +00:00
|
|
|
|
|
2016-07-03 20:06:52 +00:00
|
|
|
|
You can compile MKVToolNix with Sun's sunstudio compiler, but you need
|
2014-08-21 01:11:10 +00:00
|
|
|
|
additional options for `configure`:
|
2010-04-14 08:06:25 +00:00
|
|
|
|
|
2014-08-21 01:11:10 +00:00
|
|
|
|
./configure --prefix=/usr \
|
|
|
|
|
CXX="/opt/sunstudio12.1/bin/CC -library=stlport4" \
|
|
|
|
|
CXXFLAGS="-D_POSIX_PTHREAD_SEMANTICS" \
|
|
|
|
|
--with-extra-includes=/where/i/put/libebml\;/where/i/put/libmatroska \
|
|
|
|
|
--with-extra-libs=/where/i/put/libebml/make/linux\;/where/i/put/libmatroska/make/linux
|
2010-04-14 08:06:25 +00:00
|
|
|
|
|
2015-03-27 21:02:37 +00:00
|
|
|
|
## 2.6. Unit tests
|
2012-08-07 20:48:28 +00:00
|
|
|
|
|
|
|
|
|
Building and running unit tests is completely optional. If you want to
|
2016-12-27 19:58:31 +00:00
|
|
|
|
do this, you have to follow these steps:
|
2012-08-07 20:48:28 +00:00
|
|
|
|
|
2014-08-21 01:11:10 +00:00
|
|
|
|
1. Download the "googletest" framework from
|
2017-01-06 19:39:05 +00:00
|
|
|
|
https://github.com/google/googletest/ (at the time of writing the
|
|
|
|
|
file to download was "googletest-release-1.8.0.tar.gz")
|
2012-08-07 20:48:28 +00:00
|
|
|
|
|
2017-01-06 19:39:05 +00:00
|
|
|
|
2. Extract the archive somewhere and create a symbolic link to its
|
2018-05-17 21:59:52 +00:00
|
|
|
|
`googletest-release-1.8.0/googletest` sub-directory
|
|
|
|
|
inside MKVToolNix' `lib` directory and call it `gtest`, e.g. like this:
|
|
|
|
|
|
|
|
|
|
`ln -s /path/to/googletest-release-1.8.0/googletest lib/gtest`
|
2012-08-07 20:48:28 +00:00
|
|
|
|
|
2014-08-21 01:11:10 +00:00
|
|
|
|
3. Configure MKVToolNix normally.
|
2012-08-07 20:48:28 +00:00
|
|
|
|
|
2014-08-21 01:11:10 +00:00
|
|
|
|
4. Build the unit test executable and run it with
|
2012-08-07 20:48:28 +00:00
|
|
|
|
|
2018-05-17 21:59:52 +00:00
|
|
|
|
rake tests:run_unit
|
2010-04-14 08:06:25 +00:00
|
|
|
|
|
|
|
|
|
|
2015-03-27 21:02:37 +00:00
|
|
|
|
# 3. Reporting bugs
|
2003-08-06 11:09:45 +00:00
|
|
|
|
|
2016-07-03 20:06:52 +00:00
|
|
|
|
If you're sure you've found a bug — e.g. if one of my programs crashes
|
2003-08-06 11:09:45 +00:00
|
|
|
|
with an obscur error message, or if the resulting file is missing part
|
|
|
|
|
of the original data, then by all means submit a bug report.
|
|
|
|
|
|
2017-12-16 16:27:02 +00:00
|
|
|
|
I use [GitLab's issue system](https://gitlab.com/mbunkus/mkvtoolnix/issues)
|
2015-03-27 14:37:19 +00:00
|
|
|
|
as my bug database. You can submit your bug reports there. Please be as
|
2016-12-27 19:58:31 +00:00
|
|
|
|
verbose as possible — e.g. include the command line, if you use Windows
|
2015-03-27 14:37:19 +00:00
|
|
|
|
or Linux etc.pp.
|
2012-03-09 17:07:49 +00:00
|
|
|
|
|
Update README.md
In order to make the text more beautiful and easier to read/understand for readers, I have added the following changes:
1. Added the word **via** before the product names in brackets → (**via** mkvinfo), (**via** mkvextract), (**via** mkvmerge). The word **via** clearly indicates that these tools are meant to be used for something, and they are not lonely.
2. Added many missing commas, inter alia:
a) before the word **then**. In English we (almost) always add a comma before **then** if it is located in the middle of a sentence. The word **then** is often seen in English conditional sentences, but in 99% cases it's optional, so we can use a subject directly (see also: http://images.slideplayer.com/28/9327486/slides/slide_3.jpg)
For more information about **then** and English conditional sentences, you can visit the following websites:
• https://en.wikipedia.org/wiki/English_conditional_sentences
• https://en.wikipedia.org/wiki/Conditional_sentence
b) before a subject (e.g. **I**, **you**) if it is located in the middle of a sentence. For example: **If you want to install it yourself, I suggest you use..........** In such cases we always add a comma in order to emphasize the difference between two sentences (two subjects); in the first one: **you** and in the second one: **I**. Thanks to the comma we can easily distinguish them when reading the text.
c) before an (ad)verb if a sentence starts with **If**. For example: **If at all possible, please include.......**. In this case I have added the comma in order to separate an adjective (**possible**) and an (ad)verb (**please**). And also before the adverb **there** which is located in the middle of a sentence and before a noun (**development**). For example: **As both Matroska and MKVToolNix are under heavy development, there might be features......**.
3. Removed one unnecessary comma which was located before **if** (when the **if-clause** is at the end) → **e.g. include the command line, if you use Windows or Linux etc.pp.** In English we don't generally add a comma if the word **if** is located in the middle of a sentence. See here for rationale: http://images.slideplayer.com/11/3193271/slides/slide_4.jpg and also above for the English Wikipedia (conditional sentences).
2016-12-27 18:49:34 +00:00
|
|
|
|
If at all possible, please include sample files as well so that I can
|
2016-12-27 19:58:31 +00:00
|
|
|
|
reproduce the issue. If they are larger than 1 MB, please upload
|
2015-03-27 21:02:37 +00:00
|
|
|
|
them somewhere and post a link in the issue. You can also upload them
|
|
|
|
|
to my FTP server. Details on how to connect can be found in the
|
2017-12-16 16:27:02 +00:00
|
|
|
|
[MKVToolNix FAQ](https://gitlab.com/mbunkus/mkvtoolnix/wikis/FTP-server).
|
2015-11-11 14:35:18 +00:00
|
|
|
|
|
2017-01-06 19:39:27 +00:00
|
|
|
|
# 4. Test suite and continuous integration tests
|
|
|
|
|
|
|
|
|
|
MKVToolNix contains a lot of test cases in order to detect regressions
|
|
|
|
|
before they're released. Regressions include both compilation issues
|
|
|
|
|
as well as changes from expected program behavior.
|
|
|
|
|
|
|
|
|
|
As mentioned in section 2.6., MKVToolNix comes with a set of unit
|
|
|
|
|
tests based on the Google Test library in the `tests/unit`
|
|
|
|
|
sub-directory that you can run yourself. These cover only a small
|
|
|
|
|
amount of code, and any effort to extend them would be most welcome.
|
|
|
|
|
|
|
|
|
|
A second test suite exists that targets the program behavior, e.g. the
|
|
|
|
|
output generated by mkvmerge when specific options are used with
|
|
|
|
|
specific input files. These are the test cases in the `tests`
|
|
|
|
|
directory itself. Unfortunately the files they run on often contain
|
|
|
|
|
copyrighted material that I cannot distribute. Therefore you cannot
|
|
|
|
|
run them yourself.
|
|
|
|
|
|
|
|
|
|
A third pillar of the testing effort is the
|
2017-04-29 20:17:49 +00:00
|
|
|
|
[continuous integration tests](https://buildbot.mkvtoolnix.download/)
|
2017-01-06 19:39:27 +00:00
|
|
|
|
run on a Buildbot instance. These are run automatically for each
|
|
|
|
|
commit made to the git repository. The tests include:
|
|
|
|
|
|
|
|
|
|
* building of all the packages for Linux distributions that I
|
2017-04-30 09:48:42 +00:00
|
|
|
|
normally provide for download myself in both 32-bit and 64-bit
|
2017-01-06 19:39:27 +00:00
|
|
|
|
variants
|
|
|
|
|
* building of the Windows installer and portable packages in both
|
2017-04-30 09:48:42 +00:00
|
|
|
|
32-bit and 64-bit variants
|
2017-01-06 19:39:27 +00:00
|
|
|
|
* building with both g++ and clang++
|
|
|
|
|
* building and running the unit tests
|
|
|
|
|
* building and running the test file test suite
|
|
|
|
|
* building with all optional features disabled
|
|
|
|
|
|
2017-11-18 14:52:20 +00:00
|
|
|
|
# 5. Code of Conduct
|
|
|
|
|
|
|
|
|
|
Please note that this project is released with a
|
|
|
|
|
[Code of Conduct](CODE_OF_CONDUCT.md). By participating in this project
|
|
|
|
|
you agree to abide by its terms.
|
|
|
|
|
|
|
|
|
|
# 6. Included third-party components and their licenses
|
2015-11-11 14:35:18 +00:00
|
|
|
|
|
2017-04-05 08:11:43 +00:00
|
|
|
|
MKVToolNix includes and uses the following libraries & artwork:
|
2015-11-11 14:35:18 +00:00
|
|
|
|
|
2017-11-18 14:52:20 +00:00
|
|
|
|
## 6.1. avilib
|
2015-11-11 14:35:18 +00:00
|
|
|
|
|
2017-12-27 22:00:34 +00:00
|
|
|
|
Reading and writing AVI files. Originally part of the `transcode`
|
|
|
|
|
package.
|
2015-11-11 14:35:18 +00:00
|
|
|
|
|
2017-12-27 22:00:34 +00:00
|
|
|
|
* Copyright: 1999 Rainer Johanni <Rainer@Johanni.de>
|
2017-11-18 14:53:12 +00:00
|
|
|
|
* License: GNU General Public License v2 or later
|
2017-12-27 22:00:34 +00:00
|
|
|
|
* URL: the `transcode` project doesn't seem to have a home page anymore
|
|
|
|
|
* Corresponding files: `lib/avilib-0.6.10/*`
|
2015-11-11 14:35:18 +00:00
|
|
|
|
|
2017-11-18 14:52:20 +00:00
|
|
|
|
## 6.2. Boost's utf8_codecvt_facet
|
2015-11-11 14:35:18 +00:00
|
|
|
|
|
2017-04-05 08:11:43 +00:00
|
|
|
|
A class, `utf8_codecvt_facet`, derived from `std::codecvt<wchar_t, char>`,
|
|
|
|
|
which can be used to convert utf8 data in files into `wchar_t` strings
|
2015-11-11 14:35:18 +00:00
|
|
|
|
in the application.
|
|
|
|
|
|
2017-12-27 22:00:34 +00:00
|
|
|
|
* Copyright:
|
|
|
|
|
* 2001 Ronald Garcia, Indiana University (garcia@osl.iu.edu)
|
|
|
|
|
* Andrew Lumsdaine, Indiana University (lums@osl.iu.edu)
|
2017-04-05 08:11:43 +00:00
|
|
|
|
* License: Boost Software License - Version 1.0 (see `doc/licenses/Boost-1.0.txt`)
|
|
|
|
|
* URL: http://www.boost.org
|
2017-12-27 22:00:34 +00:00
|
|
|
|
* Corresponding files: `lib/boost/*`
|
2015-11-11 14:35:18 +00:00
|
|
|
|
|
2017-11-18 14:52:20 +00:00
|
|
|
|
## 6.3. libEBML
|
2015-11-11 14:35:18 +00:00
|
|
|
|
|
2016-07-03 20:06:52 +00:00
|
|
|
|
A C++ library to parse EBML files
|
2015-11-11 14:35:18 +00:00
|
|
|
|
|
2017-12-27 22:00:34 +00:00
|
|
|
|
* Copyright: 2002-2010 Steve Lhomme et. al.
|
2017-11-19 17:15:55 +00:00
|
|
|
|
* License: GNU Lesser General Public License v2.1 or later (see `doc/licenses/LGPL-2.1.txt`)
|
2017-04-05 08:11:43 +00:00
|
|
|
|
* URL: http://www.matroska.org/
|
2017-12-27 22:00:34 +00:00
|
|
|
|
* Corresponding files: `lib/libebml/*`
|
2015-11-11 14:35:18 +00:00
|
|
|
|
|
2017-11-18 14:52:20 +00:00
|
|
|
|
## 6.4. libMatroska
|
2015-11-11 14:35:18 +00:00
|
|
|
|
|
2016-07-03 20:06:52 +00:00
|
|
|
|
A C++ library to parse Matroska files
|
2015-11-11 14:35:18 +00:00
|
|
|
|
|
2017-12-27 22:00:34 +00:00
|
|
|
|
* Copyright: 2002-2010 Steve Lhomme et. al.
|
2017-11-19 17:15:55 +00:00
|
|
|
|
* License: GNU Lesser General Public License v2.1 or later (see `doc/licenses/LGPL-2.1.txt`)
|
2017-04-05 08:11:43 +00:00
|
|
|
|
* URL: http://www.matroska.org/
|
2017-12-27 22:00:34 +00:00
|
|
|
|
* Corresponding files: `lib/libmatroska/*`
|
2015-11-11 14:35:18 +00:00
|
|
|
|
|
2017-11-18 14:52:20 +00:00
|
|
|
|
## 6.5. librmff
|
2015-11-11 14:35:18 +00:00
|
|
|
|
|
|
|
|
|
librmff is short for 'RealMedia file format access library'. It aims
|
|
|
|
|
at providing the programmer an easy way to read and write RealMedia
|
|
|
|
|
files.
|
|
|
|
|
|
2017-12-27 22:00:34 +00:00
|
|
|
|
* Copyright: Moritz Bunkus
|
2017-11-19 17:15:55 +00:00
|
|
|
|
* License: GNU Lesser General Public License v2.1 or later (see `doc/licenses/LGPL-2.1.txt`)
|
2017-04-05 08:11:43 +00:00
|
|
|
|
* URL: https://www.bunkus.org/videotools/librmff/index.html
|
2017-12-27 22:00:34 +00:00
|
|
|
|
* Corresponding files: `lib/librmff/*`
|
2015-11-11 14:35:18 +00:00
|
|
|
|
|
2017-11-18 14:52:20 +00:00
|
|
|
|
## 6.6. nlohmann's JSON
|
2015-11-11 14:35:18 +00:00
|
|
|
|
|
|
|
|
|
JSON for Modern C++
|
|
|
|
|
|
2019-01-03 15:02:28 +00:00
|
|
|
|
* Copyright: 2013-2018 Niels Lohmann
|
2017-04-05 08:11:43 +00:00
|
|
|
|
* License: MIT (see `doc/licenses/nlohmann-json-MIT.txt`)
|
|
|
|
|
* URL: https://github.com/nlohmann/json
|
2017-12-27 22:00:34 +00:00
|
|
|
|
* Corresponding files: `lib/nlohmann-json/*`
|
2015-11-11 14:35:18 +00:00
|
|
|
|
|
2017-11-18 14:52:20 +00:00
|
|
|
|
## 6.7. pugixml
|
2015-11-11 14:35:18 +00:00
|
|
|
|
|
2016-07-03 20:06:52 +00:00
|
|
|
|
An XML processing library
|
2015-11-11 14:35:18 +00:00
|
|
|
|
|
2019-01-03 15:05:24 +00:00
|
|
|
|
* Copyright: 2006–2019 by Arseny Kapoulkine <arseny.kapoulkine@gmail.com>
|
2017-04-05 08:11:43 +00:00
|
|
|
|
* License: MIT (see `doc/licenses/pugixml-MIT.txt`)
|
|
|
|
|
* URL: http://pugixml.org/
|
2017-12-27 22:00:34 +00:00
|
|
|
|
* Corresponding files: `lib/pugixml/*`
|
2015-11-11 14:35:18 +00:00
|
|
|
|
|
2017-11-18 14:52:20 +00:00
|
|
|
|
## 6.8. utf8-cpp
|
2015-11-11 14:35:18 +00:00
|
|
|
|
|
|
|
|
|
UTF-8 with C++ in a Portable Way
|
|
|
|
|
|
2017-12-27 22:00:34 +00:00
|
|
|
|
* Copyright: 2006 Nemanja Trifunovic
|
2017-04-05 08:11:43 +00:00
|
|
|
|
* License: custom (see `doc/licenses/utf8-cpp-custom.txt`)
|
|
|
|
|
* URL: http://utfcpp.sourceforge.net/
|
2017-12-27 22:00:34 +00:00
|
|
|
|
* Corresponding files: `lib/utf8-cpp/*`
|
2017-04-05 08:11:43 +00:00
|
|
|
|
|
2017-11-18 14:52:20 +00:00
|
|
|
|
## 6.9. Oxygen icons and sound files
|
2017-04-05 08:11:43 +00:00
|
|
|
|
|
|
|
|
|
Most of the icons included in this package originate from the Oxygen
|
|
|
|
|
Project. These include all files in the `share/icons` sub-directory
|
|
|
|
|
safe for those whose name starts with `mkv`.
|
|
|
|
|
|
|
|
|
|
The preferred form of modification are the SVG icons. These are not
|
|
|
|
|
part of the binary distribution of MKVToolNix, but they are contained
|
2017-04-05 08:53:51 +00:00
|
|
|
|
in the source code in the `icons/scalable` sub-directory. You can
|
|
|
|
|
obtain the source code from the
|
|
|
|
|
[MKVToolNix website](https://mkvtoolnix.download/).
|
2017-04-05 08:11:43 +00:00
|
|
|
|
|
2017-04-05 11:28:25 +00:00
|
|
|
|
All of the sound files in the `share/sounds` sub-directory originate
|
|
|
|
|
from the Oxygen project.
|
|
|
|
|
|
2017-04-05 08:11:43 +00:00
|
|
|
|
* License: GNU Lesser General Public License v3 (see `doc/licenses/LGPL-3.0.txt`)
|
|
|
|
|
* URL: https://techbase.kde.org/Projects/Oxygen
|
2017-12-27 22:00:34 +00:00
|
|
|
|
* Corresponding files:
|
|
|
|
|
* `share/icons/*` (except for `share/icons/*/mkv*`)
|
|
|
|
|
* `share/sounds/*`
|
|
|
|
|
|
|
|
|
|
## 6.10. MKVToolNix icons
|
|
|
|
|
|
|
|
|
|
* Copyright:
|
|
|
|
|
* 2011 Alexandr Grigorcea <cahr.gr@gmail.com>
|
|
|
|
|
* 2012 Eduard Geier <edu.g@online.de>
|
|
|
|
|
* 2012 Ben Humpert <ben@an3k.de>
|
|
|
|
|
* License: Creative Commons Attribution 3.0 Unported (CC BY 3.0) (see `doc/licenses/CC-BY-3.0.txt`)
|
|
|
|
|
* Corresponding files: `share/icons/*/mkv*`
|
2017-12-27 14:16:13 +00:00
|
|
|
|
|
2017-12-27 22:00:34 +00:00
|
|
|
|
## 6.11. QtWaitingSpinner
|
2017-12-27 14:16:13 +00:00
|
|
|
|
|
|
|
|
|
A highly configurable, custom Qt widget for showing "waiting" or
|
|
|
|
|
"loading" spinner icons in Qt applications
|
|
|
|
|
|
2017-12-27 22:00:34 +00:00
|
|
|
|
* Copyright:
|
|
|
|
|
* 2012–2014 by Alexander Turkin
|
|
|
|
|
* 2014 by William Hallatt
|
|
|
|
|
* 2015 by Jacob Dawid
|
2017-12-27 14:16:13 +00:00
|
|
|
|
* License: MIT (see `doc/licenses/QtWaitingSpinner-MIT.txt`)
|
|
|
|
|
* URL: https://github.com/snowwlex/QtWaitingSpinner
|
2017-12-27 22:00:34 +00:00
|
|
|
|
* Corresponding files: `src/mkvtoolnix-gui/util/waiting_spinning_widget.{h,cpp}`
|
|
|
|
|
|
|
|
|
|
## 6.12. Fancy tab widget
|
|
|
|
|
|
|
|
|
|
A beefed-up tab widget class for Qt extracted from the Qt Creator project
|
|
|
|
|
|
|
|
|
|
* Copyright: 2011 Nokia Corporation and/or its subsidiary(-ies).
|
|
|
|
|
* License: GNU General Public License v2 (see `COPYING`)
|
|
|
|
|
* Corresponding files: `src/mkvtoolnix-gui/util/fancy_tab_widget.{h,cpp}`
|
2018-11-20 10:34:52 +00:00
|
|
|
|
|
|
|
|
|
## 6.13. fmt
|
|
|
|
|
|
|
|
|
|
Small, safe and fast formatting library
|
|
|
|
|
|
|
|
|
|
* Copyright: 2012–2018 by Victor Zverovich
|
|
|
|
|
* License: BSD (see `doc/licenses/fmt-BSD.txt`)
|
|
|
|
|
* URL: http://fmtlib.net/latest/
|
|
|
|
|
* Corresponding files: `lib/fmt/*`
|