媒體庫與掃描 - MiCat-S/Mi302 GitHub Wiki
這一頁說明媒體庫的資料夾怎麼放、Mi302 怎麼掃描,以及中文片名的排序搜尋、演職人員中文名、類型中文化和媒體庫封面。
媒體庫在管理網頁的「媒體庫」分頁建立。分頁上每個媒體庫一格,顯示封面、名稱、類型、項目數和資料夾。按最後一格的「新增媒體庫」,在對話框裡取名,類型選「電影」或「劇集」,按「加入資料夾」選伺服器上的資料夾,最後按「儲存並掃描」。一個媒體庫可以有好幾個資料夾。
要改名稱、類型、資料夾或封面,點那一格的封面、名稱或「編輯」,打開同一個對話框。對話框左下角的「刪除媒體庫」刪掉整個媒體庫,資料夾裡的檔案不會被刪;但這個媒體庫的觀看紀錄(看過、續播點、收藏)會一起刪除,之後再加回同一個資料夾也找不回來,確認框會寫出有幾筆。一次建好幾個媒體庫見批量新增媒體庫。
Mi302 不自己刮削,只讀資料夾裡已經有的檔案:
- 影片:
.strm和一般影片檔(.mkv.mp4.m4v.avi.ts.m2ts.mov.wmv.flv.webm.rmvb.mpg.mpeg.iso.3gp)。 - 中繼資料:nfo 和圖片(
.jpg.jpeg.png.webp)。這些可以從 115 同步時一起下載,或交給 MoviePilot 刮削,見 MoviePilot 整合。
典型的結構:
movies/
Inception (2010)/
Inception (2010).strm
Inception (2010).nfo # 或 movie.nfo
poster.jpg fanart.jpg
tv/
Dark (2017)/
tvshow.nfo poster.jpg fanart.jpg
Season 1/
Dark.S01E01.strm
Dark.S01E01.nfo
Dark.S01E01-thumb.jpg
找電影和劇集資料夾時,名稱以 .、@、# 開頭的資料夾會略過(例如 NAS 的 @eaDir、#recycle)。
- 每個影片檔是一部電影。
- 資料夾裡只有這一部影片(而且不是直接放在媒體庫資料夾底下)時,資料夾名稱帶年份、或檔名沒有年份,就用資料夾名稱當片名,例如
Inception (2010)。這種資料夾也讀movie.nfo。 - 其他情況用檔名:認得
片名 (年份),或去掉1080p、BluRay、x265這類字樣後取片名和年份。 - nfo 裡有
<title>時以 nfo 為準。
每個劇集資料夾是一部劇。劇集資料夾裡任何一層的影片都算這部劇的集,可以放在季資料夾裡,也可以直接放在劇集資料夾裡。
季資料夾的名稱:
| 寫法 | 例子 | 季 |
|---|---|---|
Season N、Series N(中間可以有空格、點、底線、減號) |
Season 1、Season.02、Series 3
|
N |
SN |
S01、s2
|
N |
第N季、第N部(阿拉伯數字或中文數字) |
第1季、第一季、第十二季
|
N |
Specials、Special、SP、特別篇、特别篇
|
0(特別篇) |
集號從檔名找,依下面的順序,第一個對上的算數:
| 寫法 | 例子 |
|---|---|
SxxEyy(也認 SxxEPyy,中間可以有空格、點、底線、減號) |
Dark.S01E02.mkv、S01 EP02
|
NxNN |
1x02 |
第N集、第N話、第N话(阿拉伯數字或中文數字) |
第2集、第十二集
|
Eyy、EPyy(前面是開頭、空格、點、底線、減號或 [) |
EP02、[E05]
|
檔名開頭就是集號,後面接點、減號、底線或 、;只用空格隔開時要補零 |
10.潘玮柏战队…、03-比赛…、01 嘻哈首战、07
|
最後一種只在沒有其他寫法時才用。只有空格隔開又沒補零的(21 Jump Street)不算集號。
有好幾個來源時的優先順序:
- 季:集的 nfo 裡的
<season>→ 所在的季資料夾 → 檔名裡的SxxEyy→ 都沒有就算第 1 季。 - 集號:集的 nfo 裡的
<episode>→ 檔名。
nfo 裡的 <season>、<episode> 是負數(例如刮削時沒認出集號寫的 -1)時當成沒寫,改用後面的來源。
- 集名:集的 nfo 裡的
<title>→ 「第 N 集」→ 檔名。
季的名稱是「第 N 季」,第 0 季是「特別篇」。季資料夾裡的 season.nfo 可以改季的名稱和簡介。
劇集媒體庫裡可以有分類資料夾,例如 MoviePilot 二級分類的 电视剧/国产剧/庆余年 (2019)/。媒體庫路徑直接選 电视剧 就好,不用每個分類各加一次。
符合下面任何一項的資料夾是一部劇:
- 裡面有
tvshow.nfo。 - 名稱是
劇名 (年份),括號也可以是全形()或[]。 - 裡面有季資料夾。
- 裡面直接放著影片或 strm。
其他資料夾當成分類,再往下一層找。媒體庫資料夾底下最多找三層分類資料夾。
注意兩種會認錯的情況:
- 分類資料夾裡直接放了影片,這個分類會被當成一部劇。
- 劇集資料夾沒有年份、沒有
tvshow.nfo,影片又都放在不是季資料夾的子資料夾裡(例如Disc1),這部劇會被當成分類。給劇集資料夾加上年份最保險。
想讓每個分類在播放器首頁各佔一列,就每個分類各建一個媒體庫,用下一節的「從資料夾批量新增」可以一次建好。
一個資料夾底下已經分好「电影」「国产剧」「日番」這類子資料夾,想讓每個子資料夾各自成為一個媒體庫時,按「媒體庫」分頁最後一格的「從資料夾批量新增」:
- 選上層資料夾。對話框會先讀第一個媒體庫第一個資料夾的上一層,還沒有媒體庫時直接打開選資料夾的視窗。要換資料夾就按「選擇…」,或輸入路徑後按「讀取」。
- 每個子資料夾一列,附上影片數和建議的類型。
- 勾選要新增的,名稱和類型都可以改。空資料夾和已經在某個媒體庫裡的資料夾預設不勾,後者會寫出在哪個媒體庫。
- 按「新增並掃描」。
建議的類型是看資料夾裡的檔案猜的:
- 取樣的影片裡有三成以上檔名帶集數(
S01E01、1x01、第1集、EP01這類)、放在季資料夾裡,或在有tvshow.nfo的資料夾裡,就建議「劇集」,否則建議「電影」。 - 影片少於 3 部時改看資料夾名稱:帶「电影」「剧场版」「movie」「film」的是電影,帶「剧」「番」「动漫」「动画」「综艺」「电视」「tv」「series」「show」「anime」「drama」的是劇集,繁體字也認得。都看不出來就先當電影。
名稱改成一樣的幾列會合成一個媒體庫,類型要相同。名稱和現有的媒體庫相同,這個資料夾就加進那個媒體庫,類型跟著那個媒體庫。每一列底下會寫出它會怎麼處理,有問題的列(名稱空白、同名但類型不同)要先改好才能送出。
資料夾可能在網路磁碟上,所以每個子資料夾最多往下看 5 層、1.5 秒,整次最多 12 秒。沒看完的影片數顯示「至少 N 部」,來不及看的顯示「影片數不明」、類型改看名稱,也不會預設勾選,對話框上方會提醒檢查。
表格裡的 X 是影片檔名去掉副檔名。圖片可以是 .jpg、.jpeg、.png、.webp。
| 項目 | nfo | 海報 | 背景圖 | 橫幅 | Logo |
|---|---|---|---|---|---|
| 電影 | X.nfo |
X-poster、X
|
X-fanart、X-backdrop
|
X-thumb、X-landscape
|
X-logo、X-clearlogo
|
| 電影(資料夾裡只有這一部時另外認) | movie.nfo |
poster、folder、cover
|
fanart、backdrop、background
|
thumb、landscape
|
logo、clearlogo
|
| 劇集(放在劇集資料夾) | tvshow.nfo |
poster、folder、cover
|
fanart、backdrop、background
|
thumb、landscape
|
logo、clearlogo
|
| 季 | 季資料夾裡的 season.nfo
|
劇集資料夾裡的 season01-poster、season01(特別篇是 seasonspecials-poster、seasonspecials);沒有就用季資料夾裡的 poster、folder、cover
|
|||
| 集 | X.nfo |
X-thumb、X
|
- 集沒有自己的圖時,用劇的橫幅(
thumb/landscape),沒有橫幅就用劇的背景圖。 - 季和集沒有自己的背景圖、橫幅、Logo 時用劇的。
- nfo 讀的欄位:
title、originaltitle、sorttitle、plot(或outline)、year、premiered(或aired、releasedate)、rating、mpaa、genre、runtime(分鐘)、uniqueid和tmdbid/imdbid/tvdbid、season、episode,以及演職人員(見下面)。
掃描是把資料夾裡的影片、nfo 和圖片讀進資料庫,播放器看到的就是資料庫裡的內容。不一定要整個重新掃描。
「媒體庫」分頁可以:
- 按某個媒體庫那一格的「掃描」,只掃這個媒體庫。
- 打開媒體庫的「編輯」對話框,按某個資料夾那一行的「掃描」,只掃這個資料夾。資料夾不存在時會標示「資料夾不存在」,這一行沒有「掃描」按鈕,媒體庫那一格也會寫出幾個資料夾不存在。剛加進去、還沒儲存的資料夾也沒有「掃描」按鈕。
- 按上方的「掃描資料夾…」,選任何一個媒體庫裡的資料夾,例如一個分類
电视剧/国产剧或一部劇电视剧/国产剧/庆余年 (2019)。選到媒體庫以外的位置會提示「這個位置不在任何媒體庫的資料夾裡」。 - 按「全部重新掃描」,掃全部媒體庫。
掃描時頁面上方會顯示「掃描中」、百分比和正在處理的片名。第一次掃描還不知道總數,顯示來回滑動的忙碌條。同一時間只跑一個掃描,其他的排隊。
掃描中可以按「停止」:在兩個項目之間停下,沒掃到的不會從媒體庫刪掉,下次掃描再補。排在後面等著的整庫掃描(例如開機、改了設定之後的)也一起取消,停止之後再按的照常掃;同步後、刪除後只掃變動地方的照常做(那些地方之後不會再有人掃)。沒在掃描時,進度條的位置顯示上次掃了什麼、處理了幾個項目、是不是按了停止。
自動掃描也只掃有變動的地方:
| 時機 | 掃哪裡 |
|---|---|
| 每次啟動 Mi302 | 全部媒體庫 |
| 115 同步完成(「同步完自動重新掃描媒體庫」開著時,預設開) | 新增、改名、移動或刪除的檔案所在的劇或電影 |
| MoviePilot 刮削完成 | 刮削過的那些 |
MoviePilot 或其他工具呼叫 POST /Library/Media/Updated
|
通知裡的路徑(先依 MoviePilot 的路徑對應換回 Mi302 的路徑);通知裡沒有路徑時掃全部 |
播放器對單一項目按「重新整理」(POST /Items/{id}/Refresh,要管理員帳號) |
那部電影或那部劇;對媒體庫按就是整個媒體庫 |
POST /Library/Refresh |
全部媒體庫 |
| 在「媒體庫」分頁儲存(「儲存並掃描」「新增並掃描」「刪除媒體庫」) | 新增或改過的媒體庫;刪掉的媒體庫連同裡面的項目一起移除 |
部分掃描以一部劇或一部電影為單位:
- 劇集媒體庫:給一集或一季的路徑,會重掃整部劇;給分類資料夾,會掃裡面所有劇;不在任何劇集資料夾裡的檔案略過。
- 電影媒體庫:重掃變動所在的整個資料夾,因為同一個資料夾裡有幾部影片會影響片名怎麼取;直接放在媒體庫資料夾底下的影片只處理那一部。
- 已經刪掉的路徑:把資料庫裡那底下的項目移除。
- 重複或互相包含的路徑只掃一次。
- 一次超過 300 個單位時(例如第一次全量同步),改成把這些單位所在的媒體庫整個掃一次。
項目以檔案路徑對應。重新掃描(不論部分或全部)不會改變項目的 id,觀看紀錄、收藏、片頭片尾紀錄都會留著。檔案改名或搬移後是新的項目,舊項目和它的觀看紀錄在下次掃描時移除。
NAS 的 NFS/SMB、Parallels 的 /media/psf/... 這類資料夾,開機時可能比 Mi302 晚掛上。媒體庫資料夾不存在、讀不到或完全是空的,Mi302 會當成還沒掛上:
- 整個媒體庫的掃描(包括啟動時那一次)保留這個資料夾原本的項目和觀看紀錄,不會當成影片全被刪了,日誌記一筆警告「媒體庫路徑不存在或是空的」。
- 部分掃描略過這個資料夾。
掛好之後在「媒體庫」分頁按「全部重新掃描」即可。
反過來說,真的把一個資料夾清空時,舊項目會一直留著。這時在媒體庫的「編輯」對話框把這個資料夾移除,再按「儲存並掃描」;或按「刪除媒體庫」刪掉整個媒體庫。
排序:
- 電影和劇集的排序名用 nfo 的
<sorttitle>,沒有就用片名。 - 中文先轉成簡體再轉拼音,一個字一個音節、用空格隔開:
流浪地球2→liu lang di qiu 2。其他文字轉小寫。所以播放器按字母跳轉也有效。 - 集的順序照季、集號,不受影響。
搜尋:
- 片名、原名(nfo 的
<originaltitle>)都認。 - 中文片名另外可以用全拼(
qingyunian)、首字母(qyn)、簡體、繁體(慶餘年)找到「庆余年」。拼音只從片名產生,不從原名。 - 繁體轉簡體有時用字不同(
慶餘年會轉成庆馀年),所以兩個字以上的中文搜尋詞會再用拼音比一次。
排序名和搜尋用的欄位在掃描時產生。每次啟動都會整個掃描一次,所以從舊版更新後,舊資料會自動補齊。
Mi302 從 nfo 讀演職人員,給播放器顯示:
-
<director>:導演。 -
<credits>、<writer>:編劇。 -
<actor>:演員,讀name、role、thumb、tmdbid;type是GuestStar時算客串。
顯示順序是導演、編劇、演員。點人物可以看他在 Mi302 裡參與的作品,搜尋也找得到人。集和季沒有自己的演職人員時用劇的。
人物照片是 nfo 裡 <thumb> 的網址(通常在 TMDB)。播放器要照片時,Mi302 用 302 把它導到那個網址,所以播放器要連得上那台圖片伺服器。
TMDB 的人名常是拼音或英文(Chen He)。「設定」分頁的「中文化」卡片裡,「演職人員顯示中文名」(server.chinese_people,預設開)開著時,Mi302 在背景查中文名:
- 只查 nfo 裡帶數字 TMDB 人物 id 的人:每部作品的導演、編劇、客串,以及排在前面的演員(程式設定是前 20 位演員,另外留 10 個位置給排在前面的導演和編劇)。
- 先問 MoviePilot 的人物介面(
/api/v1/tmdb/person/{id}),從 TMDB 的別名裡挑中文的(陈赫):去掉帶日文假名的,優先本來就是簡體的,都沒有就把繁體轉成簡體。每秒最多問 2 次。 - MoviePilot 沒有的、或還沒設定 MoviePilot、或連不上時,改問 Wikidata(依 TMDB 人物 id,每批 100 位),中文標籤一律轉成簡體。
- 查過沒有的,30 天後再查。有設定 MoviePilot 但這次連不上時,只問了 Wikidata 的人不算查過,下次再問。
- 每 30 分鐘看一次有沒有新的人要查(啟動 1 分鐘後第一次),每次最多 500 位。也可以按「現在查中文名」立刻查。
查到之後播放器顯示中文名,人物資料另外帶上原名(OriginalTitle)。用原名、中文名都搜得到人。
「中文化」卡片顯示演職人員、有中文名、還沒查、查過沒有的人數,兩個來源各查到幾位、上次查詢時間和錯誤訊息。還沒設定 MoviePilot 時會提示只能問 Wikidata。
關掉「演職人員顯示中文名」並按「儲存設定」後,播放器馬上改回顯示原名,背景也不再查;已經查到的中文名留在資料庫。
「中文化」卡片裡的「類型顯示中文」(server.chinese_genres,預設開)開著時,掃描時把 nfo 的類型換掉:
- 英文的 TMDB、IMDb 類型照下表換成中文(大小寫不拘),用的是 TMDB 簡體中文的叫法。
- 中文類型的繁體換成簡體,所以類型一律顯示簡體。
- 表裡沒有的英文類型照原樣。換完之後重複的只留一個。
這是掃描時做的,改了開關要重新掃描才生效。關掉後重新掃描,就還原成 nfo 裡原本的類型。
| 英文 | 中文 | 英文 | 中文 | 英文 | 中文 |
|---|---|---|---|---|---|
| Action | 动作 | Adventure | 冒险 | Animation | 动画 |
| Comedy | 喜剧 | Crime | 犯罪 | Documentary | 纪录 |
| Drama | 剧情 | Family | 家庭 | Fantasy | 奇幻 |
| History | 历史 | Horror | 恐怖 | Music | 音乐 |
| Mystery | 悬疑 | Romance | 爱情 | Science Fiction | 科幻 |
| Sci-Fi | 科幻 | TV Movie | 电视电影 | Thriller | 惊悚 |
| War | 战争 | Western | 西部 | Action & Adventure | 动作冒险 |
| Kids | 儿童 | News | 新闻 | Reality | 真人秀 |
| Sci-Fi & Fantasy | 科幻奇幻 | Soap | 肥皂剧 | Talk | 脱口秀 |
| War & Politics | 战争政治 | Biography | 传记 | Sport | 运动 |
| Sports | 运动 | Musical | 歌舞 | Film-Noir | 黑色电影 |
| Short | 短片 | Game-Show | 游戏节目 | Reality-TV | 真人秀 |
| Talk-Show | 脱口秀 | Anime | 动画 |
播放器首頁每個媒體庫的封面,依序用:
- 上傳的封面。
- 媒體庫資料夾裡的
poster、folder或cover圖(媒體庫有好幾個資料夾時,用第一個找得到的)。
「媒體庫」分頁每一格都顯示封面。打開那一格的「編輯」對話框,看得到封面的來源:
- 按「上傳封面」選一張圖,可以是 jpg、png、gif 或 webp,最大 30 MB。
- 有上傳的封面時多一個「改回預設」,按了刪掉上傳的封面,改回資料夾裡的圖。
MoviePilot 的媒體庫封面插件用 Emby 的 POST /Items/{id}/Images/Primary 上傳,效果和在網頁上傳一樣,設定方法見 MoviePilot 整合。
上傳的圖片:
- 存在資料資料夾的
images/(預設data/images/,一鍵安裝的在config/data/images/)。封面的檔名是{項目 id}-primary_image.{副檔名}。 - 重新掃描不會被蓋掉,也比資料夾裡的圖優先。
- 同一個 API 也能給電影、劇集等其他項目上傳海報、背景圖、橫幅、Logo,規則相同。項目從媒體庫移除時,它上傳的圖片跟著刪掉。