mirror of
https://gitlab.com/mbunkus/mkvtoolnix.git
synced 2024-12-23 19:31:44 +00:00
README: Rewrite in Markdown
This commit is contained in:
parent
82d82cfcfc
commit
68459d7a62
@ -6,12 +6,12 @@ Table of contents
|
||||
|
||||
1. Introduction
|
||||
2. Installation
|
||||
2.1. Requirements
|
||||
2.2. Optional components
|
||||
2.3. Building libmatroska and libebml
|
||||
2.4. Building MKVtoolNix
|
||||
2.5. Notes for compilation on (Open)Solaris
|
||||
2.6. Unit tests
|
||||
1. Requirements
|
||||
2. Optional components
|
||||
3. Building libmatroska and libebml
|
||||
4. Building MKVtoolNix
|
||||
5. Notes for compilation on (Open)Solaris
|
||||
6. Unit tests
|
||||
3. Examples
|
||||
4. Reporting bugs
|
||||
|
||||
@ -30,7 +30,7 @@ technology, the Extensible Binary Meta Language (EBML), at
|
||||
http://www.matroska.org/
|
||||
|
||||
The full documentation for each command is now maintained in its
|
||||
man page only. Type 'mkvmerge -h' to get you started.
|
||||
man page only. Type `mkvmerge -h` to get you started.
|
||||
|
||||
This code comes under the GPL (see www.gnu.org or the file COPYING).
|
||||
Modify as needed.
|
||||
@ -57,7 +57,7 @@ development there might be features available in the Subversion
|
||||
repository that are not available in the releases. On the other hand
|
||||
the Subversion repository version might not even compile.
|
||||
|
||||
2.1. Requirements
|
||||
### 2.1. Requirements
|
||||
|
||||
In order to compile MKVToolNix you need a couple of libraries. Most of
|
||||
them should be available pre-compiled for your distribution. The
|
||||
@ -82,7 +82,7 @@ programs and libraries you absolutely need are:
|
||||
used: "format", "RegEx", "filesystem", "system", "foreach",
|
||||
"Range", "rational", "variant". At least v1.46.0 is required.
|
||||
|
||||
You also need the "rake" or "drake" build program or at least the
|
||||
You also need the `rake` or `drake` build program or at least the
|
||||
programming language Ruby and the "rubygems" package. MKVToolNix comes
|
||||
bundled with its own copy of "drake" in case you cannot install it
|
||||
yourself. If you want to install it yourself I suggest you use the
|
||||
@ -91,15 +91,15 @@ for parallel builds.
|
||||
|
||||
Installing "drake" is simple. As root run the following command:
|
||||
|
||||
gem install drake
|
||||
gem install drake
|
||||
|
||||
2.2. Optional components
|
||||
### 2.2. Optional components
|
||||
|
||||
Other libraries are optional and only limit the features that are
|
||||
built. These include:
|
||||
|
||||
- wxWidgets ( http://www.wxwidgets.org/ ) -- a cross-platform GUI
|
||||
toolkit. You need this if you want to use mmg (the mkvmerge GUI) or
|
||||
toolkit. You need this if you want to use `mmg` (the mkvmerge GUI) or
|
||||
mkvinfo's GUI.
|
||||
|
||||
- libFLAC ( http://downloads.xiph.org/releases/flac/ ) for FLAC
|
||||
@ -116,7 +116,7 @@ built. These include:
|
||||
|
||||
- libcurl ( http://curl.haxx.se/ ) for online update checks
|
||||
|
||||
2.3. Building libmatroska and libebml
|
||||
### 2.3. Building libmatroska and libebml
|
||||
|
||||
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.
|
||||
@ -126,104 +126,106 @@ http://dl.matroska.org/downloads/libebml/ and libmatroska 1.4.0 from
|
||||
http://dl.matroska.org/downloads/libmatroska/ or a fresh copy from the
|
||||
Subversion repository:
|
||||
|
||||
svn co https://svn.matroska.org/svn/matroska/trunk/libebml
|
||||
svn co https://svn.matroska.org/svn/matroska/trunk/libmatroska
|
||||
svn co https://svn.matroska.org/svn/matroska/trunk/libebml
|
||||
svn co https://svn.matroska.org/svn/matroska/trunk/libmatroska
|
||||
|
||||
Change to "libebml/make/linux" and run "make staticlib". If you have
|
||||
root-access then run "make install_headers install_staticlib" as
|
||||
Change to "libebml/make/linux" and run `make staticlib`. If you have
|
||||
root-access then run `make install_headers install_staticlib` as
|
||||
"root" in order to install the files. Change to
|
||||
"libmatroska/make/linux". Once more run "make staticlib". If you have
|
||||
root-access then run "make install_headers install_staticlib" as
|
||||
"libmatroska/make/linux". Once more run `make staticlib`. If you have
|
||||
root-access then run `make install_headers install_staticlib` as
|
||||
"root" in order to install the files.
|
||||
|
||||
Note that if you don't want the libraries to be installed in
|
||||
/usr/local/lib and the headers in /usr/local/include then you can
|
||||
alter the prefix (which defaults to /usr/local) by adding an argument
|
||||
"prefix=/usr" to the install "make" command. Example:
|
||||
`prefix=/usr` to the install `make` command. Example:
|
||||
|
||||
make prefix=/usr install_headers install_staticlib
|
||||
make prefix=/usr install_headers install_staticlib
|
||||
|
||||
2.4. Building MKVtoolNix
|
||||
### 2.4. Building MKVtoolNix
|
||||
|
||||
Either download the current release from
|
||||
http://www.bunkus.org/videotools/mkvtoolnix/ and unpack it or get a
|
||||
development snapshot from my Git repository.
|
||||
|
||||
- Getting and building a development snapshot (ignore this subsection
|
||||
if you want to build from a release tarball)
|
||||
- Getting and building a development snapshot (ignore this subsection
|
||||
if you want to build from a release tarball)
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
First clone my Git repository with this command:
|
||||
First clone my Git repository with this command:
|
||||
|
||||
git clone git://github.com/mbunkus/mkvtoolnix.git
|
||||
git clone git://github.com/mbunkus/mkvtoolnix.git
|
||||
|
||||
Now change to the MKVtoolNix directory with "cd mkvtoolnix" and run
|
||||
"./autogen.sh" which will generate the "configure" script. You need
|
||||
the GNU "autoconf" utility for this step.
|
||||
Now change to the MKVtoolNix directory with `cd mkvtoolnix` and run
|
||||
`./autogen.sh` which will generate the "configure" script. You need
|
||||
the GNU "autoconf" utility for this step.
|
||||
|
||||
If you have run "make install" for both libraries then "configure"
|
||||
If you have run `make install` for both libraries then `configure`
|
||||
should automatically find the libraries' position. Otherwise you need
|
||||
to tell "configure" where the "libebml" and "libmatroska" include and
|
||||
to tell `configure` where the "libebml" and "libmatroska" include and
|
||||
library files are:
|
||||
|
||||
./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
|
||||
./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
|
||||
|
||||
Now run "rake" and, as "root", "rake install". If you don't have
|
||||
Now run `rake` and, as "root", `rake install`. If you don't have
|
||||
"rake" installed yourself then use the version bundled with
|
||||
MKVToolNix: "./rake.d/bin/drake" and "./rake.d/bin/drake install".
|
||||
MKVToolNix: `./rake.d/bin/drake` and `./rake.d/bin/drake install`.
|
||||
|
||||
If you want to use all available CPU cores for building then you have
|
||||
to use "drake" instead of "rake". "drake" knows the parameter "-j"
|
||||
much like "make" does. You can also set the environment varibale
|
||||
to use `drake` instead of `rake`. `drake` knows the parameter `-j`
|
||||
much like `make` does. You can also set the environment variable
|
||||
DRAKETHREADS to a number and the build process will automatically use
|
||||
that number of threads for a parallel build:
|
||||
|
||||
./drake -j4
|
||||
./drake -j4
|
||||
|
||||
or
|
||||
|
||||
export DRAKETHREADS=4
|
||||
./drake
|
||||
export DRAKETHREADS=4
|
||||
./drake
|
||||
|
||||
2.5. Notes for compilation on (Open)Solaris
|
||||
### 2.5. Notes for compilation on (Open)Solaris
|
||||
|
||||
You can compile mkvtoolnix with Sun's sunstudio compiler, but you need
|
||||
additional options for "configure":
|
||||
additional options for `configure`:
|
||||
|
||||
./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
|
||||
./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
|
||||
|
||||
2.6. Unit tests
|
||||
### 2.6. Unit tests
|
||||
|
||||
Building and running unit tests is completely optional. If you want to
|
||||
do this then you have to follow these steps:
|
||||
|
||||
a) Download the "googletest" framework from
|
||||
1. Download the "googletest" framework from
|
||||
http://code.google.com/p/googletest/ (at the time of writing the
|
||||
file to download was "gtest-1.6.0.zip")
|
||||
|
||||
b.1) Either extract the framework inside the "lib" sub-folder and
|
||||
2. Make `gtest` usable:
|
||||
|
||||
1. Either extract the framework inside the "lib" sub-folder and
|
||||
rename the resulting folder "gtest-1.6.0" to "gtest"
|
||||
|
||||
OR...
|
||||
OR...
|
||||
|
||||
b.2) extract the archive somewhere and create a symbolic link to it
|
||||
2. Extract the archive somewhere and create a symbolic link to it
|
||||
inside the "lib" folder called or create a symbolic link called
|
||||
"gtest".
|
||||
|
||||
c) Configure MKVToolNix normally.
|
||||
3. Configure MKVToolNix normally.
|
||||
|
||||
d) Build the unit test executable and run it with
|
||||
4. Build the unit test executable and run it with
|
||||
|
||||
./drake tests:unit
|
||||
./drake tests:unit
|
||||
|
||||
|
||||
|
||||
@ -233,46 +235,47 @@ d) Build the unit test executable and run it with
|
||||
Here's a *very* brief example of how you could use mkvmerge
|
||||
with mencoder in order to rip a DVD:
|
||||
|
||||
a) Extract the audio to PCM audio:
|
||||
1. Extract the audio to PCM audio:
|
||||
|
||||
mplayer -ao pcm:file=audio.wav -vo null -vc dummy dvd://1
|
||||
mplayer -ao pcm:file=audio.wav -vo null -vc dummy dvd://1
|
||||
|
||||
b) Normalize the sound (optional)
|
||||
2. Normalize the sound (optional)
|
||||
|
||||
normalize audio.wav
|
||||
normalize audio.wav
|
||||
|
||||
c) Encode the audio to Vorbis:
|
||||
3. Encode the audio to Vorbis:
|
||||
|
||||
oggenc -q3 -oaudio-q3.ogg audio.wav
|
||||
oggenc -q3 -oaudio-q3.ogg audio.wav
|
||||
|
||||
d) Somehow calculate the bitrate for your video. Use something like...
|
||||
4. Somehow calculate the bitrate for your video. Use something like:
|
||||
|
||||
video_size = (target_size - audio-size) / 1.005
|
||||
video_bitrate = video_size / length / 1024 * 8
|
||||
```
|
||||
video_size = (target_size - audio-size) / 1.005
|
||||
video_bitrate = video_size / length / 1024 * 8
|
||||
```
|
||||
- `target_size`, `audio_size` in bytes
|
||||
- `length` in seconds
|
||||
- 1.005 is the overhead caused by putting the streams into an Matroska file
|
||||
(about 0.5%, that's correct ;)).
|
||||
- `video_bitrate` will be in kbit/s
|
||||
|
||||
target_size, audio_size in bytes
|
||||
length in seconds
|
||||
1.005 is the overhead caused by putting the streams into an Matroska file
|
||||
(about 0.5%, that's correct ;)).
|
||||
video_bitrate will be in kbit/s
|
||||
5. Use the two-pass encoding for the video:
|
||||
|
||||
e) Use the two-pass encoding for the video:
|
||||
mencoder -oac copy -ovc lavc \
|
||||
-lavcopts vcodec=mpeg4:vbitrate=1000:vhq:vqmin=2:vpass=1 \
|
||||
-vf scale=....,crop=..... \
|
||||
-o /dev/null dvd://1
|
||||
|
||||
mencoder -oac copy -ovc lavc \
|
||||
-lavcopts vcodec=mpeg4:vbitrate=1000:vhq:vqmin=2:vpass=1 \
|
||||
-vf scale=....,crop=..... \
|
||||
-o /dev/null dvd://1
|
||||
mencoder -oac copy -ovc lavc \
|
||||
-lavcopts vcodec=mpeg4:vbitrate=1000:vhq:vqmin=2:vpass=2 \
|
||||
-vf scale=....,crop=..... \
|
||||
-o movie.avi dvd://1
|
||||
|
||||
mencoder -oac copy -ovc lavc \
|
||||
-lavcopts vcodec=mpeg4:vbitrate=1000:vhq:vqmin=2:vpass=2 \
|
||||
-vf scale=....,crop=..... \
|
||||
-o movie.avi dvd://1
|
||||
6. Merge:
|
||||
|
||||
f) Merge:
|
||||
mkvmerge -o movie.mkv -A movie.avi audio-q3.ogg
|
||||
|
||||
mkvmerge -o movie.mkv -A movie.avi audio-q3.ogg
|
||||
|
||||
-A is necessary in order to avoid copying the raw PCM (or MP3) audio as well.
|
||||
`-A` is necessary in order to avoid copying the raw PCM (or MP3) audio as well.
|
||||
|
||||
|
||||
|
||||
@ -289,6 +292,6 @@ e.g. include the command line, if you use Windows or Linux etc.pp.
|
||||
|
||||
If at all possible please include sample files as well so that I can
|
||||
reproduce the issue. If they are larger than 1M then please upload
|
||||
them somewhere (e.g. to my FTP server: host name "ftp.bunkus.org",
|
||||
user name "upload", password "only" -- each without the quotes) and
|
||||
post a link or note in the bug report.
|
||||
them somewhere (e.g. to my FTP server: host name `ftp.bunkus.org`,
|
||||
user name `upload`, password `only`) and post a link or note in the bug
|
||||
report.
|
Loading…
Reference in New Issue
Block a user