[Ch.14~14.2] [篇一] MPV Player 官方文檔中有關配置項OPTION的說明 v0.34.0
限于文章篇幅以及本章節(jié)內(nèi)容在官方文檔中的占比,光是這篇就將近1.2W字了,因此大概需要分成五篇,甚至是四篇專欄來呈現(xiàn)(悲)。本篇主講第13章節(jié)(選項)至第13.2章節(jié)(播放控制)的文檔說明。
另外,這一章節(jié)部分原文內(nèi)容在表述時不是非常嚴謹,有些模棱兩可或表意不清(更有可能是我的水平有限),并且這其中的絕大部分配置項,在未來很長的一段時間內(nèi)我可能根本就不會去碰,默認設置已完全足夠,為此我不會做多余的且無依據(jù)的注釋說明。
以下摘取自 mpv player 官方使用手冊中的OPTION章節(jié),版本 v0.34.0,不保證內(nèi)容的時效性,僅供參考,實際還是以官方發(fā)布的最新文檔為準,善用 Ctrl + F 快速定位你想要的內(nèi)容:

Ch.14?選項
媒體流軌道選擇
--alang=<languagecode[,languagecode,...]>
指定待使用音頻語言的優(yōu)先級列表,不同的容器格式使用不同的語言編碼,DVD 使用 ISO 639-1 雙字符語言編碼;Matroska,MPEG-TS 和 NUT 使用 ISO 639-2 三字符語言編碼,而 OGM 使用自由形式的標識符,另見 --aid 選項。
這是一個字符串列表選項,詳情見 Ch.4.5 List Options 章節(jié)。
補充:選項參數(shù)語法格式講解
以 --alang=<languagecode[,languagecode,...]> 為例,< > 包裹的部分表示必選,同一選項中的參數(shù)與參數(shù)之間通過 ' , '?或者 ' | ' 分隔,其中 ' ,?' 表示可以組合使用多個可選參數(shù),' |?' 表示僅可以選擇唯一的可選參數(shù),用 [ ] 包裹的部分表示可選,上述選項中同時使用的意思是 --alang 選項至少得有一個 languagecode 參數(shù)。
--slang=<languagecode[,languagecode,...]>
指定待使用字幕語言的優(yōu)先級列表,不同的容器格式使用不同的語言編碼,DVD 使用 ISO 639-1 雙字符語言編碼;Matroska,MPEG-TS 和 NUT 使用 ISO 639-2 三字符語言編碼,而 OGM 使用自由形式的標識符,另見 --aid 選項。
這是一個字符串列表選項,詳情見 Ch.4.5 List Options 章節(jié)。
--vlang=<...>
等同于 --alang 和 --slang 選項,用于視頻軌。
這是一個字符串列表選項,詳情見 Ch.4.5 List Options 章節(jié)。
--aid=<ID|auto|no>
選擇音頻軌,默認是 auto 參數(shù),no 表示關閉音頻,另見 --alang 選項。當mpv播放器開始播放媒體文件時,一般會在終端上打印可用的音頻軌信息。
--audio 選項是 --aid 選項的別名。
--aid=no 或者 --audio=no 又或者 --no-audio 都表示禁用音頻播放(后面的幾個變形不適用于客戶端API)
注意
選擇軌道的選項(--aid 同樣還有 --sid 以及其他類似選項)有時表現(xiàn)出的行為可能會比較怪異,另外,這種行為會隨著各個mpv發(fā)行版而演變。
軌道選擇的屬性將在播放以外的時間返回選項值(按照預期),但在播放期間,返回的是默認軌道選擇,例如,在 --aid=auto 選項的影響下,aid 屬性會在播放初始化完成后突然返回值 2(假設文件中包含2條音軌,且第二條為默認選擇)
在 0.32.0 版本(以及部分在此之前的發(fā)布版本)的mpv播放器中,如果你傳入的是一個與之關聯(lián)的軌道不存在的軌道值(打比方,傳入 --aid=2 且只有一條音軌),aid 屬性返回的是 no,但如果在播放期間有另外一條音軌添加進來,那么當你嘗試將 aid 屬性設置成 2,什么也不會發(fā)生,因為 aid 選項的值依舊是 2,并且再次寫入相同的值是毫無作用的。
到了 0.33.0 版本,這種行為發(fā)生了改變,現(xiàn)在如果嘗試選擇一個不存在的軌道,軌道選擇選項在播放初始化期間就被設置為 auto。當軌道存在時一切照舊,但初始化會失敗。最終結果不像 0.33.0 版本之前那樣,在某些情況下,用戶的軌道選擇參數(shù)會遭到破壞。
同樣是從 0.33.0 版本開始,嘗試通過數(shù)字的方式選擇一條軌道將嚴格選擇相對應的軌道。在這項變化之前,嘗試選擇一條不存在的軌道會回退至播放初始化時就默認的軌道選擇。對比之下,新的行為更加具有前后一致性。
在運行期間設置一條軌道選擇屬性,如果新文件軌道列表的指紋與原來的不同的話,在隨后播放新的文件可能會重置軌道選擇為默認選項。
請務必留意上述所有內(nèi)容棘手的組合形式:比如說,mpv --aid=2 file_with_2_audio_tracks.mkv file_with_1_audio_track.mkv 最開始本應該播放正確的軌道,并且不帶音頻的播放第二個文件,如果你隨后返回至第一個文件,將播放它的第一條音軌,而且播放第二個文件時也帶有聲音。如果你在文件播放時不是采用? --aid=2 而是用了 set aid 2 的方式做了同樣的事情,那么切換到第二個文件時將播放它自己的音軌,這是因為運行期間進行的選擇是啟用指紋啟發(fā)式功能的。
--sid=<ID|auto|no>
顯示由 ID 指定的字幕流,默認選擇的是 auto,no 表示關閉字幕。
--sub 選項是 --sid 選項的別名。
--sid=no 或者 --sub=no 又或者 --no-sub 都表示禁用字幕解碼(后續(xù)變形不適用于客戶端API)
--vid=<ID|auto|no>
選擇視頻頻道,默認選擇的是 auto,no 表示關閉視頻
--video 選項是 --vid 選項的別名。
--vid=no 或者 --video=no 又或者 --no-video 都表示關閉視頻播放(后面的變形不適用于客戶端API)
如果視頻被禁用且媒體流是通過 youtube-dl 拉取得到,mpv播放器會嘗試只下載音頻數(shù)據(jù),原因是為了節(jié)省帶寬,這一步是通過將 ytdl_hook.lua 腳本當中的 ytdl_format 選項設置為 "bestaudio/best" 的方式來完成的。
--edition=<ID|auto>
(僅適用于 Matroska 類型的文件 .mkv)指定使用(章節(jié)集合)版號。0 表示首章節(jié)版號,如果設置成 auto (默認參數(shù)),mpv播放器會選擇被聲明為默認的首個版號,或者如果沒有默認版號,那么定義并設置為首章節(jié)版號。
--track-auto-selection=<yes|no>
啟用默認軌道流自動選擇功能(默認:yes),啟用該選項會讓播放器依據(jù) --aid,--alang 以及其他類似選項來選擇播放流,如果該功能被禁用,則不會選擇任何一個軌道流,而是選擇等待(這種等待模式和暫停類似,但并不會設置成暫停選項)
這在帶有 --lavfi-complex 選項的時候會比較有用:你可以按照這種模式進行播放,隨后通過在播放期間設置圖形化過濾器的方式選擇特定的軌道流。需要注意的是,如果 --lavfi-complex 在播放開始前就已經(jīng)設置,那么被引用的軌道流將始終是被選擇的。
--subs-with-matching-audio=<yes|no>
當自動選取一個字幕軌,同時選擇一個非強制音頻流,即使所選取的音頻流與你的首選字母語言匹配(默認:yes),如果你只是想顯示外掛音頻或屏幕文本的字幕,可以禁用該功能。
Ch.14.2?播放控制
--start=<relative time>
跳轉至給定時間的播放位置。
時間的通常格式是 [+|-][[hh:]mm:]ss[.ms] (至少得給出秒數(shù)),如果時間帶有 - 前綴,相關時間則被認為是相對于文件結尾處(通過解復用器/文件產(chǎn)生的結束信號),+ 前綴通常是被忽略的(請看以下的例子說明)
以下可選的時間格式也是能夠被識別的:
pp% 跳轉至 pp(0~100)所指的百分比播放位置。
#c 跳轉至數(shù)字 c 所指向的章節(jié)(章節(jié)數(shù)從1開始)
none 重置所有先前設置項(對于 libmpv 很有用)
如果 --rebase-start-time=no 選項沒有被給出,那么帶有 + 前綴的時間將會與文件開頭相關聯(lián),沒有前綴的時間戳被認為是絕對時間,即應該跳轉到帶有時間戳的畫面幀。作為一種bug,同時也是一類隱藏的特性,在 + 或者 - 前綴之前添加一個或多個空格,則始終會將時間解釋為絕對時間,可以用在跳轉到負時間戳位置(在大多數(shù)調(diào)試的時候會比較有用)
--length=<relative time>
在經(jīng)歷與開始時間相關的指定時長之后停止播放。
如果同時給出 --end 和 --length 選項,當滿足兩者之中的任意一個結束時刻點都會停止播放。
晦澀的注意事項:如果 --rebase-start-time 選項被設置為 no,上述行為將無法正常執(zhí)行,并且指定的時間也不再是絕對時間,正如 --start 選項描述中定義的那樣。
--rebase-start-time=<yes|no>
決定是否將文件開始時間移至 00:00:00 的位置(默認:yes),這對于開始位置處于隨機時間戳的文件來說會少很多麻煩,比如說傳輸串流之類。另一方面,如果重置時間戳,由此導致的行為可能會相當奇怪。出于此原因,且如果你真的對實際時間戳抱有興趣的話,可以設置為 no 禁用該行為。
--speed=<0.01-100>
通過作為參數(shù)給出的因子值減緩或加快播放速度。
如果使用了 --audio-pitch-correction 選項,以快于正常的速度播放會自動插入 scaletempo2 音頻過濾器。
--pause
以暫停狀態(tài)啟動播放器。
--shuffle
按照隨機順序播放文件
--playlist-start=<auto|index>
設置內(nèi)部播放列表中需要開始播放的文件,索引(index)是一個整數(shù),0 代表(列表中)第一個文件,auto 意味著選擇需要播放的項目取決于播放恢復機制(默認)。如果給定索引對應的項目不存在,導致的行為是未定義的并且有可能在以后的版本中做出調(diào)整,以上描述同樣適用于播放列表中包含更多的列表的情況(別指望這些行為是靠譜的)。不過,想要將播放列表文件傳給mpv播放器應該使用這個選項,比如 mpv playlist.m3u --playlist-start=123 會按預期運行,只要 playlist.m3u 沒有鏈接附加的播放列表。
參數(shù)值 no 是 auto 的被廢棄的別名。
--playlist=<filename>
按照播放列表文件進行播放,支持一些常見的格式。如果未檢測到格式,則會看作是以換行符為分隔的文件列表。你或許需要用該選項來加載純文本格式的播放列表文件,需要注意的是不支持 XML 格式的播放列表。
該選項會強制 --demuxer=playlist 去解釋播放列表文件,部分播放列表格式,特別是 CUE 以及光盤格式,需要使用到不同的解復用器,因此無法在該選項下正常播放,不過仍可以在不使用該選項的前提下直接播放。
你可以在不帶上這個選項的情況下直接播放多媒體列表,在 0.31.0 之前的mpv版本,該選項會禁用一切可能開啟的安全機制,但自從 0.31.0 版本之后使用了與直接播放列表文件相同的安全機制。如果你信任播放列表,你可以用 --load-unsafe-playlists 選項禁用一切安全檢查。因為播放列表可以加載其他的列表項目,請考慮僅將該選項用于播放列表自身而不是它的子項目,使用方法如下:
mpv --{ --playlist=filename --load-unsafe-playlists --}
警告
舊版mpv通過 --playlist 選項播放文件列表的方式,是不足以安全對抗經(jīng)過惡意構造的文件。這類文件可能會觸發(fā)一些有危害的行為,對于 0.31.0 版本之前所有的mpv播放器,以及所有版本的MPlayer都是如此,但不幸的是這項事實早前并沒有很好地編排到文檔中,甚至有些人被誤導在未信任的播放源上使用 --playlist 選項。如果你不確定自己的mpv版本是否大于 0.31.0 的話,請!不!要!在任何你不信任的互聯(lián)網(wǎng)播放源或文件上使用 --playlist 選項。
尤其是,播放列表可以包含使用非本地文件協(xié)議的項目,例如像 avdevice:// 這類的特殊協(xié)議(從根本上來說是不安全的)
--chapter-merge-threshold=<number>
以毫秒為單位,合并幾乎連續(xù)且有序的章節(jié)部分的閾值(默認:100),部分帶有有序章節(jié)的 Matroska 文件會有不準確的章節(jié)結尾時間戳,導致在本章節(jié)結尾與下一章節(jié)開頭本應該銜接的地方產(chǎn)生撕裂。如果播放部分的結尾小于給定的閾值則會與下一播放部分分離,隨后在章節(jié)變更期間繼續(xù)正常地播放視頻,而不是進行跳轉。
--chapter-seek-threshold=<seconds>
以秒為單位,從章節(jié)開頭到目標章節(jié)的距離,其中向后查找章節(jié)會跳轉至前一章節(jié)(默認:5.0),超出此閾值時,向后查找章節(jié)則會跳轉至當前章節(jié)的開頭。負閾值則意味著總會向后跳轉至前一章節(jié)。
--hr-seek=<no|absolute|yes|default>
選擇在使用精確跳轉時不會受限于關鍵幀,這種跳轉方式需要將視頻從前一個關鍵幀解碼到目標位置,所以可能需要點時間,這取決于解碼性能。對于一些視頻格式來說,精確跳轉時不可行的,該選項會選擇默認的選取方式用于跳轉。可以通過綁定鍵位和輸入命令的方式顯示覆蓋默認值。
no:不使用精確跳轉
absolute:如果是跳轉到文件中的絕對位置則使用精確跳轉,例如章節(jié)跳轉,但不適用于類似方向鍵的默認行為的相關跳轉(默認)
default:類似 absolute 參數(shù),但是允許在僅音頻情形下啟用 hr-seeks,具體行為取決于特定實現(xiàn)并且可能會隨著新版本做出變更。
yes:每當可行時就使用精確跳轉。
always:和 yes 參數(shù)一樣(出于兼容性考慮)
--hr-seek-demuxer-offset=<seconds>
該選項的存在是為了解決因某些文件格式在解復用器中的錯誤或限制所導致的精確查找失敗問題。一些解復用器無法在給定目標位置之前跳轉到關鍵幀,而是跳到與之稍后的位置。該選項的參數(shù)值充當了提供給解復用器的時間戳的減數(shù),因此,如果你將該項設置為1.5并且嘗試精確跳轉到60s處,解復用器會被告知跳轉至58.5s的位置,這將有望減少跳轉到60s之后某個時間點的出錯機會。設置該選項的副作用是會讓精確跳轉的速度變慢,這是因為早先的解復用器所在位置與真實目標之間的視頻可能會被不必要地解碼。
--hr-seek-framedrop=<yes|no>
允許視頻解碼器在跳轉期間丟棄視頻幀,如果這些視頻幀是在跳轉目標之前的話(默認:yes)。如果該選項被啟用,則精確跳轉的速度將會變得更快些,但如果你使用了會修改時間戳或者向其中添加新視頻幀的視頻過濾器,那么可能會導致“精確”跳過目標幀,在這個例子中,當啟用逐行掃描時就有可能會破壞視頻幀的回退狀態(tài)。
--index=<mode>
控制如何在文件中跳轉,需要注意的是如果文件中缺少索引,那么默認會動態(tài)創(chuàng)建索引,所以你無需修改此選項,但或許會對一些破損的文件有所幫助。
default:如果文件中存在索引則用之,若缺失則創(chuàng)建索引
recreate:不要讀取或使用文件的索引
注意
該選項僅當基礎媒體支持跳轉時有效(即不含標準輸出流,管道流等)
--load-unsafe-playlists
從被認為是不安全的播放列表中加載URL(默認:no),這包括特殊協(xié)議以及任何引用非常規(guī)文件的內(nèi)容。另一方面,加載普通文件和http鏈接始終被認為是安全的。
此外,如果在該選項被設置的條件下加載播放列表,被添加的列表項目將不會標記為來源于網(wǎng)絡或是潛在的不安全位置(而是將該行為等同于向mpv命令行中直接提供列表項目或是文件加載命令)。
--access-references=<yes|no>
跟蹤任何正在打開的文件中的引用項(默認:yes),如果文件會被自動掃描(例如縮略圖生成),禁用該選項會有幫助。
--loop-playlist=<N|inf|force|no>, --loop-playlist
指定循環(huán)播放列表次數(shù),數(shù)值1表示僅循環(huán)播放一次(默認),2表示循環(huán)播放兩次,依此類推。inf 意思是始終循環(huán)播放,no 和數(shù)值1的效果一致且不開啟循環(huán)播放,如果在命令行中指定了多個文件,那么整個列表都將循環(huán)播放, --loop-playlist 選項等同 --loop-playlist=inf 選項。
force 模式和 inf 比較類似,但不會跳過那些被標記為加載失敗的列表項,這就意味著播放器可能會浪費CPU時間嘗試去循環(huán)那些不存在的文件。不過這對于在網(wǎng)絡連接非常差的環(huán)境下,播放網(wǎng)絡廣播或許會有所幫助。
--loop-file=<N|inf|no>, --loop=<N|inf|no>
指定單文件循環(huán)次數(shù),inf 表示始終循環(huán),no 表示普通播放,為了兼容性,--loop-file 和 --loop-file=yes 選項都是可接受的,并且和 --loop-file=inf 效果一致。
與 --loop-playlist 選項所不同的是,該選項不會循環(huán)播放列表,僅僅是循環(huán)文件本身,如果列表中僅包含單個文件,則兩者之間的不同之處在于該選項會執(zhí)行循環(huán)跳轉,而不是去重新加載文件。
--loop 是該選項的別名。
注意
--loop-file 選項會去統(tǒng)計讓播放器跳轉到文件開頭的次數(shù),而不是完整播放的次數(shù),這就意味著 --loop-file=1 將會按照播放文件兩次而結束,正好與 --loop-playlist 相反,后者是統(tǒng)計完整播放的次數(shù)。
--ab-loop-a=<time>, --ab-loop-b=<time>
設置循環(huán)點,如果播放至b時間戳,則會跳轉至a時間戳,跳轉超過b點位置則不會觸發(fā)循環(huán)(有意而為之的)
如果a在b之后,最終行為就像給出了正確順序的循環(huán)點那樣,播放器會在經(jīng)過a點之后跳轉到b點,這與舊版行為不同,后者不會循環(huán)(作為一個bug,循環(huán)到a點之后就直達文件末尾)
如果兩個選項當中的任意一個設置成 no(或者干脆不設置),則不開啟循環(huán),這與舊版行為不同,不設置a點暗示從文件頭部開始,不設置b點意味著到文件結尾為止。
循環(huán)點可以在軟件運行期間通過相關屬性進行調(diào)整,另外請參考 ab-loop 命令。
--ab-loop-count=<N|inf>
指定 A-B 循環(huán)次數(shù),結束后忽略 A-B 循環(huán)點(默認:inf),沒完成一次循環(huán)都會將該選項遞減1(除非被設置為 inf 或 0),inf 表示始終循環(huán),如果該選項被設置為0,那么 A-B 循環(huán)模式將會被忽略,并且即使是 ab-loop 命令也無法再次開啟循環(huán)(如果兩個循環(huán)點均被設置,但是 ab-loop-count 選項為 0 的話,那么該命令會在OSD消息中顯示"disabled")
--ordered-chapters, --no-ordered-chapters
默認啟用,禁用對 Matroska 文件有序章節(jié)的支持,mpv播放器將不會加載或檢索來自其他文件的視頻片段,同時也會忽略任何為主文件指定的章節(jié)順序。
--ordered-chapters-files=<playlist-file>
加載給定文件為播放列表,并且當打開一個使用有序章節(jié)的 Matroska 文件時,嘗試使用包含在其中的的文件作為引用文件。這會覆蓋通過掃描主文件所在的同級目錄來加載引用文件的正常機制。
這對于加載不在本地文件系統(tǒng)上的有序章節(jié)文件是有用的,或者是如果引用文件位于不同的目錄中的情況。
注意:一個播放列表可以做到和包含用換行符分隔文件名的文本文件一樣簡單。
--chapters-file=<filename>
從指定文件中加載章節(jié)內(nèi)容,而不是使用在主文件中找到的章節(jié)元數(shù)據(jù)。
選項接受媒體文件(像mpv之類)或者是類似 ffmetadata 的偽格式,以及使用指定文件的章節(jié)來替換當前文件的章節(jié)。不能直接用于 OGM 或 XML 格式的章節(jié)。
--sstep=<sec>
在每幀畫面之后跳過指定的秒數(shù)。
注意
沒有 --hr-size 選項的話會直接跳轉到關鍵幀。
--stop-playback-on-init-failure=<yes|no>
如果音頻或視頻兩者當中的任何一個無法被初始化則停止播放(默認:no),使用 no 作為參數(shù),則出現(xiàn)上述情況時將繼續(xù)以僅視頻或僅音頻的模式播放。這不會影響僅有音頻或視頻文件的播放。
--play-dir=<forward|+|backward|->
控制播放的方向(默認:forward)設置為 backward 將會嘗試以相反的順序播放文件,同時減少播放時間,如果該選項在播放開始時被設置,則會從文件結尾處開始播放;如果是在播放期間被更改,hr-seek 選項值會被用于更改方向。
+ 和 - 分別是 forward 和 backward 的別名。
該選項剩余部分的描述內(nèi)容適用于 backward 模式。
注意
反向播放往往是不穩(wěn)定的,不一定總是能正常工作,會比正向播放慢一些,并且會破壞其他的某些功能,具體會如何運作主要卻決于被播放的文件。
與大多數(shù)媒體格式一樣,mpv被設計僅用于正向播放,當采用反向播放時需要更多資源來維持播放的正常進行,并且取決于你的使用場景,或許有其他工具(在這類場景下)表現(xiàn)會更加好一些。
反向播放并不完全是一種首要的功能,為了權衡利弊,有時會對反向播放產(chǎn)生不利,但反過來說也不會對正常播放造成不利影響。所以為了降低復雜度,沒有對(反向播放)實現(xiàn)各種可能的優(yōu)化。
通常來說,媒體播放器有著高度流水化作業(yè)(預存取數(shù)據(jù)是在單獨的線程中準備好的,因此當下一階段需要這些數(shù)據(jù)時,可以做到實時利用),但反向播放基本上會在多個隨機的時刻點打斷這種流水線式作業(yè)。
例如,對于僅內(nèi)部的編解碼器是可以做到反向播放的,并且圍繞它們構建的工具可以有效地利用這些編解碼器(考慮到視頻編輯器或相機查看器),在這種情況下mpv提供的方法將不再有效,因為mpv使用的是其自身的通用反向播放算法,并沒有經(jīng)過很好地優(yōu)化。
如果你只是想快速反向播放視頻并且僅顯示"關鍵幀",那么你只需要用正向播放并且按住左側光標鍵(在具有默認配置的CLI平臺上,該按鍵會發(fā)送許多相對跳轉命令)
該實現(xiàn)主要由3個部分組成:
反向解復用,這部分依賴于解復用器緩存,因此解復用器緩存應該(也必須,除非你要做些測試)開啟,并且緩存的大小將影響性能的發(fā)揮,太小或太大的緩存可能會導致二次運行時行為結果。
反向解碼,使用解碼器庫(libavcodec)則不支持此項功能。模擬辦法是通過正向提供數(shù)據(jù)位,將結果放入隊列中,接著反向將隊列數(shù)據(jù)返回給VO,隨后回到較早的位置處重新開始。這期間可能需要緩沖大量解碼數(shù)據(jù),并且還會完全打斷流水化處理過程。
反向輸出,這相對來說還算簡單,因為解碼器會按照所需的順序返回幀畫面,不過,這也可能會導致各種各樣的問題,原因是過濾器會認為音頻和視頻流還在按原順序繼續(xù)向后播放
已知問題:
該選項的功能過于弱雞,若是起不到任何作用的話,可能會發(fā)生無法預測(隨機)的行為。輕則讓用戶和空氣斗智斗勇(白忙活),重則可能會讓用戶的機器卡頓或是CPU發(fā)燙(但因此導致的內(nèi)存使用率超過用戶設置上限的問題確確實實是一個bug)
在性能和資源使用率這方面表現(xiàn)不太行,在某種程度上,這屬于反向播放普通媒體格式的固有表現(xiàn),部分是出于對功能實現(xiàn)的選擇和權衡的考慮。
極度依賴于表現(xiàn)良好的解復用器行為,盡管反向解復用并不需要特殊的解復用器的支持,但得要求解復用器能夠可靠地執(zhí)行跳轉,其他需求還包括打包元數(shù)據(jù)以及具有明確行為。
從末尾開始播放可能會不起作用,具體取決于跳轉行為和文件時長檢測。
某些容器格式、音頻以及視頻編碼因為其自身的行為而不受支持,因為沒有對應的清單,用戶通常不會注意到。某些實時流(包括電視采集信號),以及某些有損音頻編解碼器可能尤為會出現(xiàn)問題。已知h264在刷新期間由于libavcodec的問題而無法正常工作。WAV和其他一些原始的音頻格式往往都會有這樣那樣的問題。
不支持字幕的反向解復用,字幕顯示仍適用于某些外部文本字幕格式(將這些文本字幕完全讀入內(nèi)存,只需要反向顯示),那些緩存在字幕渲染器中的文本字幕也是有機會能夠正常顯示在屏幕上。
某些用于處理破損文件播放或者難搞定文件的功能是完全無法運作的(比如說更正時間戳)
嘗試將它同視頻硬件解碼一塊兒使用可能會耗盡你的全部GPU內(nèi)存,然后就是崩潰或者咋滴。否則就是直接失敗,因為 --hwdec-extra-frames 選項必定是設置地過低了。
錄制流會被打斷,但如果你只在緩存區(qū)域內(nèi)進行反向播放,-stream-record 選項可能繼續(xù)工作。
相對跳轉可能會表現(xiàn)地很奇怪,小范圍地反向跳轉可能無法正確跳轉,并且音頻將在一段時間內(nèi)保持靜音,建議使用 hr-seek 選項應該就不會有這些問題。
有些事情會變得很奇怪,例如,當跳轉命令以預期的方式進行播放期間(前提是能正常工作),逐幀命令則會被轉置,反向跳轉的執(zhí)行操作將會以十分昂貴的代價向前移動1個視頻幀。
調(diào)諧:
移除所有你所設置的 -vf/af 過濾器,禁用無用的選項比如SPDIF直通。
如果有報告反轉隊列溢出的問題,則增加 --video-reversal-buffer 選項的值或許會有幫助,該問題可能會發(fā)生在高比特率的視頻或具有較大GOP的視頻中。硬件解碼大多會忽略這一點,因此你需要增加 --hwdec-extra-frames 這個選項(在你得到播放時未記錄的錯誤的時候)
解復用器緩存對于反向解復用是至關重要的,請確保設置了 --cache=yes 的選項。另外緩存大小也可能會很重要,如果緩存太小,隊列會溢出,并且無法繼續(xù)反向播放,或者執(zhí)行了過多的底層跳轉。如果緩存太大,那么實現(xiàn)權衡可能會導致通常的性能問題,使用 --demuxer-max-bytes 選項可能會增加解復用器層允許排隊進行反向解復用數(shù)據(jù)包的數(shù)量(基本上與解復用器層的 --video-reversal-buffer 選項等效)
設置 --vd-queue-enable=yes 選項可以很大程度上讓播放更流暢(只要這個選項能正常工作的話)
--demuxer-backward-playback-step 選項還會影響可以執(zhí)行跳轉地次數(shù),以及反向解復用是否會因列溢出而被迫中斷。如果參數(shù)值設置地過高,則后退操作始終需要檢索更多的數(shù)據(jù)包,即使緩存設置得足夠大也是如此。
設置 --demuxer-cache-wait 選項可能有助于將整個文件緩存到解復用器緩存中,將 --demuxer-max-bytes 選項設置為較大的大小用來確??梢宰x取整個緩存;--demuxer-max-back-bytes 選項也應該設置為較大的大小以防止試圖裁剪緩存的發(fā)生。
如果音頻的音損是可以被感知到的,即使沒有AO的暗中幫助,在某些情況下,增加 --audio-backward-overlap 選項的值可能會對此有所幫助。
--video-reversal-buffer=<bytesize>, --audio-reversal-buffer=<bytesize>
用于反向解碼。首先反向解碼按步驟向前解碼,隨后反轉解碼器的輸出。這些選項的控制著可緩沖空間的近似最大字節(jié)數(shù)。這樣做的主要用途是避免無止盡的資源消耗;在正常反向播放期間可緩沖區(qū)域不應該達到自身上限,否則會丟棄部分已緩存的幀畫面。
請在反向播放期間遇到反向隊列溢出錯誤的情況時使用該選項,逐步增加緩沖大小直至警告消失。通常來說,視頻緩沖區(qū)會首先溢出,特別是如果緩存的是高分辨率視頻。
但如果使用了硬件解碼,該選項將無法正常工作,原因是視頻幀大小不包含被GPU渲染以及設備使用的內(nèi)存。部分硬件解碼器也可能會受到 --hwdec-extra-frames 選項的限制。
具體需要多大的隊列大小完全取決于媒體編碼的方式,一般來說音頻需要的緩沖會非常小,而視頻則可能需要非常大的緩沖區(qū)。
(從技術上來講,這允許最后一幀超過限制,此外,這并不包括其他緩沖幀,例如解碼器內(nèi)部的緩沖幀或者視頻輸出部分)
該選項完全不會影響到解復用器緩存的行為。
參見 --list-options 選項獲取默認值以及數(shù)值范圍相關內(nèi)容,<bytesize> 選項接受 KiB 以及 MiB 等這樣的后綴。
--video-backward-overlap=<auto|number>, --audio-backward-overlap=<auto|number>
用于向后解碼重疊部分的關鍵幀范圍的數(shù)量(默認:auto)("關鍵幀"應理解為 mpv/ffmpeg 內(nèi)部的特定含義)。反向解碼的工作原理是一小步一小步地向前解碼,一些編解碼器無法從任意地數(shù)據(jù)包處重新開始解碼(即使被標記為跳轉點)這在反向解碼中顯得尤為明顯(理論上這也是跳轉導致的問題,不過 --hr-seek-demuxer-offset 選項可以修復并進行跳轉),特別是基于MDCT的音頻編解碼器會受此影響。
解決辦法是每次都將之前的數(shù)據(jù)包回饋至解碼器,然后丟棄輸出。該選項需要傳遞數(shù)據(jù)包的數(shù)量,對于視頻,自動選項將當前硬編碼設為 0 值,對于有損音頻則使用 1;對于無損音頻使用的是 0;對于某些特定的有損音頻的編碼器,該值被設為 2 。
--video-backward-overlap 選項可能會處理內(nèi)部刷新的視頻,具體取決于明確的條件,你或許還可以使用 --vd-lavc-show-all 選項。
--video-backward-batch=<number>, --audio-backward-batch=<number>
反向解碼時要求單次解碼的關鍵幀范圍數(shù)(默認:視頻設為 1,音頻設為 10)。作為另外一個毫無用武之地的調(diào)諧參數(shù),應該沒人會使用。該選項應該只會影響性能,理論上來說,為音頻設置一個大于1的值會減少開銷,因為回退操作的頻率較低,并且由于解碼重疊幀較少從而導致的冗余解碼工作也相對較少(請參見 --audio-backward-overlap 選項說明),另一方面,該選項需要更大的反轉緩沖區(qū),并且由于破壞了播放器的流水式作業(yè)過程(例如,預先解碼很多內(nèi)容,然后在一段時間內(nèi)又不執(zhí)行任何操作的情況)從而使播放不那么流程。
設置 --video-backward-batch 有可能始終沒有任何意義,但從理論上來說,它可以通過減少回退操作來協(xié)助內(nèi)部視頻解碼器的工作。
--demuxer-backward-playback-step=<seconds>
當反向播放時解復用器應該前往獲取新的數(shù)據(jù)包的回跳秒數(shù)(默認:60),這對于反向播放的調(diào)諧會很有幫助,請參見 --play-dir 選項說明以獲取更多細節(jié)。
以非常低的數(shù)值或 0 值設置該選項可能會讓播放器認為跳轉被中斷了,又或是可能會讓播放器執(zhí)行多次跳轉。
將該選項設為較高的數(shù)值可能會導致二次運行時行為。

參考資料:
https://mpv.io/manual(MPV Player Reference)
https://mpv.io(mpv項目官網(wǎng))
