Plex 媒体库使用技巧:自动生成识别文件,无需硬链接改名也能入库
本文最后更新于 2024-06-02,文章内容可能已经过时。
我一直以来都是用 plex 作为媒体库,但是有时候会遇到文件名无法识别导致不能入库 plex 的问题,电影资源还好,电视方面特别是动画类的经常遇到命名混乱导致无法自动识别。
Plexmatch 刮削文件
Plex 官方文档说可以添加一个 .plexmatch
文件手动识别,可以做到正确识别节目,也可以做到一些有意思的事,比如添加任意视频到指定节目:
于是我用 ChatGPT 写了一个 .bat
的命令,可以在 windows 下一键生成 .plexmatch
文件,利用 TMDB ID 来手动指定文件的刮削信息(这个只是告诉 Plex 这个视频是什么电视或者动画,刮削资源来自 Plex 的服务器)。
使用方法:
第一步:
将代码复制到文本文档,保存,修改文件名为generate_plexmatch.bat
(记得打开显示文件扩展名)第二步:
方法一:选中需要指定的文件,将文件拖到generate_plexmatch.bat
文件上。方法二:直接双击
generate_plexmatch.bat
文件,自动查找文件夹内.mkv
和.mp4
后缀的文件并生成识别文件。需要注意的是,命名是从
SxxE01
开始,也就是选中的文件要从第一集开始,
第 10.5 话这种在 TMDB 里属于第 0 季,需要分开生成。多个文件拖动的时候要都选中,然后鼠标放在第一集上拖动,因为鼠标在哪一集上就会从那一集开始排序。第三步:
手动输入 TMDB ID(tmdbid):TMDB 网页链接中的编号,例如:https://www.themoviedb.org/tv/84958-loki
,84958
就是 TMDB ID。手动输入季号(season):默认为 01 季,具体怎么填写参照 TMDB 的信息,特典和 OVA 这些一般都是第 0 季,也就是 S00,但是这一部分比较混乱,不一定是从 S00E01 开始,一般需要生成 .plexmatch 文件后手动修改。
手动输入起始集数(starting Episode):默认为 01,即留空为从 E01 开始计数,但是实际使用中我发现有时候 TMDB 会把普遍认为的第二季并入第一季,也就是第二季在 TMDB 中是从 S01E13 开始计数,所以设置了这个选项。如无特殊情况可直接回车,无需填写。
任务完成后会在 1 秒后自动关闭窗口。
代码如下:
@echo off
setlocal EnableDelayedExpansion
set /p tmdbid=Please enter the TMDB ID:
REM 如果未输入内容,则将season设置为默认值01
set /p season=Please enter the season (default is 01): || set "season=01"
REM 新增起始值选项
set /p episode=Please enter the starting Episode (default is 01): || set "episode=01"
set /a count=!episode!
chcp 65001 > nul
echo tmdbid:!tmdbid!>> .plexmatch
echo season:!season!>> .plexmatch
REM 判断是否有文件拖入,如果没有则处理所在文件夹内的所有.mkv和.mp4格式文件
if "%~1"=="" (
for %%a in (*.mkv *.mp4 *.ts) do (
set "num=0!count!"
set "filename=%%~nxa"
echo ep:S!season!E!num:~-2!:!filename!>> .plexmatch
set /a count+=1
)
) else (
REM 如果有文件拖入,则逐行读取拖放的文件名,并按格式输出到.plexmatch文件中
for %%a in (%*) do (
set "num=0!count!"
set "filename=%%~nxa"
echo ep:S!season!E!num:~-2!:!filename!>> .plexmatch
set /a count+=1
)
)
echo All files have been processed.
echo.
echo Preview of .plexmatch file:
type .plexmatch
echo.
echo All files have been processed. This window will close in 5 second.
ping -n 6 127.0.0.1 > nul
用这个方法也可以将任意视频添加到指定的电视节目里,比如为节目添加 OP 和 ED 视频,可以设置为(不要和 TMDB 的信息重复就行):
S00E01:OP.mkv
S00E02:ED.mkv
添加为右键菜单一键处理
每次处理文件还得找到 generate_plexmatch.bat 文件和待处理文件实在麻烦,不过这一步骤还可以再精简:
将 generate_plexmatch.bat 批处理文件放到一个易于访问且不会被误删的位置,比如在文档文件夹中。
打开注册表编辑器(在 Windows 10 中,可以按 Win+R 组合键,输入 regedit 后回车打开)。在注册表编辑器中,找到路径:
HKEY_CLASSES_ROOT\*\shell
右键单击“shell”,在“shell”下新建一个项,比如 “Plexmatch”。
在“Plexmatch”下再新建一个项,命名为“command”。
右键点击“command”项右侧的,选择“修改”,将“数据值”设置为你创建的批处理文件的完整路径(比如 C:\Users\username\Document\generate_plexmatch.bat)。例如:
C:\Users\username\Document\generate_plexmatch.bat %1
这个方法只能单选,但是会处理所在文件夹内所有文件
点击放大图片
Plexignore 忽略文件
此外,有一些你不希望出现在 Plex 里的视频,可以用下面的命令保存为 .plexignore 后缀的文件。【plexignore官方文档】
# Ignore all files with "trailer" in the name
# *trailer*
# Ignore files with the extension ".cr2"
# *.cr2
# Ignore directories called "Modified"
# *Modified/*
# Ignore all ".tif" files in the "thumbnails" subdirectory
# *thumbnails/*.tif
映像特典/*
使用方法在注释里,比如不想将《映像特典》这个文件夹里的视频显示在 Plex 里(有时候会自动识别错误到正片里去),就添加一句
映像特典/*
命令行批处理自动生成.plexignore
文件
1、BAT 批处理脚本
BAT 文件直接处理适用于本机存储,处理 SMB 挂载的请看方法 2。
@echo off
chcp 65001 > nul
echo /# Plex Media Server ignore file > "%~dp1.plexignore"
for %%A in (%*) do (
if exist "%%A\\" (
echo %%~nxA/* >> "%~dp1.plexignore"
) else (
if exist "%%A" (
echo %%~nxA >> "%~dp1.plexignore"
)
)
)
使用方法:
把要处理的文件和文件夹拖到generate_plexignore.bat
上,会自动在视频文件夹内生成.plexignore
文件。
2、Python 脚本
处理 SMB 挂载的文件时会有一个 Bug,拖入文件会被识别成文件夹,生成的.plexignore
文件中,文件后面也会出现/*
。
这是因为处理 SMB 挂载的文件夹中的文件时,批处理脚本无法正确识别这些文件的属性,从而误判为文件夹。
所以我们需要使用Python进行处理,这一步需要创建两个命令(generate_plexignore.bat
和generate_plexignore.py
):
先创建一个.txt
文件,保存后修改文件名和后缀为generate_plexignore.bat
。
generate_plexignore.bat
:
@echo off
python "%~dp0generate_plexignore.py" %*
pause
generate_plexignore.py
import os
import sys
def update_plexignore(paths, output_dir):
with open(os.path.join(output_dir, '.plexignore'), 'w') as file:
file.write('/# Plex Media Server ignore file\n')
for path in paths:
if os.path.isdir(path):
file.write(f"{os.path.basename(path)}/*\n")
elif os.path.isfile(path):
file.write(f"{os.path.basename(path)}\n")
if __name__ == "__main__":
output_dir = os.path.dirname(os.path.abspath(sys.argv[1]))
update_plexignore(sys.argv[1:], output_dir)
使用方法:
两个文件放在同一文件夹内,把要处理的文件和文件夹拖到generate_plexignore.bat
上,会自动在视频文件夹内生成.plexignore
文件。
注:
有部分网友(@见风使舵)发现生成文件排序有问题,该网友提出以下修改方法,如遇到可以参考:
修改前:
REM 判断是否有文件拖入,如果没有则处理所在文件夹内的所有.mkv和.mp4格式文件
if "%~1"=="" (
for %%a in (*.mkv *.mp4 *.ts) do (
set "num=0!count!"
echo ep:S!season!E!num:~-2!:%%~nxa>> .plexmatch
set /a count+=1
)
) else (
修改后:
REM 判断是否有文件拖入,如果没有则处理所在文件夹内的所有.mkv和.mp4格式文件
if "%~1"=="" (
dir /b *.mkv *.mp4 | sort > temp.txt
for /F "delims=" %%a in (temp.txt) do (
set "num=0!count!"
echo ep:S!season!E!num:~-2!:%%a>> .plexmatch
set /a count+=1
)
del temp.txt
) else (