[Ch.14~14.2] [篇一] MPV Player 官方文档中有关配置项OPTION的说明 v0.34.0 您所在的位置:网站首页 mpv播放器配置文件后没用 [Ch.14~14.2] [篇一] MPV Player 官方文档中有关配置项OPTION的说明 v0.34.0

[Ch.14~14.2] [篇一] MPV Player 官方文档中有关配置项OPTION的说明 v0.34.0

2023-09-10 01:21| 来源: 网络整理| 查看: 265

限于文章篇幅以及本章节内容在官方文档中的占比,光是这篇就将近1.2W字了,因此大概需要分成五篇,甚至是四篇专栏来呈现(悲)。本篇主讲第13章节(选项)至第13.2章节(播放控制)的文档说明。

另外,这一章节部分原文内容在表述时不是非常严谨,有些模棱两可或表意不清(更有可能是我的水平有限),并且这其中的绝大部分配置项,在未来很长的一段时间内我可能根本就不会去碰,默认设置已完全足够,为此我不会做多余的且无依据的注释说明。

以下摘取自 mpv player 官方使用手册中的OPTION章节,版本 v0.34.0,不保证内容的时效性,仅供参考,实际还是以官方发布的最新文档为准,善用 Ctrl + F 快速定位你想要的内容:

Ch.14 选项

媒体流轨道选择

--alang=

指定待使用音频语言的优先级列表,不同的容器格式使用不同的语言编码,DVD 使用 ISO 639-1 双字符语言编码;Matroska,MPEG-TS 和 NUT 使用 ISO 639-2 三字符语言编码,而 OGM 使用自由形式的标识符,另见 --aid 选项。

这是一个字符串列表选项,详情见 Ch.4.5 List Options 章节。

补充:选项参数语法格式讲解

以 --alang= 为例,< > 包裹的部分表示必选,同一选项中的参数与参数之间通过 ' , ' 或者 ' | ' 分隔,其中 ' , ' 表示可以组合使用多个可选参数,' | ' 表示仅可以选择唯一的可选参数,用 [ ] 包裹的部分表示可选,上述选项中同时使用的意思是 --alang 选项至少得有一个 languagecode 参数。

--slang=

指定待使用字幕语言的优先级列表,不同的容器格式使用不同的语言编码,DVD 使用 ISO 639-1 双字符语言编码;Matroska,MPEG-TS 和 NUT 使用 ISO 639-2 三字符语言编码,而 OGM 使用自由形式的标识符,另见 --aid 选项。

这是一个字符串列表选项,详情见 Ch.4.5 List Options 章节。

--vlang=

等同于 --alang 和 --slang 选项,用于视频轨。

这是一个字符串列表选项,详情见 Ch.4.5 List Options 章节。

--aid=

选择音频轨,默认是 auto 参数,no 表示关闭音频,另见 --alang 选项。当mpv播放器开始播放媒体文件时,一般会在终端上打印可用的音频轨信息。

--audio 选项是 --aid 选项的别名。

--aid=no 或者 --audio=no 又或者 --no-audio 都表示禁用音频播放(后面的几个变形不适用于客户端API)

注意

选择轨道的选项(--aid 同样还有 --sid 以及其他类似选项)有时表现出的行为可能会比较怪异,另外,这种行为会随着各个mpv发行版而演变。

轨道选择的属性将在播放以外的时间返回选项值(按照预期),但在播放期间,返回的是默认轨道选择,例如,在 --aid=auto 选项的影响下,aid 属性会在播放初始化完成后突然返回值 2(假设文件中包含2条音轨,且第二条为默认选择)

在 0.32.0 版本(以及部分在此之前的发布版本)的mpv播放器中,如果你传入的是一个与之关联的轨道不存在的轨道值(打比方,传入 --aid=2 且只有一条音轨),aid 属性返回的是 no,但如果在播放期间有另外一条音轨添加进来,那么当你尝试将 aid 属性设置成 2,什么也不会发生,因为 aid 选项的值依旧是 2,并且再次写入相同的值是毫无作用的。

到了 0.33.0 版本,这种行为发生了改变,现在如果尝试选择一个不存在的轨道,轨道选择选项在播放初始化期间就被设置为 auto。当轨道存在时一切照旧,但初始化会失败。最终结果不像 0.33.0 版本之前那样,在某些情况下,用户的轨道选择参数会遭到破坏。

同样是从 0.33.0 版本开始,尝试通过数字的方式选择一条轨道将严格选择相对应的轨道。在这项变化之前,尝试选择一条不存在的轨道会回退至播放初始化时就默认的轨道选择。对比之下,新的行为更加具有前后一致性。

在运行期间设置一条轨道选择属性,如果新文件轨道列表的指纹与原来的不同的话,在随后播放新的文件可能会重置轨道选择为默认选项。

请务必留意上述所有内容棘手的组合形式:比如说,mpv --aid=2 file_with_2_audio_tracks.mkv file_with_1_audio_track.mkv 最开始本应该播放正确的轨道,并且不带音频的播放第二个文件,如果你随后返回至第一个文件,将播放它的第一条音轨,而且播放第二个文件时也带有声音。如果你在文件播放时不是采用  --aid=2 而是用了 set aid 2 的方式做了同样的事情,那么切换到第二个文件时将播放它自己的音轨,这是因为运行期间进行的选择是启用指纹启发式功能的。

--sid=

显示由 ID 指定的字幕流,默认选择的是 auto,no 表示关闭字幕。

--sub 选项是 --sid 选项的别名。

--sid=no 或者 --sub=no 又或者 --no-sub 都表示禁用字幕解码(后续变形不适用于客户端API)

--vid=

选择视频频道,默认选择的是 auto,no 表示关闭视频

--video 选项是 --vid 选项的别名。

--vid=no 或者 --video=no 又或者 --no-video 都表示关闭视频播放(后面的变形不适用于客户端API)

如果视频被禁用且媒体流是通过 youtube-dl 拉取得到,mpv播放器会尝试只下载音频数据,原因是为了节省带宽,这一步是通过将 ytdl_hook.lua 脚本当中的 ytdl_format 选项设置为 "bestaudio/best" 的方式来完成的。

--edition=

(仅适用于 Matroska 类型的文件 .mkv)指定使用(章节集合)版号。0 表示首章节版号,如果设置成 auto (默认参数),mpv播放器会选择被声明为默认的首个版号,或者如果没有默认版号,那么定义并设置为首章节版号。

--track-auto-selection=

启用默认轨道流自动选择功能(默认:yes),启用该选项会让播放器依据 --aid,--alang 以及其他类似选项来选择播放流,如果该功能被禁用,则不会选择任何一个轨道流,而是选择等待(这种等待模式和暂停类似,但并不会设置成暂停选项)

这在带有 --lavfi-complex 选项的时候会比较有用:你可以按照这种模式进行播放,随后通过在播放期间设置图形化过滤器的方式选择特定的轨道流。需要注意的是,如果 --lavfi-complex 在播放开始前就已经设置,那么被引用的轨道流将始终是被选择的。

--subs-with-matching-audio=

当自动选取一个字幕轨,同时选择一个非强制音频流,即使所选取的音频流与你的首选字母语言匹配(默认:yes),如果你只是想显示外挂音频或屏幕文本的字幕,可以禁用该功能。

Ch.14.2 播放控制

--start=

跳转至给定时间的播放位置。

时间的通常格式是 [+|-][[hh:]mm:]ss[.ms] (至少得给出秒数),如果时间带有 - 前缀,相关时间则被认为是相对于文件结尾处(通过解复用器/文件产生的结束信号),+ 前缀通常是被忽略的(请看以下的例子说明)

以下可选的时间格式也是能够被识别的:

pp% 跳转至 pp(0~100)所指的百分比播放位置。

#c 跳转至数字 c 所指向的章节(章节数从1开始)

none 重置所有先前设置项(对于 libmpv 很有用)

如果 --rebase-start-time=no 选项没有被给出,那么带有 + 前缀的时间将会与文件开头相关联,没有前缀的时间戳被认为是绝对时间,即应该跳转到带有时间戳的画面帧。作为一种bug,同时也是一类隐藏的特性,在 + 或者 - 前缀之前添加一个或多个空格,则始终会将时间解释为绝对时间,可以用在跳转到负时间戳位置(在大多数调试的时候会比较有用)

--length=

在经历与开始时间相关的指定时长之后停止播放。

如果同时给出 --end 和 --length 选项,当满足两者之中的任意一个结束时刻点都会停止播放。

晦涩的注意事项:如果 --rebase-start-time 选项被设置为 no,上述行为将无法正常执行,并且指定的时间也不再是绝对时间,正如 --start 选项描述中定义的那样。

--rebase-start-time=

决定是否将文件开始时间移至 00:00:00 的位置(默认:yes),这对于开始位置处于随机时间戳的文件来说会少很多麻烦,比如说传输串流之类。另一方面,如果重置时间戳,由此导致的行为可能会相当奇怪。出于此原因,且如果你真的对实际时间戳抱有兴趣的话,可以设置为 no 禁用该行为。

--speed=

通过作为参数给出的因子值减缓或加快播放速度。

如果使用了 --audio-pitch-correction 选项,以快于正常的速度播放会自动插入 scaletempo2 音频过滤器。

--pause

以暂停状态启动播放器。

--shuffle

按照随机顺序播放文件

--playlist-start=

设置内部播放列表中需要开始播放的文件,索引(index)是一个整数,0 代表(列表中)第一个文件,auto 意味着选择需要播放的项目取决于播放恢复机制(默认)。如果给定索引对应的项目不存在,导致的行为是未定义的并且有可能在以后的版本中做出调整,以上描述同样适用于播放列表中包含更多的列表的情况(别指望这些行为是靠谱的)。不过,想要将播放列表文件传给mpv播放器应该使用这个选项,比如 mpv playlist.m3u --playlist-start=123 会按预期运行,只要 playlist.m3u 没有链接附加的播放列表。

参数值 no 是 auto 的被废弃的别名。

--playlist=

按照播放列表文件进行播放,支持一些常见的格式。如果未检测到格式,则会看作是以换行符为分隔的文件列表。你或许需要用该选项来加载纯文本格式的播放列表文件,需要注意的是不支持 XML 格式的播放列表。

该选项会强制 --demuxer=playlist 去解释播放列表文件,部分播放列表格式,特别是 CUE 以及光盘格式,需要使用到不同的解复用器,因此无法在该选项下正常播放,不过仍可以在不使用该选项的前提下直接播放。

你可以在不带上这个选项的情况下直接播放多媒体列表,在 0.31.0 之前的mpv版本,该选项会禁用一切可能开启的安全机制,但自从 0.31.0 版本之后使用了与直接播放列表文件相同的安全机制。如果你信任播放列表,你可以用 --load-unsafe-playlists 选项禁用一切安全检查。因为播放列表可以加载其他的列表项目,请考虑仅将该选项用于播放列表自身而不是它的子项目,使用方法如下:

mpv --{ --playlist=filename --load-unsafe-playlists --}

警告

旧版mpv通过 --playlist 选项播放文件列表的方式,是不足以安全对抗经过恶意构造的文件。这类文件可能会触发一些有危害的行为,对于 0.31.0 版本之前所有的mpv播放器,以及所有版本的MPlayer都是如此,但不幸的是这项事实早前并没有很好地编排到文档中,甚至有些人被误导在未信任的播放源上使用 --playlist 选项。如果你不确定自己的mpv版本是否大于 0.31.0 的话,请!不!要!在任何你不信任的互联网播放源或文件上使用 --playlist 选项。

尤其是,播放列表可以包含使用非本地文件协议的项目,例如像 avdevice:// 这类的特殊协议(从根本上来说是不安全的)

--chapter-merge-threshold=

以毫秒为单位,合并几乎连续且有序的章节部分的阈值(默认:100),部分带有有序章节的 Matroska 文件会有不准确的章节结尾时间戳,导致在本章节结尾与下一章节开头本应该衔接的地方产生撕裂。如果播放部分的结尾小于给定的阈值则会与下一播放部分分离,随后在章节变更期间继续正常地播放视频,而不是进行跳转。

--chapter-seek-threshold=

以秒为单位,从章节开头到目标章节的距离,其中向后查找章节会跳转至前一章节(默认:5.0),超出此阈值时,向后查找章节则会跳转至当前章节的开头。负阈值则意味着总会向后跳转至前一章节。

--hr-seek=

选择在使用精确跳转时不会受限于关键帧,这种跳转方式需要将视频从前一个关键帧解码到目标位置,所以可能需要点时间,这取决于解码性能。对于一些视频格式来说,精确跳转时不可行的,该选项会选择默认的选取方式用于跳转。可以通过绑定键位和输入命令的方式显示覆盖默认值。

no:不使用精确跳转

absolute:如果是跳转到文件中的绝对位置则使用精确跳转,例如章节跳转,但不适用于类似方向键的默认行为的相关跳转(默认)

default:类似 absolute 参数,但是允许在仅音频情形下启用 hr-seeks,具体行为取决于特定实现并且可能会随着新版本做出变更。

yes:每当可行时就使用精确跳转。

always:和 yes 参数一样(出于兼容性考虑)

--hr-seek-demuxer-offset=

该选项的存在是为了解决因某些文件格式在解复用器中的错误或限制所导致的精确查找失败问题。一些解复用器无法在给定目标位置之前跳转到关键帧,而是跳到与之稍后的位置。该选项的参数值充当了提供给解复用器的时间戳的减数,因此,如果你将该项设置为1.5并且尝试精确跳转到60s处,解复用器会被告知跳转至58.5s的位置,这将有望减少跳转到60s之后某个时间点的出错机会。设置该选项的副作用是会让精确跳转的速度变慢,这是因为早先的解复用器所在位置与真实目标之间的视频可能会被不必要地解码。

--hr-seek-framedrop=

允许视频解码器在跳转期间丢弃视频帧,如果这些视频帧是在跳转目标之前的话(默认:yes)。如果该选项被启用,则精确跳转的速度将会变得更快些,但如果你使用了会修改时间戳或者向其中添加新视频帧的视频过滤器,那么可能会导致“精确”跳过目标帧,在这个例子中,当启用逐行扫描时就有可能会破坏视频帧的回退状态。

--index=

控制如何在文件中跳转,需要注意的是如果文件中缺少索引,那么默认会动态创建索引,所以你无需修改此选项,但或许会对一些破损的文件有所帮助。

default:如果文件中存在索引则用之,若缺失则创建索引

recreate:不要读取或使用文件的索引

注意

该选项仅当基础媒体支持跳转时有效(即不含标准输出流,管道流等)

--load-unsafe-playlists

从被认为是不安全的播放列表中加载URL(默认:no),这包括特殊协议以及任何引用非常规文件的内容。另一方面,加载普通文件和http链接始终被认为是安全的。

此外,如果在该选项被设置的条件下加载播放列表,被添加的列表项目将不会标记为来源于网络或是潜在的不安全位置(而是将该行为等同于向mpv命令行中直接提供列表项目或是文件加载命令)。

--access-references=

跟踪任何正在打开的文件中的引用项(默认:yes),如果文件会被自动扫描(例如缩略图生成),禁用该选项会有帮助。

--loop-playlist=, --loop-playlist

指定循环播放列表次数,数值1表示仅循环播放一次(默认),2表示循环播放两次,依此类推。inf 意思是始终循环播放,no 和数值1的效果一致且不开启循环播放,如果在命令行中指定了多个文件,那么整个列表都将循环播放, --loop-playlist 选项等同 --loop-playlist=inf 选项。

force 模式和 inf 比较类似,但不会跳过那些被标记为加载失败的列表项,这就意味着播放器可能会浪费CPU时间尝试去循环那些不存在的文件。不过这对于在网络连接非常差的环境下,播放网络广播或许会有所帮助。

--loop-file=, --loop=

指定单文件循环次数,inf 表示始终循环,no 表示普通播放,为了兼容性,--loop-file 和 --loop-file=yes 选项都是可接受的,并且和 --loop-file=inf 效果一致。

与 --loop-playlist 选项所不同的是,该选项不会循环播放列表,仅仅是循环文件本身,如果列表中仅包含单个文件,则两者之间的不同之处在于该选项会执行循环跳转,而不是去重新加载文件。

--loop 是该选项的别名。

注意

--loop-file 选项会去统计让播放器跳转到文件开头的次数,而不是完整播放的次数,这就意味着 --loop-file=1 将会按照播放文件两次而结束,正好与 --loop-playlist 相反,后者是统计完整播放的次数。

--ab-loop-a=, --ab-loop-b=

设置循环点,如果播放至b时间戳,则会跳转至a时间戳,跳转超过b点位置则不会触发循环(有意而为之的)

如果a在b之后,最终行为就像给出了正确顺序的循环点那样,播放器会在经过a点之后跳转到b点,这与旧版行为不同,后者不会循环(作为一个bug,循环到a点之后就直达文件末尾)

如果两个选项当中的任意一个设置成 no(或者干脆不设置),则不开启循环,这与旧版行为不同,不设置a点暗示从文件头部开始,不设置b点意味着到文件结尾为止。

循环点可以在软件运行期间通过相关属性进行调整,另外请参考 ab-loop 命令。

--ab-loop-count=

指定 A-B 循环次数,结束后忽略 A-B 循环点(默认:inf),没完成一次循环都会将该选项递减1(除非被设置为 inf 或 0),inf 表示始终循环,如果该选项被设置为0,那么 A-B 循环模式将会被忽略,并且即使是 ab-loop 命令也无法再次开启循环(如果两个循环点均被设置,但是 ab-loop-count 选项为 0 的话,那么该命令会在OSD消息中显示"disabled")

--ordered-chapters, --no-ordered-chapters

默认启用,禁用对 Matroska 文件有序章节的支持,mpv播放器将不会加载或检索来自其他文件的视频片段,同时也会忽略任何为主文件指定的章节顺序。

--ordered-chapters-files=

加载给定文件为播放列表,并且当打开一个使用有序章节的 Matroska 文件时,尝试使用包含在其中的的文件作为引用文件。这会覆盖通过扫描主文件所在的同级目录来加载引用文件的正常机制。

这对于加载不在本地文件系统上的有序章节文件是有用的,或者是如果引用文件位于不同的目录中的情况。

注意:一个播放列表可以做到和包含用换行符分隔文件名的文本文件一样简单。

--chapters-file=

从指定文件中加载章节内容,而不是使用在主文件中找到的章节元数据。

选项接受媒体文件(像mpv之类)或者是类似 ffmetadata 的伪格式,以及使用指定文件的章节来替换当前文件的章节。不能直接用于 OGM 或 XML 格式的章节。

--sstep=

在每帧画面之后跳过指定的秒数。

注意

没有 --hr-size 选项的话会直接跳转到关键帧。

--stop-playback-on-init-failure=

如果音频或视频两者当中的任何一个无法被初始化则停止播放(默认:no),使用 no 作为参数,则出现上述情况时将继续以仅视频或仅音频的模式播放。这不会影响仅有音频或视频文件的播放。

--play-dir=

控制播放的方向(默认:forward)设置为 backward 将会尝试以相反的顺序播放文件,同时减少播放时间,如果该选项在播放开始时被设置,则会从文件结尾处开始播放;如果是在播放期间被更改,hr-seek 选项值会被用于更改方向。

+ 和 - 分别是 forward 和 backward 的别名。

该选项剩余部分的描述内容适用于 backward 模式。

注意

反向播放往往是不稳定的,不一定总是能正常工作,会比正向播放慢一些,并且会破坏其他的某些功能,具体会如何运作主要却决于被播放的文件。

与大多数媒体格式一样,mpv被设计仅用于正向播放,当采用反向播放时需要更多资源来维持播放的正常进行,并且取决于你的使用场景,或许有其他工具(在这类场景下)表现会更加好一些。

反向播放并不完全是一种首要的功能,为了权衡利弊,有时会对反向播放产生不利,但反过来说也不会对正常播放造成不利影响。所以为了降低复杂度,没有对(反向播放)实现各种可能的优化。

通常来说,媒体播放器有着高度流水化作业(预存取数据是在单独的线程中准备好的,因此当下一阶段需要这些数据时,可以做到实时利用),但反向播放基本上会在多个随机的时刻点打断这种流水线式作业。

例如,对于仅内部的编解码器是可以做到反向播放的,并且围绕它们构建的工具可以有效地利用这些编解码器(考虑到视频编辑器或相机查看器),在这种情况下mpv提供的方法将不再有效,因为mpv使用的是其自身的通用反向播放算法,并没有经过很好地优化。

如果你只是想快速反向播放视频并且仅显示"关键帧",那么你只需要用正向播放并且按住左侧光标键(在具有默认配置的CLI平台上,该按键会发送许多相对跳转命令)

该实现主要由3个部分组成:

反向解复用,这部分依赖于解复用器缓存,因此解复用器缓存应该(也必须,除非你要做些测试)开启,并且缓存的大小将影响性能的发挥,太小或太大的缓存可能会导致二次运行时行为结果。

反向解码,使用解码器库(libavcodec)则不支持此项功能。模拟办法是通过正向提供数据位,将结果放入队列中,接着反向将队列数据返回给VO,随后回到较早的位置处重新开始。这期间可能需要缓冲大量解码数据,并且还会完全打断流水化处理过程。

反向输出,这相对来说还算简单,因为解码器会按照所需的顺序返回帧画面,不过,这也可能会导致各种各样的问题,原因是过滤器会认为音频和视频流还在按原顺序继续向后播放

已知问题:

该选项的功能过于弱鸡,若是起不到任何作用的话,可能会发生无法预测(随机)的行为。轻则让用户和空气斗智斗勇(白忙活),重则可能会让用户的机器卡顿或是CPU发烫(但因此导致的内存使用率超过用户设置上限的问题确确实实是一个bug)

在性能和资源使用率这方面表现不太行,在某种程度上,这属于反向播放普通媒体格式的固有表现,部分是出于对功能实现的选择和权衡的考虑。

极度依赖于表现良好的解复用器行为,尽管反向解复用并不需要特殊的解复用器的支持,但得要求解复用器能够可靠地执行跳转,其他需求还包括打包元数据以及具有明确行为。

从末尾开始播放可能会不起作用,具体取决于跳转行为和文件时长检测。

某些容器格式、音频以及视频编码因为其自身的行为而不受支持,因为没有对应的清单,用户通常不会注意到。某些实时流(包括电视采集信号),以及某些有损音频编解码器可能尤为会出现问题。已知h264在刷新期间由于libavcodec的问题而无法正常工作。WAV和其他一些原始的音频格式往往都会有这样那样的问题。

不支持字幕的反向解复用,字幕显示仍适用于某些外部文本字幕格式(将这些文本字幕完全读入内存,只需要反向显示),那些缓存在字幕渲染器中的文本字幕也是有机会能够正常显示在屏幕上。

某些用于处理破损文件播放或者难搞定文件的功能是完全无法运作的(比如说更正时间戳)

尝试将它同视频硬件解码一块儿使用可能会耗尽你的全部GPU内存,然后就是崩溃或者咋滴。否则就是直接失败,因为 --hwdec-extra-frames 选项必定是设置地过低了。

录制流会被打断,但如果你只在缓存区域内进行反向播放,-stream-record 选项可能继续工作。

相对跳转可能会表现地很奇怪,小范围地反向跳转可能无法正确跳转,并且音频将在一段时间内保持静音,建议使用 hr-seek 选项应该就不会有这些问题。

有些事情会变得很奇怪,例如,当跳转命令以预期的方式进行播放期间(前提是能正常工作),逐帧命令则会被转置,反向跳转的执行操作将会以十分昂贵的代价向前移动1个视频帧。

调谐:

移除所有你所设置的 -vf/af 过滤器,禁用无用的选项比如SPDIF直通。

如果有报告反转队列溢出的问题,则增加 --video-reversal-buffer 选项的值或许会有帮助,该问题可能会发生在高比特率的视频或具有较大GOP的视频中。硬件解码大多会忽略这一点,因此你需要增加 --hwdec-extra-frames 这个选项(在你得到播放时未记录的错误的时候)

解复用器缓存对于反向解复用是至关重要的,请确保设置了 --cache=yes 的选项。另外缓存大小也可能会很重要,如果缓存太小,队列会溢出,并且无法继续反向播放,或者执行了过多的底层跳转。如果缓存太大,那么实现权衡可能会导致通常的性能问题,使用 --demuxer-max-bytes 选项可能会增加解复用器层允许排队进行反向解复用数据包的数量(基本上与解复用器层的 --video-reversal-buffer 选项等效)

设置 --vd-queue-enable=yes 选项可以很大程度上让播放更流畅(只要这个选项能正常工作的话)

--demuxer-backward-playback-step 选项还会影响可以执行跳转地次数,以及反向解复用是否会因列溢出而被迫中断。如果参数值设置地过高,则后退操作始终需要检索更多的数据包,即使缓存设置得足够大也是如此。

设置 --demuxer-cache-wait 选项可能有助于将整个文件缓存到解复用器缓存中,将 --demuxer-max-bytes 选项设置为较大的大小用来确保可以读取整个缓存;--demuxer-max-back-bytes 选项也应该设置为较大的大小以防止试图裁剪缓存的发生。

如果音频的音损是可以被感知到的,即使没有AO的暗中帮助,在某些情况下,增加 --audio-backward-overlap 选项的值可能会对此有所帮助。

--video-reversal-buffer=, --audio-reversal-buffer=

用于反向解码。首先反向解码按步骤向前解码,随后反转解码器的输出。这些选项的控制着可缓冲空间的近似最大字节数。这样做的主要用途是避免无止尽的资源消耗;在正常反向播放期间可缓冲区域不应该达到自身上限,否则会丢弃部分已缓存的帧画面。

请在反向播放期间遇到反向队列溢出错误的情况时使用该选项,逐步增加缓冲大小直至警告消失。通常来说,视频缓冲区会首先溢出,特别是如果缓存的是高分辨率视频。

但如果使用了硬件解码,该选项将无法正常工作,原因是视频帧大小不包含被GPU渲染以及设备使用的内存。部分硬件解码器也可能会受到 --hwdec-extra-frames 选项的限制。

具体需要多大的队列大小完全取决于媒体编码的方式,一般来说音频需要的缓冲会非常小,而视频则可能需要非常大的缓冲区。

(从技术上来讲,这允许最后一帧超过限制,此外,这并不包括其他缓冲帧,例如解码器内部的缓冲帧或者视频输出部分)

该选项完全不会影响到解复用器缓存的行为。

参见 --list-options 选项获取默认值以及数值范围相关内容, 选项接受 KiB 以及 MiB 等这样的后缀。

--video-backward-overlap=, --audio-backward-overlap=

用于向后解码重叠部分的关键帧范围的数量(默认:auto)("关键帧"应理解为 mpv/ffmpeg 内部的特定含义)。反向解码的工作原理是一小步一小步地向前解码,一些编解码器无法从任意地数据包处重新开始解码(即使被标记为跳转点)这在反向解码中显得尤为明显(理论上这也是跳转导致的问题,不过 --hr-seek-demuxer-offset 选项可以修复并进行跳转),特别是基于MDCT的音频编解码器会受此影响。

解决办法是每次都将之前的数据包回馈至解码器,然后丢弃输出。该选项需要传递数据包的数量,对于视频,自动选项将当前硬编码设为 0 值,对于有损音频则使用 1;对于无损音频使用的是 0;对于某些特定的有损音频的编码器,该值被设为 2 。

--video-backward-overlap 选项可能会处理内部刷新的视频,具体取决于明确的条件,你或许还可以使用 --vd-lavc-show-all 选项。

--video-backward-batch=, --audio-backward-batch=

反向解码时要求单次解码的关键帧范围数(默认:视频设为 1,音频设为 10)。作为另外一个毫无用武之地的调谐参数,应该没人会使用。该选项应该只会影响性能,理论上来说,为音频设置一个大于1的值会减少开销,因为回退操作的频率较低,并且由于解码重叠帧较少从而导致的冗余解码工作也相对较少(请参见 --audio-backward-overlap 选项说明),另一方面,该选项需要更大的反转缓冲区,并且由于破坏了播放器的流水式作业过程(例如,预先解码很多内容,然后在一段时间内又不执行任何操作的情况)从而使播放不那么流程。

设置 --video-backward-batch 有可能始终没有任何意义,但从理论上来说,它可以通过减少回退操作来协助内部视频解码器的工作。

--demuxer-backward-playback-step=

当反向播放时解复用器应该前往获取新的数据包的回跳秒数(默认:60),这对于反向播放的调谐会很有帮助,请参见 --play-dir 选项说明以获取更多细节。

以非常低的数值或 0 值设置该选项可能会让播放器认为跳转被中断了,又或是可能会让播放器执行多次跳转。

将该选项设为较高的数值可能会导致二次运行时行为。

参考资料:

https://mpv.io/manual(MPV Player Reference)

https://mpv.io(mpv项目官网)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有