diff options
Diffstat (limited to 'etc')
-rw-r--r-- | etc/_mpv.zsh | 265 | ||||
-rw-r--r-- | etc/builtin.conf | 80 | ||||
-rw-r--r-- | etc/encoding-profiles.conf | 224 | ||||
-rw-r--r-- | etc/input.conf | 181 | ||||
-rw-r--r-- | etc/meson.build | 20 | ||||
-rw-r--r-- | etc/mplayer-input.conf | 93 | ||||
-rw-r--r-- | etc/mpv-gradient.svg | 198 | ||||
-rw-r--r-- | etc/mpv-icon-8bit-128x128.png | bin | 0 -> 22984 bytes | |||
-rw-r--r-- | etc/mpv-icon-8bit-16x16.png | bin | 0 -> 759 bytes | |||
-rw-r--r-- | etc/mpv-icon-8bit-32x32.png | bin | 0 -> 2124 bytes | |||
-rw-r--r-- | etc/mpv-icon-8bit-64x64.png | bin | 0 -> 5686 bytes | |||
-rw-r--r-- | etc/mpv-icon.ico | bin | 0 -> 270345 bytes | |||
-rw-r--r-- | etc/mpv-symbolic.svg | 68 | ||||
-rw-r--r-- | etc/mpv.bash-completion | 123 | ||||
-rw-r--r-- | etc/mpv.conf | 143 | ||||
-rw-r--r-- | etc/mpv.desktop | 44 | ||||
-rw-r--r-- | etc/mpv.metainfo.xml | 29 | ||||
-rw-r--r-- | etc/mpv.svg | 86 | ||||
-rw-r--r-- | etc/restore-old-bindings.conf | 59 |
19 files changed, 1613 insertions, 0 deletions
diff --git a/etc/_mpv.zsh b/etc/_mpv.zsh new file mode 100644 index 0000000..c34a381 --- /dev/null +++ b/etc/_mpv.zsh @@ -0,0 +1,265 @@ +#compdef mpv + +# ZSH completion for mpv +# +# For customization, see: +# https://github.com/mpv-player/mpv/wiki/Zsh-completion-customization + +# +# This file is part of mpv. +# +# mpv is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# mpv is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with mpv. If not, see <http://www.gnu.org/licenses/>. +# + +local curcontext="$curcontext" state state_descr line +typeset -A opt_args + +local -a match mbegin mend +local MATCH MBEGIN MEND + +# By default, don't complete URLs unless no files match +local -a tag_order +zstyle -a ":completion:*:*:$service:*" tag-order tag_order || + zstyle ":completion:*:*:$service:*" tag-order '!urls' + +typeset -ga _mpv_completion_arguments _mpv_completion_protocols + +function _mpv_generate_arguments { + + _mpv_completion_arguments=() + + local -a option_aliases=() + + local list_options_line + for list_options_line in "${(@f)$($~words[1] --no-config --list-options)}"; do + + [[ $list_options_line =~ $'^[ \t]+--([^ \t]+)[ \t]*(.*)' ]] || continue + + local name=$match[1] desc=$match[2] + + if [[ $desc == Flag* ]]; then + + _mpv_completion_arguments+="$name" + if [[ $name != (\{|\}|v|list-options) ]]; then + # Negated version + _mpv_completion_arguments+="no-$name" + fi + + elif [[ -z $desc ]]; then + + # Sub-option for list option + + if [[ $name == *-(clr|help) ]]; then + # Like a flag + _mpv_completion_arguments+="$name" + else + # Find the parent option and use that with this option's name + _mpv_completion_arguments+="${_mpv_completion_arguments[(R)${name%-*}=*]/*=/$name=}" + fi + + elif [[ $desc == Print* ]]; then + + _mpv_completion_arguments+="$name" + + elif [[ $desc =~ $'^alias for (--)?([^ \t]+)' ]]; then + + # Save this for later; we might not have parsed the target option yet + option_aliases+="$name $match[2]" + + elif [[ $desc =~ $'^removed ' ]]; then + + # skip + + else + + # Option takes argument + + local entry="$name=-:${desc//:/\\:}:" + + if [[ $desc =~ '^Choices: ([^(]*)' ]]; then + + local -a choices=(${(s: :)match[1]}) + entry+="($choices)" + # If "no" is one of the choices, it can also be negated like a flag + # (--no-whatever is equivalent to --whatever=no). + if (( ${+choices[(r)no]} )); then + _mpv_completion_arguments+="no-$name" + fi + + elif [[ $desc == *'[file]'* ]]; then + + entry+='->files' + + elif [[ $name == (ao|vo|af|vf|profile|audio-device|vulkan-device) ]]; then + + entry+="->parse-help-$name" + + elif [[ $name == show-profile ]]; then + + entry+="->parse-help-profile" + + elif [[ $name == h(|elp) ]]; then + + entry+="->help-options" + + fi + + _mpv_completion_arguments+="$entry" + + fi + + done + + # Process aliases + local to_from real_name arg_spec + for to_from in $option_aliases; do + # to_from='alias-name real-name' + real_name=${to_from##* } + for arg_spec in "$real_name" "$real_name=*" "no-$real_name"; do + arg_spec=${_mpv_completion_arguments[(r)$arg_spec]} + [[ -n $arg_spec ]] && + _mpv_completion_arguments+="${arg_spec/$real_name/${to_from%% *}}" + done + done + + # Older versions of zsh have a bug where they won't complete an option listed + # after one that's a prefix of it. To work around this, we can sort the + # options by length, longest first, so that any prefix of an option will be + # listed after it. On newer versions of zsh where the bug is fixed, we skip + # this to avoid slowing down the first tab press any more than we have to. + autoload -Uz is-at-least + if ! is-at-least 5.2; then + # If this were a real language, we wouldn't have to sort by prepending the + # length, sorting the whole thing numerically, and then removing it again. + local -a sort_tmp=() + for arg_spec in $_mpv_completion_arguments; do + sort_tmp+=${#arg_spec%%=*}_$arg_spec + done + _mpv_completion_arguments=(${${(On)sort_tmp}/#*_}) + fi + +} + +function _mpv_generate_protocols { + _mpv_completion_protocols=() + local list_protos_line + for list_protos_line in "${(@f)$($~words[1] --no-config --list-protocols)}"; do + if [[ $list_protos_line =~ $'^[ \t]+(.*)' ]]; then + _mpv_completion_protocols+="$match[1]" + fi + done +} + +function _mpv_generate_if_changed { + # Called with $1 = 'arguments' or 'protocols'. Generates the respective list + # on the first run and re-generates it if the executable being completed for + # is different than the one we used to generate the cached list. + typeset -gA _mpv_completion_binary + local current_binary=${~words[1]:c} + zmodload -F zsh/stat b:zstat + current_binary+=T$(zstat +mtime $current_binary) + if [[ $_mpv_completion_binary[$1] != $current_binary ]]; then + # Use PCRE for regular expression matching if possible. This approximately + # halves the execution time of generate_arguments compared to the default + # POSIX regex, which translates to a more responsive first tab press. + # However, we can't rely on PCRE being available, so we keep all our + # patterns POSIX-compatible. + zmodload -s -F zsh/pcre C:pcre-match && setopt re_match_pcre + _mpv_generate_$1 + _mpv_completion_binary[$1]=$current_binary + fi +} + +# Only consider generating arguments if the argument being completed looks like +# an option. This way, the user should never see a delay when just completing a +# filename. +if [[ $words[$CURRENT] == -* ]]; then + _mpv_generate_if_changed arguments +fi + +local rc=1 + +_arguments -C -S \*--$_mpv_completion_arguments '*:files:->mfiles' && rc=0 + +case $state in + + parse-help-*) + local option_name=${state#parse-help-} + local no_config="--no-config" + # Can't do non-capturing groups without pcre, so we index the ones we want + local pattern name_group=1 desc_group=2 + case $option_name in + audio-device|vulkan-device) + pattern=$'^[ \t]+'\''([^'\'']*)'\'$'[ \t]+''\((.*)\)' + ;; + profile) + # The generic pattern would actually work in most cases for --profile, + # but would break if a profile name contained spaces. This stricter one + # only breaks if a profile name contains tabs. + pattern=$'^\t([^\t]*)\t(.*)' + # We actually want config so we can autocomplete the user's profiles + no_config="" + ;; + *) + pattern=$'^[ \t]+(--'${option_name}$'=)?([^ \t]+)[ \t]*[-:]?[ \t]*(.*)' + name_group=2 desc_group=3 + ;; + esac + local -a values + local current + for current in "${(@f)$($~words[1] ${no_config} --${option_name}=help)}"; do + [[ $current =~ $pattern ]] || continue; + local name=${match[name_group]//:/\\:} desc=${match[desc_group]} + if [[ -n $desc ]]; then + values+="${name}:${desc}" + else + values+="${name}" + fi + done + (( $#values )) && { + compset -P '*,' + compset -S ',*' + _describe "$state_descr" values -r ',=: \t\n\-' && rc=0 + } + ;; + + files) + compset -P '*,' + compset -S ',*' + _files -r ',/ \t\n\-' && rc=0 + ;; + + mfiles) + local expl + _tags files urls + while _tags; do + _requested files expl 'media file' _files && rc=0 + if _requested urls; then + while _next_label urls expl URL; do + _urls "$expl[@]" && rc=0 + _mpv_generate_if_changed protocols + compadd -S '' "$expl[@]" $_mpv_completion_protocols && rc=0 + done + fi + (( rc )) || return 0 + done + ;; + + help-options) + compadd ${${${_mpv_completion_arguments%%=*}:#no-*}:#*-(add|append|clr|pre|set|remove|toggle)} + ;; + +esac + +return rc diff --git a/etc/builtin.conf b/etc/builtin.conf new file mode 100644 index 0000000..7bfbace --- /dev/null +++ b/etc/builtin.conf @@ -0,0 +1,80 @@ +# This file is baked into the mpv binary at compile time, and automatically +# loaded at early initialization time. Some of the profiles are automatically +# applied at later stages during loading. + +# Note: this contains profiles only. The option defaults for normal options +# (i.e. the default profile) are defined in C code. Do NOT set any +# options in the default profile here. It won't work correctly in subtle +# ways. +# +# To see the normal option defaults, run: mpv --list-options + +[pseudo-gui] +player-operation-mode=pseudo-gui + +[builtin-pseudo-gui] +terminal=no +force-window=yes +idle=once +screenshot-dir=~~desktop/ + +[libmpv] +config=no +idle=yes +terminal=no +input-terminal=no +osc=no +input-default-bindings=no +input-vo-keyboard=no +# OSX/Cocoa global input hooks +input-media-keys=no + +[encoding] +vo=lavc +ao=lavc +keep-open=no +force-window=no +gapless-audio=yes +resume-playback=no +load-scripts=no +osc=no +framedrop=no + +[fast] +scale=bilinear +dscale=bilinear +dither=no +correct-downscaling=no +linear-downscaling=no +sigmoid-upscaling=no +hdr-compute-peak=no +allow-delayed-peak-detect=yes + +[high-quality] +scale=ewa_lanczossharp +hdr-peak-percentile=99.995 +hdr-contrast-recovery=0.30 +deband=yes + +# Deprecated alias +[gpu-hq] +profile=high-quality + +[low-latency] +audio-buffer=0 # minimize extra audio buffer (can lead to dropouts) +vd-lavc-threads=1 # multithreaded decoding buffers extra frames +cache-pause=no # do not pause on underruns +demuxer-lavf-o-add=fflags=+nobuffer # can help for weird reasons +demuxer-lavf-probe-info=nostreams # avoid probing unless absolutely needed +demuxer-lavf-analyzeduration=0.1 # if it probes, reduce it +video-sync=audio # DS currently requires reading ahead a frame +interpolation=no # requires reference frames (more buffering) +video-latency-hacks=yes # typically 1 or 2 video frame less latency +stream-buffer-size=4k # minimal buffer size; normally not needed + +[sw-fast] +# For VOs which use software scalers, also affects screenshots and others. +sws-scaler=bilinear +sws-fast=yes +zimg-scaler=bilinear +zimg-dither=no diff --git a/etc/encoding-profiles.conf b/etc/encoding-profiles.conf new file mode 100644 index 0000000..77a0d91 --- /dev/null +++ b/etc/encoding-profiles.conf @@ -0,0 +1,224 @@ +# +# mpv configuration file +# + +######################### +# encoding profile file # +######################### +# +# Note: by default, this file is installed to /etc/mpv/encoding-profiles.conf +# (or a different location, depending on --prefix). mpv will load it by +# default on program start. If ~/.mpv/encoding-profiles.conf exists, this file +# will be loaded instead. +# +# Then, list all profiles by +# mpv --profile=help | grep enc- +# +# The following kinds of encoding profiles exist: +# enc-a-*: initialize an audio codec including good defaults +# enc-v-*: initialize a video codec including good defaults +# enc-f-*: initialize a file format including good defaults, including +# selecting and initializing a good audio and video codec +# enc-to-*: load known good settings for a target device; this typically +# includes selecting an enc-f-* profile, then adjusting some +# settings like frame rate, resolution and codec parameters +# +# AFTER including a profile of these, you can of course still change +# options, or even switch to another codec. +# +# You can view the exact options a profile sets by +# mpv --show-profile=enc-to-hp-slate-7 +# +# Examples: +# mpv --profile=enc-to-dvdpal --o=outfile.mpg infile.mkv +# mpv --profile=enc-f-avi --vf=fps=30 --o=outfile.avi infile.mkv +# mpv --profile=enc-v-mpeg4 --ovcopts-add=qscale=7 --profile=enc-a-mp3 --oacopts-add=b=320k --o=outfile.avi infile.mkv + +################ +# audio codecs # +################ +[enc-a-aac] +profile-desc = "AAC (libfdk-aac or FFmpeg)" +oac = libfdk_aac,aac +oacopts = b=96k + +[enc-a-ac3] +profile-desc = "AC3 (FFmpeg)" +oac = ac3 +oacopts = b=448k + +[enc-a-mp3] +profile-desc = "MP3 (LAME)" +oac = libmp3lame +oacopts = b=128k + +[enc-a-vorbis] +profile-desc = "Vorbis (libvorbis or FFmpeg)" +oac = libvorbis,vorbis +oacopts = qscale=3 + +[enc-a-opus] +profile-desc = "Opus (libopus or FFmpeg)" +oac = libopus,opus +audio-samplerate = 48000 +oacopts = b=96k + +################ +# video codecs # +################ +[enc-v-h263] +profile-desc = "H.263 (FFmpeg)" +ovc = h263 +ovcopts = qscale=4 + +[enc-v-h264] +profile-desc = "H.264 (x264)" +ovc = libx264 +ovcopts = preset=medium,crf=23,threads=0 +# If you want to restrict the output video to something compatible with most +# hardware and basic decoders, add "profile=high,level=41" to ovcopts above and +# uncomment the following line to avoid errors when source video isn't yuv420p: +#vf-add = format=yuv420p + +[enc-v-mpeg2] +profile-desc = "MPEG-2 Video (FFmpeg)" +ovc = mpeg2video + +[enc-v-mpeg4] +profile-desc = "MPEG-4 Part 2 (FFmpeg)" +ovc = mpeg4 +ovcopts = qscale=4 + +[enc-v-vp8] +profile-desc = "VP8 (libvpx)" +ovc = libvpx +ovcopts = speed=0,lag-in-frames=8,slices=2,threads=0,b=2M,crf=10,qmin=0,qmax=36 + +[enc-v-vp9] +profile-desc = "VP9 (libvpx)" +ovc = libvpx-vp9 +ovcopts = speed=6,lag-in-frames=8,slices=2,threads=0,crf=18,qmin=0,qmax=36 + +########### +# formats # +########### +[enc-f-3gp] +profile-desc = "H.263 + AAC (for 3GP)" +of = 3gp +profile = enc-v-h263 +profile = enc-a-aac +ofopts = "" + +[enc-f-avi] +profile-desc = "MPEG-4 + MP3 (for AVI)" +of = avi +profile = enc-v-mpeg4 +profile = enc-a-mp3 +ofopts = "" + +[enc-f-mp4] +profile-desc = "H.264 + AAC (for MP4)" +of = mp4 +profile = enc-v-h264 +profile = enc-a-aac +## equivalent to using qt-faststart tool +## can be used to speed up seeking when streaming +# ofopts = movflags=+faststart + +[enc-f-webm] +profile-desc = "VP9 + Opus (for WebM)" +of = webm +profile = enc-v-vp9 +profile = enc-a-opus +ofopts = "" + +################## +# target devices # +################## +[enc-to-dvdpal] +profile-desc = "DVD-Video PAL, use dvdauthor -v pal -a ac3+en (MUST be used with 4:3 or 16:9 aspect, and 720x576, 704x576, 352x576 or 352x288 resolution)" +profile = enc-v-mpeg2 +profile = enc-a-ac3 +of = dvd +ofopts-append = packetsize=2048 +ofopts-append = muxrate=10080000 +vf-add = fps=25 +audio-samplerate = 48000 +ovcopts = g=15,b=6000000,maxrate=9000000,minrate=0,bufsize=1835008 + +[enc-to-dvdntsc] +profile-desc = "DVD-Video NTSC, use dvdauthor -v ntsc -a ac3+en (MUST be used with 4:3 or 16:9 aspect, and 720x480, 704x480, 352x480 or 352x240 resolution)" +profile = enc-v-mpeg2 +profile = enc-a-ac3 +of = dvd +ofopts-append = packetsize=2048 +ofopts-append = muxrate=10080000 +vf-add = fps="24000/1001" +audio-samplerate = 48000 +ovcopts = g=18,b=6000000,maxrate=9000000,minrate=0,bufsize=1835008 + +[enc-to-nok-n900] +profile-desc = "MP4 for Nokia N900" +profile = enc-f-mp4 +# DW = 800, DH = 480, SAR = 1 +vf-add = lavfi=graph="scale=floor(min(min(800\,dar*480)\,in_w*max(1\,sar))/2+0.5)*2:floor(min(min(800/dar\,480)\,in_h*max(1/sar\,1))/2+0.5)*2,setsar=sar=1" +ovcopts-append = profile=baseline +ovcopts-append = level=30 +ovcopts-append = maxrate=10000k +ovcopts-append = bufsize=10000k +ovcopts-append = rc_init_occupancy=9000k +ovcopts-append = refs=5 + +[enc-to-nok-6300] +profile-desc = "3GP for Nokia 6300" +profile = enc-f-3gp +vf-add = fps=25 +vf-add = lavfi=graph="scale=176:144" +audio-samplerate = 16000 +audio-channels = 1 +oacopts-add = b=32k + +[enc-to-hp-slate-7] +profile-desc = "MP4 for HP Slate 7 (1024x600, crazy aspect)" +profile = enc-f-mp4 +ovcopts-add = profile=high +# DW = 1024, DH = 600, DAR = 97:54 (=> SAR = 2425:2304) +vf-add = lavfi=graph="scale=floor(min(1024*min(1\,dar/(97/54))\,in_w)/2+0.5)*2:floor(min(600*min((97/54)/dar\,1)\,in_h)/2+0.5)*2,setsar=sar=sar/(2425/2304)" + +# Advanced scaling for specific output devices - how it works: +# DW = display width (px) (1024) +# DH = display height (px) (600) +# SAR = display sample aspect ratio, i.e. DAR * DH / DW (2425:2304) +# DAR = display aspect ratio, i.e. SAR * DW / DH (97:54) +# Variant: zoomed out +# vf-add = lavfi=graph="scale=floor(min(DW*min(1\,dar/DAR)\,in_w*max(1\,sar/SAR))/2+0.5)*2:floor(min(DH*min(DAR/dar\,1)\,in_h*max(SAR/sar\,1))/2+0.5)*2,setsar=sar=1" +# Variant: zoomed in +# vf-add = lavfi=graph="scale=floor(min(DW*max(1\,dar/DAR)\,in_w*max(1\,sar/SAR))/2+0.5)*2:floor(min(DH*max(DAR/dar\,1)\,in_h*max(SAR/sar\,1))/2+0.5)*2,setsar=sar=1" +# How it works: +# 1a: DW, DH*dar/DAR - fit to display width +# 1b: DH*DAR/dar, DH - fit to display height +# 1: the min of 1a and 1b these (i.e. fit inside both width and height); for zoomed in view, use the max +# 2a: in_w, in_h*SAR/sar - fit to original width +# 2b: in_w*sar/SAR, in_h - fit to original height +# 2: the max of 2a and 2b (i.e. avoid enlarging both dimensions - let HW scaling handle this) +# output: the min of 1 and 2 (i.e. fulfill both constraints) +# setsar=sar=1 to prevent scaling on the device (skip this if the device actually wants the proper SAR to be specified for not performing needless scaling) +# +# Simplified special case for SAR == 1, DAR == DW/DH: +# Variant: zoomed out +# vf-add = lavfi=graph="scale=floor(min(min(DW\,dar*DH)\,in_w*max(1\,sar))/2+0.5)*2:floor(min(min(DW/dar\,DH)\,in_h*max(1/sar\,1))/2+0.5)*2,setsar=sar=1" +# Variant: zoomed in +# vf-add = lavfi=graph="scale=floor(min(max(DW\,dar*DH)\,in_w*max(1\,sar))/2+0.5)*2:floor(min(max(DW/dar\,DH)\,in_h*max(1/sar\,1))/2+0.5)*2,setsar=sar=1" +# setsar=sar=1 to prevent nasty almost-1 SAR to be passed to the codec due to the rounding which can fail +# +# If the device supports file SAR properly, we can make use of it to avoid +# upscaling. The setsar=sar=sar/SAR at the end serves to fake the SAR for devices that don't know their own display's SAR. +# Variant: zoomed out +# vf-add = lavfi=graph="scale=floor(min(DW*min(1\,dar/DAR)\,in_w)/2+0.5)*2:floor(min(DH*min(DAR/dar\,1)\,in_h)/2+0.5)*2,setsar=sar=sar/SAR" +# Variant: zoomed in +# vf-add = lavfi=graph="scale=floor(min(DW*max(1\,dar/DAR)\,in_w)/2+0.5)*2:floor(min(DH*max(DAR/dar\,1)\,in_h)/2+0.5)*2,setsar=sar=sar/SAR" +# Simplified special case for SAR == 1, DAR == DW/DH: +# Variant: zoomed out +# vf-add = lavfi=graph="scale=floor(min(min(DW\,dar*DH)\,in_w)/2+0.5)*2:floor(min(min(DW/dar\,DH)\,in_h)/2+0.5)*2" +# Variant: zoomed in +# vf-add = lavfi=graph="scale=floor(min(max(DW\,dar*DH)\,in_w)/2+0.5)*2:floor(min(max(DW/dar\,DH)\,in_h)/2+0.5)*2" diff --git a/etc/input.conf b/etc/input.conf new file mode 100644 index 0000000..0b0e6da --- /dev/null +++ b/etc/input.conf @@ -0,0 +1,181 @@ +# mpv keybindings +# +# Location of user-defined bindings: ~/.config/mpv/input.conf +# +# Lines starting with # are comments. Use SHARP to assign the # key. +# Copy this file and uncomment and edit the bindings you want to change. +# +# List of commands and further details: DOCS/man/input.rst +# List of special keys: --input-keylist +# Keybindings testing mode: mpv --input-test --force-window --idle +# +# Use 'ignore' to unbind a key fully (e.g. 'ctrl+a ignore'). +# +# Strings need to be quoted and escaped: +# KEY show-text "This is a single backslash: \\ and a quote: \" !" +# +# You can use modifier-key combinations like Shift+Left or Ctrl+Alt+x with +# the modifiers Shift, Ctrl, Alt and Meta (may not work on the terminal). +# +# The default keybindings are hardcoded into the mpv binary. +# You can disable them completely with: --no-input-default-bindings + +# Developer note: +# On compilation, this file is baked into the mpv binary, and all lines are +# uncommented (unless '#' is followed by a space) - thus this file defines the +# default key bindings. + +# If this is enabled, treat all the following bindings as default. +#default-bindings start + +#MBTN_LEFT ignore # don't do anything +#MBTN_LEFT_DBL cycle fullscreen # toggle fullscreen +#MBTN_RIGHT cycle pause # toggle pause/playback mode +#MBTN_BACK playlist-prev # skip to the previous file +#MBTN_FORWARD playlist-next # skip to the next file + +# Mouse wheels, touchpad or other input devices that have axes +# if the input devices supports precise scrolling it will also scale the +# numeric value accordingly +#WHEEL_UP add volume 2 +#WHEEL_DOWN add volume -2 +#WHEEL_LEFT seek -10 # seek 10 seconds backward +#WHEEL_RIGHT seek 10 # seek 10 seconds forward + +## Seek units are in seconds, but note that these are limited by keyframes +#RIGHT seek 5 # seek 5 seconds forward +#LEFT seek -5 # seek 5 seconds backward +#UP seek 60 # seek 1 minute forward +#DOWN seek -60 # seek 1 minute backward +# Do smaller, always exact (non-keyframe-limited), seeks with shift. +# Don't show them on the OSD (no-osd). +#Shift+RIGHT no-osd seek 1 exact # seek exactly 1 second forward +#Shift+LEFT no-osd seek -1 exact # seek exactly 1 second backward +#Shift+UP no-osd seek 5 exact # seek exactly 5 seconds forward +#Shift+DOWN no-osd seek -5 exact # seek exactly 5 seconds backward +#Ctrl+LEFT no-osd sub-seek -1 # seek to the previous subtitle +#Ctrl+RIGHT no-osd sub-seek 1 # seek to the next subtitle +#Ctrl+Shift+LEFT sub-step -1 # change subtitle timing such that the previous subtitle is displayed +#Ctrl+Shift+RIGHT sub-step 1 # change subtitle timing such that the next subtitle is displayed +#Alt+left add video-pan-x 0.1 # move the video right +#Alt+right add video-pan-x -0.1 # move the video left +#Alt+up add video-pan-y 0.1 # move the video down +#Alt+down add video-pan-y -0.1 # move the video up +#Alt++ add video-zoom 0.1 # zoom in +#ZOOMIN add video-zoom 0.1 # zoom in +#Alt+- add video-zoom -0.1 # zoom out +#ZOOMOUT add video-zoom -0.1 # zoom out +#Alt+BS set video-zoom 0 ; set video-pan-x 0 ; set video-pan-y 0 # reset zoom and pan settings +#PGUP add chapter 1 # seek to the next chapter +#PGDWN add chapter -1 # seek to the previous chapter +#Shift+PGUP seek 600 # seek 10 minutes forward +#Shift+PGDWN seek -600 # seek 10 minutes backward +#[ multiply speed 1/1.1 # decrease the playback speed +#] multiply speed 1.1 # increase the playback speed +#{ multiply speed 0.5 # halve the playback speed +#} multiply speed 2.0 # double the playback speed +#BS set speed 1.0 # reset the speed to normal +#Shift+BS revert-seek # undo the previous (or marked) seek +#Shift+Ctrl+BS revert-seek mark # mark the position for revert-seek +#q quit +#Q quit-watch-later # exit and remember the playback position +#q {encode} quit 4 +#ESC set fullscreen no # leave fullscreen +#ESC {encode} quit 4 +#p cycle pause # toggle pause/playback mode +#. frame-step # advance one frame and pause +#, frame-back-step # go back by one frame and pause +#SPACE cycle pause # toggle pause/playback mode +#> playlist-next # skip to the next file +#ENTER playlist-next # skip to the next file +#< playlist-prev # skip to the previous file +#O no-osd cycle-values osd-level 3 1 # toggle displaying the OSD on user interaction or always +#o show-progress # show playback progress +#P show-progress # show playback progress +#i script-binding stats/display-stats # display information and statistics +#I script-binding stats/display-stats-toggle # toggle displaying information and statistics +#` script-binding console/enable # open the console +#z add sub-delay -0.1 # shift subtitles 100 ms earlier +#Z add sub-delay +0.1 # delay subtitles by 100 ms +#x add sub-delay +0.1 # delay subtitles by 100 ms +#ctrl++ add audio-delay 0.100 # change audio/video sync by delaying the audio +#ctrl+- add audio-delay -0.100 # change audio/video sync by shifting the audio earlier +#Shift+g add sub-scale +0.1 # increase the subtitle font size +#Shift+f add sub-scale -0.1 # decrease the subtitle font size +#9 add volume -2 +#/ add volume -2 +#0 add volume 2 +#* add volume 2 +#m cycle mute # toggle mute +#1 add contrast -1 +#2 add contrast 1 +#3 add brightness -1 +#4 add brightness 1 +#5 add gamma -1 +#6 add gamma 1 +#7 add saturation -1 +#8 add saturation 1 +#Alt+0 set current-window-scale 0.5 # halve the window size +#Alt+1 set current-window-scale 1.0 # reset the window size +#Alt+2 set current-window-scale 2.0 # double the window size +#d cycle deinterlace # toggle the deinterlacing filter +#r add sub-pos -1 # move subtitles up +#R add sub-pos +1 # move subtitles down +#t add sub-pos +1 # move subtitles down +#v cycle sub-visibility # hide or show the subtitles +#Alt+v cycle secondary-sub-visibility # hide or show the secondary subtitles +#V cycle sub-ass-vsfilter-aspect-compat # toggle stretching SSA/ASS subtitles with anamorphic videos to match the historical renderer +#u cycle-values sub-ass-override "force" "yes" # toggle overriding SSA/ASS subtitle styles with the normal styles +#j cycle sub # switch subtitle track +#J cycle sub down # switch subtitle track backwards +#SHARP cycle audio # switch audio track +#_ cycle video # switch video track +#T cycle ontop # toggle placing the video on top of other windows +#f cycle fullscreen # toggle fullscreen +#s screenshot # take a screenshot of the video in its original resolution with subtitles +#S screenshot video # take a screenshot of the video in its original resolution without subtitles +#Ctrl+s screenshot window # take a screenshot of the window with OSD and subtitles +#Alt+s screenshot each-frame # automatically screenshot every frame; issue this command again to stop taking screenshots +#w add panscan -0.1 # decrease panscan +#W add panscan +0.1 # shrink black bars by cropping the video +#e add panscan +0.1 # shrink black bars by cropping the video +#A cycle-values video-aspect-override "16:9" "4:3" "2.35:1" "-1" # cycle the video aspect ratio ("-1" is the container aspect) +#POWER quit +#PLAY cycle pause # toggle pause/playback mode +#PAUSE cycle pause # toggle pause/playback mode +#PLAYPAUSE cycle pause # toggle pause/playback mode +#PLAYONLY set pause no # unpause +#PAUSEONLY set pause yes # pause +#STOP quit +#FORWARD seek 60 # seek 1 minute forward +#REWIND seek -60 # seek 1 minute backward +#NEXT playlist-next # skip to the next file +#PREV playlist-prev # skip to the previous file +#VOLUME_UP add volume 2 +#VOLUME_DOWN add volume -2 +#MUTE cycle mute # toggle mute +#CLOSE_WIN quit +#CLOSE_WIN {encode} quit 4 +#ctrl+w quit +#E cycle edition # switch edition +#l ab-loop # set/clear A-B loop points +#L cycle-values loop-file "inf" "no" # toggle infinite looping +#ctrl+c quit 4 +#DEL script-binding osc/visibility # cycle OSC visibility between never, auto (mouse-move) and always +#ctrl+h cycle-values hwdec "auto-safe" "no" # toggle hardware decoding +#F8 show-text ${playlist} # show the playlist +#F9 show-text ${track-list} # show the list of video, audio and sub tracks + +# +# Legacy bindings (may or may not be removed in the future) +# +#! add chapter -1 # seek to the previous chapter +#@ add chapter 1 # seek to the next chapter + +# +# Not assigned by default +# (not an exhaustive list of unbound commands) +# + +# ? cycle sub-forced-events-only # display only DVD/PGS forced subtitle events +# ? stop # stop playback (quit or enter idle mode) diff --git a/etc/meson.build b/etc/meson.build new file mode 100644 index 0000000..12fe732 --- /dev/null +++ b/etc/meson.build @@ -0,0 +1,20 @@ +icons = ['16', '32', '64', '128'] +foreach size: icons + name = 'mpv-icon-8bit-'+size+'x'+size+'.png' + icon = custom_target(name, + input: join_paths(source_root, 'etc', name), + output: name + '.inc', + command: [file2string, '@INPUT@', '@OUTPUT@'], + ) + sources += icon +endforeach + +etc_files = ['input.conf', 'builtin.conf'] +foreach file: etc_files + etc_file = custom_target(file, + input: join_paths(source_root, 'etc', file), + output: file + '.inc', + command: [file2string, '@INPUT@', '@OUTPUT@'], + ) + sources += etc_file +endforeach diff --git a/etc/mplayer-input.conf b/etc/mplayer-input.conf new file mode 100644 index 0000000..2d23e47 --- /dev/null +++ b/etc/mplayer-input.conf @@ -0,0 +1,93 @@ +## +## MPlayer-style key bindings +## +## Save it as ~/.config/mpv/input.conf to use it. +## +## Generally, it's recommended to use this as reference-only. +## + +RIGHT seek +10 +LEFT seek -10 +DOWN seek -60 +UP seek +60 +PGUP seek 600 +PGDWN seek -600 +m cycle mute +SHARP cycle audio # switch audio streams ++ add audio-delay 0.100 += add audio-delay 0.100 +- add audio-delay -0.100 +[ multiply speed 0.9091 # scale playback speed +] multiply speed 1.1 +{ multiply speed 0.5 +} multiply speed 2.0 +BS set speed 1.0 # reset speed to normal +q quit +ESC quit +ENTER playlist-next force # skip to next file +p cycle pause +. frame-step # advance one frame and pause +SPACE cycle pause +HOME set playlist-pos 0 # not the same as MPlayer +#END pt_up_step -1 +> playlist-next # skip to next file +< playlist-prev # previous +#INS alt_src_step 1 +#DEL alt_src_step -1 +o osd +I show-text "${filename}" # display filename in osd +P show-progress +z add sub-delay -0.1 # subtract 100 ms delay from subs +x add sub-delay +0.1 # add +9 add volume -1 +/ add volume -1 +0 add volume 1 +* add volume 1 +1 add contrast -1 +2 add contrast 1 +3 add brightness -1 +4 add brightness 1 +5 add hue -1 +6 add hue 1 +7 add saturation -1 +8 add saturation 1 +( add balance -0.1 # adjust audio balance in favor of left +) add balance +0.1 # right +d cycle framedrop +D cycle deinterlace # toggle deinterlacer (auto-inserted filter) +r add sub-pos -1 # move subtitles up +t add sub-pos +1 # down +#? sub-step +1 # immediately display next subtitle +#? sub-step -1 # previous +#? add sub-scale +0.1 # increase subtitle font size +#? add sub-scale -0.1 # decrease subtitle font size +f cycle fullscreen +T cycle ontop # toggle video window ontop of other windows +w add panscan -0.1 # zoom out with -panscan 0 -fs +e add panscan +0.1 # in +c cycle stream-capture # save (and append) file/stream to stream.dump with -capture +s screenshot # take a screenshot (if you want PNG, use "--screenshot-format=png") +S screenshot - each-frame # S will take a png screenshot of every frame + +h cycle tv-channel 1 +l cycle tv-channel -1 +n cycle tv-norm +#b tv_step_chanlist + +#? add chapter -1 # skip to previous dvd chapter +#? add chapter +1 # next + +## +## Advanced seek +## Uncomment the following lines to be able to seek to n% of the media with +## the Fx keys. +## +#F1 seek 10 absolute-percent +#F2 seek 20 absolute-percent +#F3 seek 30 absolute-percent +#F4 seek 40 absolute-percent +#F5 seek 50 absolute-percent +#F6 seek 60 absolute-percent +#F7 seek 70 absolute-percent +#F8 seek 80 absolute-percent +#F9 seek 90 absolute-percent diff --git a/etc/mpv-gradient.svg b/etc/mpv-gradient.svg new file mode 100644 index 0000000..c40fe71 --- /dev/null +++ b/etc/mpv-gradient.svg @@ -0,0 +1,198 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="64" + height="64" + viewBox="0 0 63.999999 63.999999" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + sodipodi:docname="mpv-gradient.svg"> + <defs + id="defs4"> + <linearGradient + inkscape:collect="always" + id="linearGradient4430"> + <stop + style="stop-color:#65376e;stop-opacity:1" + offset="0" + id="stop4432" /> + <stop + style="stop-color:#4c2354;stop-opacity:1" + offset="1" + id="stop4434" /> + </linearGradient> + <linearGradient + id="linearGradient4418" + inkscape:collect="always"> + <stop + id="stop4420" + offset="0" + style="stop-color:#e6e2e8;stop-opacity:1" /> + <stop + id="stop4422" + offset="1" + style="stop-color:#aaa3ad;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient4402"> + <stop + style="stop-color:#320f38;stop-opacity:1" + offset="0" + id="stop4404" /> + <stop + style="stop-color:#5a2963;stop-opacity:1" + offset="1" + id="stop4406" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient4392"> + <stop + style="stop-color:#6b3c74;stop-opacity:1" + offset="0" + id="stop4394" /> + <stop + style="stop-color:#461b4d;stop-opacity:1" + offset="1" + id="stop4396" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient4382"> + <stop + style="stop-color:#fafafa;stop-opacity:1" + offset="0" + id="stop4384" /> + <stop + style="stop-color:#bababa;stop-opacity:1" + offset="1" + id="stop4386" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4382" + id="linearGradient5278" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-86.873198,699.81912)" + x1="97.187729" + y1="305.67371" + x2="140.38228" + y2="335.64926" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4392" + id="linearGradient5280" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-32.973108,701.2155)" + x1="50.828064" + y1="298.31949" + x2="78.197021" + y2="339.65219" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4402" + id="linearGradient5282" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-31.48364,700.09839)" + x1="53.620815" + y1="305.76682" + x2="77.824654" + y2="331.73938" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4418" + id="linearGradient5284" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-87.152474,700.0053)" + x1="110.31366" + y1="312.28323" + x2="126.88398" + y2="329.41211" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4430" + id="linearGradient5286" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-87.152474,700.0053)" + x1="115.97468" + y1="317.41763" + x2="119.37984" + y2="322.43457" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="5.3710484" + inkscape:cx="-19.490294" + inkscape:cy="18.643164" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + units="px" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-988.3622)"> + <circle + style="opacity:1;fill:url(#linearGradient5278);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.10161044;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:1;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99215686" + id="path4380-0" + cx="32" + cy="1020.3622" + r="27.949194" /> + <circle + style="opacity:1;fill:url(#linearGradient5280);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.0988237;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:1;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99215686" + id="path4390-3" + cx="32.727058" + cy="1019.5079" + r="25.950588" /> + <circle + style="opacity:1;fill:url(#linearGradient5282);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:1;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99215686" + id="path4400-3" + cx="34.224396" + cy="1017.7957" + r="20" /> + <path + style="fill:url(#linearGradient5284);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 44.481446,1020.4807 a 12.848894,12.848894 0 0 1 -12.84889,12.8489 12.848894,12.848894 0 0 1 -12.8489,-12.8489 12.848894,12.848894 0 0 1 12.8489,-12.8489 12.848894,12.848894 0 0 1 12.84889,12.8489 z" + id="path4412-5" + inkscape:connector-curvature="0" /> + <path + style="fill:url(#linearGradient5286);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 28.374316,1014.709 0,11.4502 9.21608,-5.8647 z" + id="path4426-2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/etc/mpv-icon-8bit-128x128.png b/etc/mpv-icon-8bit-128x128.png Binary files differnew file mode 100644 index 0000000..1840269 --- /dev/null +++ b/etc/mpv-icon-8bit-128x128.png diff --git a/etc/mpv-icon-8bit-16x16.png b/etc/mpv-icon-8bit-16x16.png Binary files differnew file mode 100644 index 0000000..ac2cb81 --- /dev/null +++ b/etc/mpv-icon-8bit-16x16.png diff --git a/etc/mpv-icon-8bit-32x32.png b/etc/mpv-icon-8bit-32x32.png Binary files differnew file mode 100644 index 0000000..bfb5f9c --- /dev/null +++ b/etc/mpv-icon-8bit-32x32.png diff --git a/etc/mpv-icon-8bit-64x64.png b/etc/mpv-icon-8bit-64x64.png Binary files differnew file mode 100644 index 0000000..46bb33d --- /dev/null +++ b/etc/mpv-icon-8bit-64x64.png diff --git a/etc/mpv-icon.ico b/etc/mpv-icon.ico Binary files differnew file mode 100644 index 0000000..5467e4e --- /dev/null +++ b/etc/mpv-icon.ico diff --git a/etc/mpv-symbolic.svg b/etc/mpv-symbolic.svg new file mode 100644 index 0000000..a4f9263 --- /dev/null +++ b/etc/mpv-symbolic.svg @@ -0,0 +1,68 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="64" + height="64" + viewBox="0 0 63.999999 63.999999" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + sodipodi:docname="mpv-symbolic.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="5.3710484" + inkscape:cx="19.094402" + inkscape:cy="44.778512" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + units="px" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-988.3622)"> + <path + style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.10161044;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:1;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99215686" + d="M 32.582031 2.9101562 A 27.949194 27.949194 0 0 0 4.6328125 30.859375 A 27.949194 27.949194 0 0 0 32.582031 58.808594 A 27.949194 27.949194 0 0 0 60.53125 30.859375 A 27.949194 27.949194 0 0 0 32.582031 2.9101562 z M 33.308594 4.0546875 A 25.950588 25.950588 0 0 1 59.259766 30.005859 A 25.950588 25.950588 0 0 1 33.308594 55.955078 A 25.950588 25.950588 0 0 1 7.359375 30.005859 A 25.950588 25.950588 0 0 1 33.308594 4.0546875 z " + transform="translate(0,988.3622)" + id="path4380" /> + <path + id="path4412" + transform="translate(0,988.3622)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 32.214844,18.128906 a 12.848894,12.848894 0 0 0 -12.84961,12.84961 12.848894,12.848894 0 0 0 12.84961,12.847656 12.848894,12.848894 0 0 0 12.849609,-12.847656 12.848894,12.848894 0 0 0 -12.849609,-12.84961 z m -3.257813,7.078125 9.214844,5.583985 -9.214844,5.865234 0,-11.449219 z M 54.806488,28.2928 a 20,20 0 0 1 -20,20 20,20 0 0 1 -20,-20 20,20 0 0 1 20,-19.99997 20,20 0 0 1 20,19.99997 z" /> + </g> +</svg> diff --git a/etc/mpv.bash-completion b/etc/mpv.bash-completion new file mode 100644 index 0000000..d5d504a --- /dev/null +++ b/etc/mpv.bash-completion @@ -0,0 +1,123 @@ +#!/bin/bash + +# +# This file is part of mpv. +# +# mpv is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# mpv is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with mpv. If not, see <http://www.gnu.org/licenses/>. +# + +# Cache all the mpv options +_mpv_options=$(mpv --no-config --list-options) + +_mpv_get_args() +{ + local doc=$(echo "$_mpv_options" | grep -E "^\\s*$1\\s") + local partial="$2" + local type=$(echo "$doc" | awk '{print $2;}') + + # We special-case profiles to ensure we read the config + if [ "$1" = "--show-profile" ]; then + type="ShowProfile" + elif [ "$1" = "--profile" ]; then + type="Profile" + fi + + declare -a candidates + case $type in + String) + if echo "$doc" | grep -q '\[file\]' ; then + if [ "$cur" = '=' ]; then + # Without this, _filedir will try and complete files starting with '=' + cur="" + fi + _filedir 2>/dev/null || COMPREPLY=($(compgen -f)) + return 0 + else + candidates=($(mpv --no-config $1=help | grep -v ':' | awk '{print $1;}')) + candidates+=("help") + fi + ;; + Flag) + candidates=("yes" "no" "help") + ;; + Choices:|Object) + candidates=($(mpv --no-config $1=help | grep -v ':' | awk '{print $1;}')) + candidates+=("help") + ;; + Image) + candidates=($(mpv --no-config $1=help)) + candidates=("${candidates[@]:2}") + candidates+=("help") + ;; + Profile) + candidates=($(mpv $1=help | grep -v ':' | awk '{print $1;}')) + candidates+=("help") + ;; + ShowProfile) + candidates=($(mpv $1= | grep -v ':' | awk '{print $1;}')) + ;; + *) + # There are other categories; some of which we could do something smarter + # about, with enough work. + ;; + esac + COMPREPLY=($(compgen -W "${candidates[*]}" -- "${partial}")) + if [ ${#COMPREPLY[@]} -gt 1 ]; then + compopt -o nospace mpv + fi +} + +# This regex detects special options where we don't want an '=' appended +_mpv_special_regex='\s(Flag.*\[not in config files\]|Print)' +_mpv_skip_regex='\sremoved \[deprecated\]' +_mpv_regular_options=($(echo "$_mpv_options" | grep -vE "$_mpv_skip_regex" | \ + grep -vE "$_mpv_special_regex" | awk '{print "\\"$1;}' | grep '\--')) +_mpv_special_options=($(echo "$_mpv_options" | grep -vE "$_mpv_skip_regex" | \ + grep -E "$_mpv_special_regex" | awk '{print "\\"$1;}' | grep '\--')) + +_mpv() +{ + compopt +o nospace mpv + + # _filedir requires the current candidate be in $cur + local cur=${COMP_WORDS[COMP_CWORD]} + local prev=${COMP_WORDS[((COMP_CWORD - 1))]} + + if [ "$cur" = '=' ]; then + # If the current word is '=' then we are looking for an argument for the + # option specified by the previous word. + _mpv_get_args "$prev" + elif [ "$prev" = '=' ]; then + # If the previous word is '=' then we are completing an argument for the + # option specified by the word before the '='. + local prevprev=${COMP_WORDS[((COMP_CWORD - 2))]} + _mpv_get_args "$prevprev" "$cur" + else + case $cur in + -*) + COMPREPLY=($(compgen -W "${_mpv_regular_options[*]}" -S '=' -- "${cur}")) + local normal_count=${#COMPREPLY[@]} + COMPREPLY+=($(compgen -W "${_mpv_special_options[*]}" -- "${cur}")) + if [ $normal_count -gt 0 -o ${#COMPREPLY[@]} -gt 1 ]; then + compopt -o nospace mpv + fi + ;; + *) + _filedir 2>/dev/null || COMPREPLY=($(compgen -f)) + ;; + esac + fi +} + +complete -F _mpv mpv diff --git a/etc/mpv.conf b/etc/mpv.conf new file mode 100644 index 0000000..d873c06 --- /dev/null +++ b/etc/mpv.conf @@ -0,0 +1,143 @@ +# +# Example mpv configuration file +# +# Warning: +# +# The commented example options usually do _not_ set the default values. Call +# mpv with --list-options to see the default values for most options. There is +# no builtin or example mpv.conf with all the defaults. +# +# +# Configuration files are read system-wide from /usr/local/etc/mpv.conf +# and per-user from ~/.config/mpv/mpv.conf, where per-user settings override +# system-wide settings, all of which are overridden by the command line. +# +# Configuration file settings and the command line options use the same +# underlying mechanisms. Most options can be put into the configuration file +# by dropping the preceding '--'. See the man page for a complete list of +# options. +# +# Lines starting with '#' are comments and are ignored. +# +# See the CONFIGURATION FILES section in the man page +# for a detailed description of the syntax. +# +# Profiles should be placed at the bottom of the configuration file to ensure +# that settings wanted as defaults are not restricted to specific profiles. + +################## +# video settings # +################## + +# Start in fullscreen mode by default. +#fs=yes + +# force starting with centered window +#geometry=50%:50% + +# don't allow a new window to have a size larger than 90% of the screen size +#autofit-larger=90%x90% + +# Do not close the window on exit. +#keep-open=yes + +# Do not wait with showing the video window until it has loaded. (This will +# resize the window once video is loaded. Also always shows a window with +# audio.) +#force-window=immediate + +# Disable the On Screen Controller (OSC). +#osc=no + +# Keep the player window on top of all other windows. +#ontop=yes + +# Specify fast video rendering preset (for --vo=<gpu|gpu-next> only) +# Recommended for mobile devices or older hardware with limited processing power +#profile=fast + +# Specify high quality video rendering preset (for --vo=<gpu|gpu-next> only) +# Offers superior image fidelity and visual quality for an enhanced viewing +# experience on capable hardware +#profile=high-quality + +# Force video to lock on the display's refresh rate, and change video and audio +# speed to some degree to ensure synchronous playback - can cause problems +# with some drivers and desktop environments. +#video-sync=display-resample + +# Enable hardware decoding if available. Often, this does not work with all +# video outputs, but should work well with default settings on most systems. +# If performance or energy usage is an issue, forcing the vdpau or vaapi VOs +# may or may not help. +#hwdec=auto + +################## +# audio settings # +################## + +# Specify default audio device. You can list devices with: --audio-device=help +# The option takes the device string (the stuff between the '...'). +#audio-device=alsa/default + +# Do not filter audio to keep pitch when changing playback speed. +#audio-pitch-correction=no + +# Output 5.1 audio natively, and upmix/downmix audio with a different format. +#audio-channels=5.1 +# Disable any automatic remix, _if_ the audio output accepts the audio format. +# of the currently played file. See caveats mentioned in the manpage. +# (The default is "auto-safe", see manpage.) +#audio-channels=auto + +################## +# other settings # +################## + +# Pretend to be a web browser. Might fix playback with some streaming sites, +# but also will break with shoutcast streams. +#user-agent="Mozilla/5.0" + +# cache settings +# +# Use a large seekable RAM cache even for local input. +#cache=yes +# +# Use extra large RAM cache (needs cache=yes to make it useful). +#demuxer-max-bytes=500M +#demuxer-max-back-bytes=100M +# +# Disable the behavior that the player will pause if the cache goes below a +# certain fill size. +#cache-pause=no +# +# Store cache payload on the hard disk instead of in RAM. (This may negatively +# impact performance unless used for slow input such as network.) +#cache-dir=~/.cache/ +#cache-on-disk=yes + +# Display English subtitles if available. +#slang=en + +# Play Finnish audio if available, fall back to English otherwise. +#alang=fi,en + +# Change subtitle encoding. For Arabic subtitles use 'cp1256'. +# If the file seems to be valid UTF-8, prefer UTF-8. +# (You can add '+' in front of the codepage to force it.) +#sub-codepage=cp1256 + +# You can also include other configuration files. +#include=/path/to/the/file/you/want/to/include + +############ +# Profiles # +############ + +# The options declared as part of profiles override global default settings, +# but only take effect when the profile is active. + +# The following profile can be enabled on the command line with: --profile=eye-cancer + +#[eye-cancer] +#sharpen=5 diff --git a/etc/mpv.desktop b/etc/mpv.desktop new file mode 100644 index 0000000..db71520 --- /dev/null +++ b/etc/mpv.desktop @@ -0,0 +1,44 @@ +[Desktop Entry] +Type=Application +Name=mpv Media Player +Name[ca]=Reproductor multimèdia mpv +Name[cs]=mpv přehrávač +Name[da]=mpv-medieafspiller +Name[fr]=Lecteur multimédia mpv +Name[ja]=mpv メディアプレイヤー +Name[pl]=Odtwarzacz mpv +Name[ru]=Проигрыватель mpv +Name[tr]=mpv Ortam Oynatıcı +Name[zh_CN]=mpv 媒体播放器 +Name[zh_TW]=mpv 媒體播放器 +GenericName=Multimedia player +GenericName[cs]=Multimediální přehrávač +GenericName[da]=Multimedieafspiller +GenericName[fr]=Lecteur multimédia +GenericName[ja]=マルチメディアプレイヤー +GenericName[ru]=Мультимедийный проигрыватель +GenericName[tr]=Çoklu ortam oynatıcı +GenericName[zh_CN]=多媒体播放器 +GenericName[zh_TW]=多媒體播放器 +Comment=Play movies and songs +Comment[ca]=Reproduïu vídeos i cançons +Comment[cs]=Přehrává filmy a hudbu +Comment[da]=Afspil film og sange +Comment[de]=Filme und Musik abspielen +Comment[es]=Reproduzca vídeos y canciones +Comment[fr]=Lire des vidéos et des musiques +Comment[ja]=映画や音楽を再生する +Comment[it]=Lettore multimediale +Comment[pl]=Odtwarzaj filmy i muzykę +Comment[ru]=Воспроизведение фильмов и музыки +Comment[tr]=Filmleri ve şarkıları oynatın +Comment[zh_CN]=播放电影和歌曲 +Comment[zh_TW]=播放電影和歌曲 +Icon=mpv +TryExec=mpv +Exec=mpv --player-operation-mode=pseudo-gui -- %U +Terminal=false +Categories=AudioVideo;Audio;Video;Player;TV; +MimeType=application/ogg;application/x-ogg;application/mxf;application/sdp;application/smil;application/x-smil;application/streamingmedia;application/x-streamingmedia;application/vnd.rn-realmedia;application/vnd.rn-realmedia-vbr;audio/aac;audio/x-aac;audio/vnd.dolby.heaac.1;audio/vnd.dolby.heaac.2;audio/aiff;audio/x-aiff;audio/m4a;audio/x-m4a;application/x-extension-m4a;audio/mp1;audio/x-mp1;audio/mp2;audio/x-mp2;audio/mp3;audio/x-mp3;audio/mpeg;audio/mpeg2;audio/mpeg3;audio/mpegurl;audio/x-mpegurl;audio/mpg;audio/x-mpg;audio/rn-mpeg;audio/musepack;audio/x-musepack;audio/ogg;audio/scpls;audio/x-scpls;audio/vnd.rn-realaudio;audio/wav;audio/x-pn-wav;audio/x-pn-windows-pcm;audio/x-realaudio;audio/x-pn-realaudio;audio/x-ms-wma;audio/x-pls;audio/x-wav;video/mpeg;video/x-mpeg2;video/x-mpeg3;video/mp4v-es;video/x-m4v;video/mp4;application/x-extension-mp4;video/divx;video/vnd.divx;video/msvideo;video/x-msvideo;video/ogg;video/quicktime;video/vnd.rn-realvideo;video/x-ms-afs;video/x-ms-asf;audio/x-ms-asf;application/vnd.ms-asf;video/x-ms-wmv;video/x-ms-wmx;video/x-ms-wvxvideo;video/x-avi;video/avi;video/x-flic;video/fli;video/x-flc;video/flv;video/x-flv;video/x-theora;video/x-theora+ogg;video/x-matroska;video/mkv;audio/x-matroska;application/x-matroska;video/webm;audio/webm;audio/vorbis;audio/x-vorbis;audio/x-vorbis+ogg;video/x-ogm;video/x-ogm+ogg;application/x-ogm;application/x-ogm-audio;application/x-ogm-video;application/x-shorten;audio/x-shorten;audio/x-ape;audio/x-wavpack;audio/x-tta;audio/AMR;audio/ac3;audio/eac3;audio/amr-wb;video/mp2t;audio/flac;audio/mp4;application/x-mpegurl;video/vnd.mpegurl;application/vnd.apple.mpegurl;audio/x-pn-au;video/3gp;video/3gpp;video/3gpp2;audio/3gpp;audio/3gpp2;video/dv;audio/dv;audio/opus;audio/vnd.dts;audio/vnd.dts.hd;audio/x-adpcm;application/x-cue;audio/m3u; +X-KDE-Protocols=ftp,http,https,mms,rtmp,rtsp,sftp,smb,srt,rist,webdav,webdavs +StartupWMClass=mpv diff --git a/etc/mpv.metainfo.xml b/etc/mpv.metainfo.xml new file mode 100644 index 0000000..618abd3 --- /dev/null +++ b/etc/mpv.metainfo.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?> +<component type="desktop-application"> + <id>io.mpv.mpv</id> + <name>mpv</name> + <summary>A free, open source, and cross-platform media player</summary> + <description> + <p>mpv is a free (as in freedom) media player for the command line. It supports a wide variety of media file formats, audio and video codecs, and subtitle types.</p> + <p>mpv has an OpenGL, Vulkan, and D3D11 based video output that is capable of many features loved by videophiles, such as video scaling with popular high quality algorithms, color management, frame timing, interpolation, HDR, and more.</p> + <p>While mpv strives for minimalism and provides no real GUI, it has a small controller on top of the video for basic control.</p> + <p>mpv can leverage most hardware decoding APIs on all platforms. Hardware decoding can be enabled at runtime on demand.</p> + <p>Powerful scripting capabilities can make the player do almost anything. There is a large selection of user scripts on the wiki.</p> + <p>A straightforward C API was designed from the ground up to make mpv usable as a library and facilitate easy integration into other applications.</p> + </description> + <metadata_license>CC0-1.0</metadata_license> + <project_license>GPL-2.0-or-later AND LGPL-2.0-or-later</project_license> + <developer_name>mpv.io</developer_name> + <launchable type="desktop-id">mpv.desktop</launchable> + <content_rating type="oars-1.1" /> + <screenshots> + <screenshot type="default"> + <image>https://mpv.io/images/mpv-screenshot-34cd36ae.jpg</image> + <caption>Main window</caption> + </screenshot> + </screenshots> + <url type="homepage">https://mpv.io/</url> + <url type="bugtracker">https://github.com/mpv-player/mpv/issues</url> + <url type="faq">https://github.com/mpv-player/mpv/wiki/FAQ</url> + <url type="help">https://mpv.io/manual/stable</url> +</component> diff --git a/etc/mpv.svg b/etc/mpv.svg new file mode 100644 index 0000000..5e7355e --- /dev/null +++ b/etc/mpv.svg @@ -0,0 +1,86 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="64" + height="64" + viewBox="0 0 63.999999 63.999999" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + sodipodi:docname="mpv.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="5.3710484" + inkscape:cx="10.112865" + inkscape:cy="18.643164" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + units="px" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-988.3622)"> + <circle + style="opacity:1;fill:#e5e5e5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.10161044;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:1;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99215686" + id="path4380" + cx="32" + cy="1020.3622" + r="27.949194" /> + <circle + style="opacity:1;fill:#672168;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.0988237;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:1;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99215686" + id="path4390" + cx="32.727058" + cy="1019.5079" + r="25.950588" /> + <circle + style="opacity:1;fill:#420143;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:1;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99215686" + id="path4400" + cx="34.224396" + cy="1017.7957" + r="20" /> + <path + style="fill:#dddbdd;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 44.481446,1020.4807 a 12.848894,12.848894 0 0 1 -12.84889,12.8489 12.848894,12.848894 0 0 1 -12.8489,-12.8489 12.848894,12.848894 0 0 1 12.8489,-12.8489 12.848894,12.848894 0 0 1 12.84889,12.8489 z" + id="path4412" + inkscape:connector-curvature="0" /> + <path + style="fill:#691f69;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 28.374316,1014.709 0,11.4502 9.21608,-5.8647 z" + id="path4426" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/etc/restore-old-bindings.conf b/etc/restore-old-bindings.conf new file mode 100644 index 0000000..54b1524 --- /dev/null +++ b/etc/restore-old-bindings.conf @@ -0,0 +1,59 @@ + +# This file contains all bindings that were removed after a certain release. +# If you want MPlayer bindings, use mplayer-input.conf + +# Pick the bindings you want back and add them to your own input.conf. Append +# this file to your input.conf if you want them all back: +# +# cat restore-old-bindings.conf >> ~/.config/mpv/input.conf +# +# Older installations use ~/.mpv/input.conf instead. + +# changed in mpv 0.37.0 + +WHEEL_UP seek 10 # seek 10 seconds forward +WHEEL_DOWN seek -10 # seek 10 seconds backward +WHEEL_LEFT add volume -2 +WHEEL_RIGHT add volume 2 + +# changed in mpv 0.27.0 (macOS and Wayland only) + +# WHEEL_LEFT seek 5 +# WHEEL_RIGHT seek -5 + +# changed in mpv 0.26.0 + +H cycle dvbin-channel-switch-offset up +K cycle dvbin-channel-switch-offset down + +I show-text "${filename}" # display filename in osd + +# changed in mpv 0.24.0 + +L cycle-values loop-playlist "inf" "no" + +# changed in mpv 0.10.0 + +O osd +D cycle deinterlace +d cycle framedrop + +# changed in mpv 0.7.0 + +ENTER playlist-next force + +# changed in mpv 0.6.0 + +ESC quit + +# changed in mpv 0.5.0 + +PGUP seek 600 +PGDWN seek -600 +RIGHT seek 10 +LEFT seek -10 ++ add audio-delay 0.100 +- add audio-delay -0.100 +F cycle sub-forced-events-only +U stop +o cycle-values osd-level |