mirror of
https://github.com/mpv-player/mpv
synced 2024-12-27 09:32:40 +00:00
fd4e3af740
This is probably useful. Note that this includes a small, stupid hack to prevent loading of the config file if vf_lavfi is not available. The profile by default uses vf_lavfi, and the config parser will output errors if vf_lavfi is not available. As another caveat, we install the example profile even if encoding is disabled (though we don't load it, since this would print errors).
144 lines
5.0 KiB
ReStructuredText
144 lines
5.0 KiB
ReStructuredText
General usage
|
|
=============
|
|
|
|
::
|
|
|
|
mpv infile -o outfile [-of outfileformat] [-ofopts formatoptions] \
|
|
[-ofps outfps | -oautofps] [-oharddup] [-ocopyts | -orawts] [-oneverdrop] \
|
|
[(any other mpv options)] \
|
|
-ovc outvideocodec [-ovcopts outvideocodecoptions] \
|
|
-oac outaudiocodec [-oacopts outaudiocodecoptions]
|
|
|
|
Help for these options is provided if giving help as parameter, as in::
|
|
|
|
mpv -ovc help
|
|
|
|
The suboptions of these generally are identical to ffmpeg's (as option parsing
|
|
is simply delegated to ffmpeg). The option -ocopyts enables copying timestamps
|
|
from the source as-is, instead of fixing them to match audio playback time
|
|
(note: this doesn't work with all output container formats); -orawts even turns
|
|
off discontinuity fixing.
|
|
|
|
Note that if neither -ofps nor -oautofps is specified, VFR encoding is assumed
|
|
and the time base is 24000fps. -oautofps sets -ofps to a guessed fps number
|
|
from the input video. Note that not all codecs and not all formats support VFR
|
|
encoding, and some which do have bugs when a target bitrate is specified - use
|
|
-ofps or -oautofps to force CFR encoding in these cases.
|
|
|
|
Of course, the options can be stored in a profile, like this .mpv/config
|
|
section::
|
|
|
|
[myencprofile]
|
|
vf-add = scale=480:-2
|
|
ovc = libx264
|
|
ovcopts-add = preset=medium,tune=fastdecode
|
|
ovcopts-add = crf=23
|
|
ovcopts-add = maxrate=1500k,bufsize=1000k,rc_init_occupancy=900k,refs=2
|
|
ovcopts-add = profile=baseline
|
|
oac = aac
|
|
oacopts-add = b=96k
|
|
|
|
One can then encode using this profile using the command::
|
|
|
|
mpv infile -o outfile.mp4 -profile myencprofile
|
|
|
|
Some example profiles are provided in a file
|
|
etc/encoding-profiles.conf; as for this, see below.
|
|
|
|
|
|
Encoding examples
|
|
=================
|
|
|
|
These are some examples of encoding targets this code has been used and tested
|
|
for.
|
|
|
|
Typical MPEG-4 Part 2 ("ASP", "DivX") encoding, AVI container::
|
|
|
|
mpv infile -o outfile.avi \
|
|
-ofps 25 \
|
|
-ovc mpeg4 -ovcopts qscale=4 \
|
|
-oac libmp3lame -oacopts ab=128k
|
|
|
|
Note: AVI does not support variable frame rate, so -ofps must be used. The
|
|
frame rate should ideally match the input (25 for PAL, 24000/1001 or 30000/1001
|
|
for NTSC)
|
|
|
|
Typical MPEG-4 Part 10 ("AVC", "H.264") encoding, Matroska (MKV) container::
|
|
|
|
mpv infile -o outfile.mkv \
|
|
-ovc libx264 -ovcopts preset=medium,crf=23,profile=baseline \
|
|
-oac libvorbis -oacopts qscale=3
|
|
|
|
Typical MPEG-4 Part 10 ("AVC", "H.264") encoding, MPEG-4 (MP4) container::
|
|
|
|
mpv infile -o outfile.mp4 \
|
|
-ovc libx264 -ovcopts preset=medium,crf=23,profile=baseline \
|
|
-oac aac -oacopts ab=128k
|
|
|
|
Typical VP8 encoding, WebM (restricted Matroska) container::
|
|
|
|
mpv infile -o outfile.mkv \
|
|
-of webm \
|
|
-ovc libvpx -ovcopts qmin=6,b=1000000k \
|
|
-oac libvorbis -oacopts qscale=3
|
|
|
|
|
|
Device targets
|
|
==============
|
|
|
|
As the options for various devices can get complex, profiles can be used.
|
|
|
|
An example profile file for encoding is provided in
|
|
etc/encoding-profiles.conf in the source tree. This file is installed and loaded
|
|
by default (if libavfilter is enabled at compilation). If you want to modify
|
|
it, you can replace and it with your own copy by doing::
|
|
|
|
mkdir -p ~/.mpv
|
|
cp /etc/mpv/encoding-profiles.conf ~/.mpv/encoding-profiles.conf
|
|
|
|
Refer to the top of that file for more comments - in a nutshell, the following
|
|
options are added by it::
|
|
|
|
-profile enc-to-dvdpal DVD-Video PAL, use dvdauthor -v pal+4:3 -a ac3+en
|
|
-profile enc-to-dvdntsc DVD-Video NTSC, use dvdauthor -v ntsc+4:3 -a ac3+en
|
|
-profile enc-to-bb-9000 MP4 for Blackberry Bold 9000
|
|
-profile enc-to-nok-6300 3GP for Nokia 6300
|
|
-profile enc-to-psp MP4 for PlayStation Portable
|
|
-profile enc-to-iphone MP4 for iPhone
|
|
-profile enc-to-iphone-4 MP4 for iPhone 4 (double res)
|
|
-profile enc-to-iphone-5 MP4 for iPhone 5 (even larger res)
|
|
|
|
You can encode using these with a command line like::
|
|
|
|
mpv infile -o outfile.mp4 -profile enc-to-bb-9000
|
|
|
|
Of course, you are free to override options set by these profiles by specifying
|
|
them after the -profile option.
|
|
|
|
|
|
What works
|
|
==========
|
|
|
|
* Encoding at variable frame rate (default)
|
|
* Encoding at constant frame rate using -ofps framerate -oharddup
|
|
* 2-pass encoding (specify flags=+pass1 in the first pass's -ovcopts, specify
|
|
flags=+pass2 in the second pass)
|
|
* Hardcoding subtitles using vobsub, ass or srt subtitle rendering (just
|
|
configure mpv for the subtitles as usual)
|
|
* Hardcoding any other mpv OSD (e.g. time codes, using -osdlevel 3 and -vf
|
|
expand=::::1)
|
|
* Encoding directly from a DVD, network stream, webcam, or any other source
|
|
mpv supports
|
|
* Using x264 presets/tunings/profiles (by using profile=, tune=, preset= in the
|
|
-ovcopts)
|
|
* Deinterlacing/Inverse Telecine with any of mpv's filters for that
|
|
* Audio file converting: mpv -o outfile.mp3 infile.flac -no-video -oac
|
|
libmp3lame -oacopts ab=320k
|
|
* inverse telecine filters (confirmed working: detc, pullup, filmdint)
|
|
|
|
What does not work yet
|
|
|
|
* 3-pass encoding (ensuring constant total size and bitrate constraints while
|
|
having VBR audio; mencoder calls this "frameno")
|
|
* Direct stream copy
|