Skip to content

Latest commit

 

History

History
383 lines (341 loc) · 19.9 KB

changes.rst

File metadata and controls

383 lines (341 loc) · 19.9 KB

CHANGES FROM OTHER VERSIONS OF MPLAYER

mpv is based on mplayer2, which in turn is based on the original MPlayer (also called mplayer, mplayer-svn, mplayer1). Many changes have been made, a large part of which is incompatible or completely changes how the player behaves. Although there are still many similarities to its ancestors, mpv should generally be treated as a completely different program.

Note

These lists are incomplete.

General Changes for MPlayer to mpv

  • Switch to GPLv2+. (Technically speaking, MPlayer as a whole seems to be GPLv2-only, while mplayer2 is GPLv3+ - see Copyright file for details.)
  • Removal of the internal GUI, MEncoder, OSD menu, video kernel drivers for Linux 2.4 (including VIDIX)
  • Large internal cleanups
  • Removal of support for dead platforms
  • New build system
  • No embedded copy of FFmpeg and other libraries
  • Better pause handling (do not unpause on a command)
  • Better MKV support (such as ordered chapters)
  • vo_vdpau improvements
  • Precise seeking support
  • Native OpenGL backend for OS X
  • General OS X improvements
  • Improvements in audio/video sync handling
  • Cleaned up terminal output
  • Gapless audio support (--gapless-audio)
  • Improved responsiveness on user input
  • Support for modifier keys (alt, shift, ctrl) in input.conf
  • OSS4 volume control
  • More correct color reproduction (color matrix generation)
  • Use libass for subtitle rendering by default (better quality)
  • Generally preferring FFmpeg/Libav over internal demuxers and decoders
  • Improvements when playing multiple files (--fixed-vo)
  • Screenshot improvements (instant screenshots without 1-frame delay, allow taking screenshots even with hardware decoding)
  • Improved support for PulseAudio
  • Generally improved MS Windows support (dealing with Unicode file names, improved --vo=direct3d, improved window handling)
  • Better OSD rendering (using libass). This has full Unicode support, and languages like Arabic should be better supported.
  • Cleaned up terminal output (nicer status line, less useless noise)
  • Support for playing URLs of popular streaming sites directly (e.g. mpv https://www.youtube.com/watch?v=...)
  • Improved OpenGL output (--vo=opengl-hq)
  • Make --softvol default (mpv is not a mixer control panel)
  • Improved support for .cue files
  • Screenshot improvements (can save screenshots as JPEG or PNG, configurable file names, support for taking screenshots with or without subtitles - the screenshot video filter is not needed anymore, and should not be put into the mpv config file)
  • Removal of teletext support
  • Removal of most built-in demuxers, using libavformat instead
  • Removal of built-in network support, using libavformat instead (also, support https via libavformat)
  • Replace image VOs (--vo=jpeg etc.) with --vo=image
  • Do not lose settings when playing a new file in the same player instance
  • New location for config files, new name for the binary.
  • Slave mode compatibility broken (see below)
  • Encoding functionality (replacement for MEncoder, see DOCS/encoding.rst)
  • Remove --vo=gif89a, --vo=md5sum, --vo=yuv4mpeg, as encoding can handle these use cases. For yuv4mpeg, for example, use: mpv input.mkv -o output.y4m --no-audio --oautofps --oneverdrop.
  • Image subtitles (DVDs etc.) are rendered in color and use more correct positioning (color can be disabled with --sub-gray)
  • Wayland support
  • Support for precise scrolling which scales the parameter of commands. If the input doesn't support precise scrolling the scale factor stays 1.
  • OS X: Cocoa event loop is independent from MPlayer's event loop, so user actions like accessing menus and live resizing do not block the playback.
  • OS X: Apple Remote support.
  • OS X: Media Keys support.
  • Windows: Added WASAPI audio output.
  • New OSD bar with chapter marks and not positioned in the middle of the video (though this can be customized with the --osd-bar-align-y option).
  • Allow customizing whether a key binding for seeking shows the video time, the OSD bar, or nothing (see section `Input Command Prefixes`_).
  • Display list of chapters and audio/subtitle tracks on OSD (see section `Properties`_).
  • --keep-open option to stop the player from closing the window and exiting after playback ends.
  • Re-enable screensaver while the player is paused.
  • Matroska edition switching at runtime.
  • Support for libavfilter (for video->video and audio->audio). This allows using most of FFmpeg's filters, which improve greatly on the old MPlayer filters in features, performance, and correctness.
  • Improved downmixing and output of surround audio. Instead of using hardcoded pan filters to do remixing, use libavresample. Channel maps are used to identify the channel layout, so e.g. 3.0 and 2.1 audio can be distinguished.
  • Allow resuming playback at a later point with Shift+q, also see quit_watch_later input command.
  • Support mapping multiple commands to one key.
  • Allow changing/adjusting video filters at runtime. (This is also used to make the D key insert vf_yadif if deinterlacing is not supported otherwise.)
  • Native VAAPI support
  • OS X: VDA support using libavcodec hwaccel API instead of FFmpeg's decoder. Up to 2-2.5x reduction in CPU usage.
  • Make hardware decoding in general work with the opengl video output.
  • Lua scripting (see `LUA SCRIPTING`_)
  • A client API, that allows embedding mpv into applications (see libmpv/client.h in the sources)
  • General bug fixes and removal of long-standing issues
  • General code cleanups (including refactoring or rewrites of many parts)
  • Many more changes

Detailed Listing of User-visible Changes

This listing is about changed command line switches, slave commands, and similar things. Completely removed features are not listed.

Command Line Switches

  • There is a new command line syntax, which is generally preferred over the old syntax. -optname optvalue becomes --optname=optvalue.

    The old syntax will not be removed. However, the new syntax is mentioned in all documentation and so on, and unlike the old syntax is not ambiguous, so it is a good thing to know about this change.

  • In general, negating switches like -noopt now have to be written as -no-opt or --no-opt.

  • Per-file options are not the default anymore. You can explicitly specify file-local options. See Usage section.

  • Many options have been renamed, removed or changed semantics. Some options that are required for a good playback experience with MPlayer are now superfluous or even worse than the defaults, so make sure to read the manual before trying to use your existing configuration with mpv.

  • Table of renamed/replaced switches:

    Old

    New

    -no<opt>

    --no-<opt> (add a dash)

    -a52drc level

    --ad-lavc-ac3drc=level

    -ac spdifac3

    --ad=spdif:ac3 (see --ad=help)

    -af volnorm

    --af=drc (renamed)

    -afm hwac3

    --ad=spdif:ac3,spdif:dts

    -ao alsa:device=hw=0.3

    --ao=alsa:device=[hw:0,3]

    -aspect

    --video-aspect

    -ass-bottom-margin

    --vf=sub=bottom:top

    -ass

    --sub-ass

    -audiofile-cache

    (removed; the main cache settings are used)

    -audiofile

    --audio-file

    -benchmark

    --untimed (no stats)

    -capture

    --stream-capture=<filename>

    -channels

    --audio-channels (changed semantics)

    -cursor-autohide-delay

    --cursor-autohide

    -delay

    --audio-delay

    -dumpstream

    --stream-dump=<filename>

    -dvdangle

    --dvd-angle

    -endpos

    --length

    -font

    --osd-font

    -forcedsubsonly

    --sub-forced-only

    -forceidx

    --index

    -format

    --audio-format

    -fsmode-dontuse

    (removed)

    -fstype

    --x11-netwm (changed semantics)

    -hardframedrop

    --framedrop=hard

    -identify

    (removed; use TOOLS/mpv_identify.sh)

    -idx

    --index

    -lavdopts ...

    --vd-lavc-...

    -lavfdopts

    --demuxer-lavf-...

    -lircconf

    --input-lirc-conf

    -loop 0

    --loop=inf

    -mixer-channel

    AO suboptions (alsa, oss)

    -mixer

    AO suboptions (alsa, oss)

    -mouse-movements

    --input-cursor

    -msgcolor

    --msg-color

    -msglevel

    --msg-level (changed semantics)

    -msgmodule

    --msg-module

    -name

    --x11-name

    -noar

    --no-input-appleremote

    -noautosub

    --no-sub-auto

    -noconsolecontrols

    --no-input-terminal

    -nojoystick

    --no-input-joystick

    -nosound

    --no-audio

    -osdlevel

    --osd-level

    -panscanrange

    --video-zoom, --video-pan-x/y

    -playing-msg

    --term-playing-msg

    -pp ...

    '--vf=pp=[...]'

    -pphelp

    --vf=pp:help

    -rawaudio ...

    --demuxer-rawaudio-...

    -rawvideo ...

    --demuxer-rawvideo-...

    -spugauss

    --sub-gauss

    -srate

    --audio-samplerate

    -ss

    --start

    -ssf <sub>

    --sws-...

    -stop-xscreensaver

    --stop-screensaver

    -sub-fuzziness

    --sub-auto

    -sub

    --sub-file

    -subcp

    --sub-codepage

    -subdelay

    --sub-delay

    -subfile

    --sub-file

    -subfont-*

    --sub-text-*, --osd-*

    -subfont-text-scale

    --sub-scale

    -subfont

    --sub-text-font

    -subfps

    --sub-fps

    -subpos

    --sub-pos

    -sws

    --sws-scaler

    -tvscan

    --tv-scan

    -use-filename-title

    --title='${filename}'

    -vc ffh264vdpau (etc.)

    --hwdec=vdpau

    -vobsub

    --sub-file (pass the .idx file)

    -x W, -y H

    --geometry=WxH + --no-keepaspect

    -xineramascreen

    --screen (different values)

    -xy W

    --autofit=W

    -zoom

    Inverse available as --video-unscaled

    dvdnav://

    dvdnav://menu

    dvd://1

    dvd://0 (0-based offset)

Note

-opt val becomes --opt=val.

Note

Quite some video filters, video outputs, audio filters, audio outputs, had changes in their option parsing. These aren't mentioned in the table above.

Also, some video and audio filters have been removed, and you have to use libavfilter (using --vf=lavfi=[...] or --af=lavfi=[...]) to get them back.

input.conf and Slave Commands

  • Table of renamed input commands:

    This lists only commands that are not always gracefully handled by the internal legacy translation layer. If an input.conf contains any legacy commands, a warning will be printed when starting the player. The warnings also show the replacement commands.

    Properties containing _ to separate words use - instead.

    Old

    New

    pt_step 1 [0|1]

    playlist_next [weak|force] (translation layer cannot deal with whitespace)

    pt_step -1 [0|1]

    playlist_prev [weak|force] (same)

    switch_ratio [<ratio>]

    set video-aspect <ratio>

    set video-aspect 0 (reset aspect)

    step_property_osd <prop> <step> <dir>

    cycle <prop> <step> (wraps), add <prop> <step> (clamps). <dir> parameter unsupported. Use a negative <step> instead.

    step_property <prop> <step> <dir>

    Prefix cycle or add with no-osd: no-osd cycle <prop> <step>

    osd_show_property_text <text>

    show_text <text> The property expansion format string syntax slightly changed.

    osd_show_text

    Now does the same as osd_show_property_text. Use the raw prefix to disable property expansion.

    show_tracks

    show_text ${track-list}

    show_chapters

    show_text ${chapter-list}

    af_switch, af_add, ...

    af set|add|...

    tv_start_scan

    set tv-scan yes

    tv_set_channel <val>

    set tv-channel <val>

    tv_step_channel

    cycle tv-channel

    dvb_set_channel <v1> <v2>

    set dvb-channel <v1>-<v2>

    dvb_step_channel

    cycle dvb-channel

    tv_set_freq <val>

    set tv-freq <val>

    tv_step_freq

    cycle tv-freq

    tv_set_norm <norm>

    set tv-norm <norm>

    tv_step_norm

    cycle tv-norm

    Note

    Due to lack of hardware and users using the TV/DVB/PVR features, and due to the need to cleanup the related command code, it's possible that the new commands are buggy or behave worse. This can be improved if testers are available. Otherwise, some of the TV code will be removed at some point.

Slave mode

  • Slave mode was removed. A proper slave mode application needed tons of code and hacks to get it right. The main problem is that slave mode is a bad and incomplete interface, and to get around that, applications parsed output messages intended for users. It is hard to know which messages exactly are parsed by slave mode applications. This makes it virtually impossible to improve terminal output intended for users without possibly breaking something.

    This is absolutely insane, and since initial improvements to mpv quickly made slave mode incompatible to most applications, it was removed as useless cruft. The client API (see below) is provided instead.

    --identify was replaced by the TOOLS/mpv_identify.sh wrapper script.

  • For some time (until including release 0.4.x), mpv supported a --slave-broken option. The following options are equivalent:

    --input-file=/dev/stdin --input-terminal=no
    

    Assuming the system supports /dev/stdin.

    (The option was readded in 0.5.1 and sets exactly these options.)

  • A JSON RPC protocol giving access to the client API is planned, but nothing has emerged yet.

  • mpv also provides a client API, which can be used to embed the player by loading it as shared library. (See libmpv/client.h in the sources.) It might also be possible to implement a custom slave mode-like protocol using Lua scripting.

Policy for Removed Features

mpv is in active development. If something is in the way of more important development (such as fixing bugs or implementing new features), we sometimes remove features. Usually this happens only with old features that either seem to be useless, or are not used by anyone. Often these are obscure, or "inherited", or were marked experimental, but never received any particular praise by any users.

Sometimes, features are replaced by something new. The new code will be either simpler or more powerful, but doesn't necessarily provide everything the old feature did.

We can not exclude that we accidentally remove features that are actually popular. Generally, we do not know how much a specific functionality is used. If you miss a feature and think it should be re-added, please open an issue on the mpv bug tracker. Hopefully, a solution can be found. Often, it turns out that re-adding something is not much of a problem, or that there are better alternatives.

Why this Fork?

mplayer2 is practically dead, and mpv started out as a branch containing new/experimental development. (Some of it was merged right after the fork was made public, seemingly as an acknowledgment that development, or at least merging, should have been more active.)

MPlayer is focused on not breaking anything, but is stuck with a horrible codebase resistant to cleanup. (Unless you do what mpv did - merciless and consequent pruning of bad, old code.) Cleanup and keeping broken things conflict, so the kind of development mpv strives for can't be done within MPlayer due to clashing development policies.

Additionally, mplayer2 already had lots of changes over MPlayer, which would have needed to be backported to the MPlayer codebase. This would not only have been hard (several years of diverging development), but also would have been impossible due to the aforementioned MPlayer development policy.