Sign inSign up

x1ao4/edition-manager-for-plex

By x1ao4

•Updated over 2 years ago

Plex 电影版本(Edition)管理工具

Image
Web servers
Content management system
2

10K+

x1ao4/edition-manager-for-plex repository overview

⁠Edition Manager for Plex

Switch to English⁠

在 Plex 中有两个 “版本” 的概念,一个是 “Edition⁠”,一个是 “Version⁠”,目前他们都被翻译为了 “版本”,似乎也找不到更恰当的词汇来区分这两个概念,但它们的用处却大相径庭。

Edition 的设计初衷是用来区分不同的剪辑版本的,例如院线版、导演剪辑版、加长版、未分级版等。如果你拥有同一部影片的不同剪辑版本,在 Plex 内,你可以通过编辑 Edition 来对它们进行标注和区分,这些不同的版本将会作为独立的项目在媒体库内进行展示,并且拥有独立的观看状态、观看进度和评分记录,互不影响。

Version 的设计初衷是用来整合相同剪辑版本的多个文件版本的,主要是指分辨率、编码格式或动态范围的版本,例如 1080P、4K、SDR、HDR 等。如果你拥有同一部影片的不同文件版本,在匹配成功后它们会在媒体库内自动合并为同一个项目,你可以在观看时通过 “播放版本” 来选择你想要观看的版本(若不选择则会播放默认版本),它们将共享观看状态、观看进度和评分记录。

其中,Edition 会显示在标题的下方,年份的后面,也会在 “更多观看方式/在这些地方观看” 这个部分显示,并且支持自定义显示名称;而 Version 只会在电影的详情页面显示,而且不支持自定义显示名称。由于真正需要标注剪辑版本的使用场景并不多,而 Edition 的显示位置又比较显眼,其实除了用来标注剪辑版本,我们完全可以利用这个功能来对电影的其他信息进行标注。

例如,目前的 Plex 移动端和电视端都不会显示杜比视界(DoVi)这个信息,我们可以通过把动态范围写入 Edition 来实现在移动端和电视端显示杜比视界信息,这样我们就可以区分哪些影片是杜比视界的版本了。再如,Plex 的资料库排序目前仅支持单一排序,你无法在使用标题、观众评分排序的同时显示电影的分辨率或码率等信息,同样我们也可以通过 Edition 来显示这些额外信息。

使用 Edition Manager for Plex⁠(下文简称 EMP)可以自动获取电影和电影文件的信息,并将指定的信息写入 Edition 字段,从而丰富电影信息的展示功能。你可以通过 EMP 将电影的剪辑版本、发行版本、片源版本、分辨率、动态范围、视频编码、帧率、音频编码、比特率、大小、国家、内容分级、评分或时长写入电影的 Edition 字段,而且还支持自选模块和自定义排序。

这一切都将通过 EMP 自动实现,无需编辑或修改文件名。这意味着你不需要在文件名中按照 {edition-Edition Title} 这样的格式添加版本信息,EMP 会通过文件名或电影的元数据自动查找相关的信息,然后将需要的信息写入 Edition 字段,对文件的命名没有特殊要求。

你可以通过 EMP 按照自己的需求和喜好为你的电影增加额外的展示信息,我们提供了写入 Edition 和移除 Edition 的功能,你可以随性尝试任何组合方式,也可以随时一键移除所有的 Edition 信息。虽然 Edition 是 Plex Pass 的专属功能,但是通过 EMP,无需 Pass 订阅即可使用 Edition 功能。

⁠示例

配置 order = 剪辑版本;发行版本 的效果:

剪辑版本 发行版本

配置 order = 评分;国家 的效果:

评分 国家

配置 order = 帧率;比特率 的效果:

帧率 比特率

配置 order = 分辨率;音频编码 的效果:

分辨率 音频编码

配置 order = 片源版本;动态范围 的效果:

片源版本 动态范围

配置 order = 内容分级;时长 的效果:

内容分级 时长

配置 order = 发行版本;片源版本;分辨率;动态范围;视频编码;帧率;音频编码;比特率;大小;国家 的效果:

多模块

⁠模块

目前 EMP 共有 14 个模块可供选择,分别是剪辑版本、发行版本、片源版本、分辨率、动态范围、视频编码、帧率、音频编码、比特率、大小、国家、内容分级、评分和时长,你可以选择任意数量的模块,并按照任意顺序进行排序,若个别模块获取不到信息,其他模块也会正常显示,按照需要选配即可。

⁠剪辑版本

剪辑版本模块目前支持 12 种剪辑版本,该模块会优先使用电影的文件名匹配剪辑版本信息,若存在多个视频文件,则会使用文件大小最大的视频文件进行匹配,若找不到剪辑版本信息,则会通过文件内嵌的视频标题进行匹配,若依然找不到剪辑版本信息,则不会写入剪辑版本信息。支持的剪辑版本如下:

  • 院线版
  • 导演剪辑版
  • 制片人剪辑版
  • 加长版
  • 未分级版
  • 最终剪辑版
  • 电视版
  • 国际版
  • 家庭录像版
  • 初剪版
  • 工作版
  • 粉丝剪辑版

⁠发行版本

发行版本模块目前支持 14 种发行版本,该模块会优先使用电影的文件名匹配发行版本信息,若存在多个视频文件,则会使用文件大小最大的视频文件进行匹配,若找不到发行版本信息,则会通过文件内嵌的视频标题进行匹配,若匹配到多个发行版本,则会依次写入发行版本信息,若依然找不到发行版本信息,则不会写入发行版本信息。支持的发行版本如下:

  • 特别版
  • 数字修复版
  • 3D 版
  • IMAX 版
  • 收藏版
  • 周年纪念版
  • 终极版
  • 蓝光版
  • DVD 版
  • 限量版
  • 纪念版
  • 豪华版
  • 导演签名版
  • 标准收藏版

⁠片源版本

片源版本模块目前支持 25 种片源版本,该模块会优先使用电影的文件名匹配片源版本信息,若存在多个视频文件,则会使用文件大小最大的视频文件进行匹配,若找不到片源版本信息,则会通过文件内嵌的视频标题进行匹配,若依然找不到片源版本信息,则不会写入片源版本信息。支持的片源版本如下:

  • REMUX
  • BD
  • BDRIP
  • WEB-DL
  • VODRIP
  • WEBRIP
  • HDRIP
  • HR-HDTV
  • HDTV
  • PDTV
  • DVD
  • DVDRIP
  • DVDSCR
  • R5
  • LDRIP
  • PPVRIP
  • SDTV
  • TVRIP
  • VHSRIP
  • HDTC
  • TC
  • HDCAM
  • HQCAM
  • TS
  • CAM

⁠分辨率

分辨率模块支持 Plex 可识别的所有分辨率,该模块会从电影元数据的媒体信息中获取视频文件的分辨率信息,若存在多个视频文件,则会获取文件大小最大的视频文件的分辨率信息,若找不到分辨率信息,则不会写入分辨率信息。支持的分辨率包括但不限于:

  • 8K
  • 4K
  • 2.7K
  • 2K
  • 1080P
  • 720P
  • 576P
  • 480P
  • SD

⁠动态范围

动态范围模块支持 Plex 可识别的所有动态范围,该模块会从电影元数据的媒体信息中获取视频文件的动态范围信息,若存在多个视频文件,则会获取文件大小最大的视频文件的动态范围信息,若找不到动态范围信息,则不会写入动态范围信息。支持的动态范围包括但不限于:

  • DV P8
  • DV P7
  • DV P5
  • HDR
  • SDR

注:HDR10、HDR10+、HLG 等高动态范围技术都将被视作 HDR。若视频文件同时支持 HDR 和 DV,那么它们都会被写入版本信息。

⁠视频编码

视频编码模块支持 Plex 可识别的所有视频编码,该模块会从电影元数据的媒体信息中获取视频文件的视频编码信息,若存在多个视频文件,则会获取文件大小最大的视频文件的视频编码信息,若找不到视频编码信息,则不会写入视频编码信息。支持的视频编码包括但不限于:

  • AV1
  • HEVC
  • VP9
  • H264
  • VC1
  • MPEG4
  • SVQ3
  • WMV3
  • WMV2
  • WMV1
  • MPEG2
  • MPEG1
  • RV40

⁠帧率

帧率模块支持 Plex 可识别的所有帧率,该模块会从电影元数据的媒体信息中获取视频文件的帧率信息,若存在多个视频文件,则会获取文件大小最大的视频文件的帧率信息,若找不到帧率信息,则不会写入帧率信息。支持的帧率包括但不限于:

  • 240P
  • 120P
  • 100P
  • 72P
  • 60P
  • 50P
  • 48P
  • 30P
  • 25P
  • 24P
  • 15P
  • 12P
  • 10P
  • 5P

⁠音频编码

音频编码模块支持 Plex 可识别的所有音频编码,该模块会从电影元数据的媒体信息中获取视频文件的音频编码信息,若存在多个视频文件,则会获取文件大小最大的视频文件的音频编码信息,若存在多个音频流,则会获取比特率最高的音频流的音频编码信息(多声道优先),若找不到音频编码信息,则不会写入音频编码信息。支持的音频编码包括但不限于:

  • DTS-HD MA
  • TRUEHD
  • FLAC
  • PCM
  • DTS-HD HRA
  • DTS-ES
  • EAC3
  • DTS
  • AC3
  • HE-AAC
  • AAC
  • MP3
  • VORBIS
  • WMAPRO
  • COOK
  • MP2
  • WMAV2
  • WMA

注:在写入版本信息时,音频编码后方会显示对应音频流的声道信息,如 TRUEHD 7.1、AC3 5.1、AAC 立体声等等。

⁠比特率

比特率模块会从电影元数据的媒体信息中获取视频文件的比特率(码率)信息,若存在多个视频文件,则会获取文件大小最大的视频文件的比特率信息,若找不到比特率信息,则不会写入比特率信息(比特率的单位为 Kbps、Mbps)。

⁠大小

大小模块会从电影元数据的媒体信息中获取视频文件的(文件)大小信息,若存在多个视频文件,则会获取文件大小最大的视频文件的大小信息(大小的单位为 B、KB、MB、GB)。

⁠国家

国家模块会从电影元数据中获取电影的(制片)国家(或地区)信息,若存在多个国家,则会依次写入国家信息,若找不到国家信息,则不会写入国家信息。

⁠内容分级

内容分级模块会从电影元数据中获取电影的内容分级信息,若找不到内容分级信息,则不会写入内容分级信息。支持的内容分级包括但不限于:

⁠电影分级(MPAA)
  • G
  • PG
  • PG-13
  • R
  • NC-17
  • NR
  • Unrated
⁠电视节目分级(TV Parental Guidelines)
  • TV-Y
  • TV-Y7
  • TV-Y7-FV
  • TV-G
  • TV-PG
  • TV-14
  • TV-MA
⁠其他分级标准
  • Approved
  • 18+
  • AO

注:上述分级为美国的分级制度说明,其它地区的分级制度可能存在差异,以实际情况为准。由于中国大陆地区没有内容分级制度,建议将 “认证国家/地区” 设置为 “美国”,以获取内容分级信息。

⁠评分

评分模块会从电影元数据中获取电影的(观众)评分信息(使用资料库设置的评分来源),若找不到评分信息,则不会写入评分信息(评分将转换为十分制)。

⁠时长

时长模块会从电影元数据的媒体信息中获取视频文件的时长信息,若存在多个视频文件,则会获取文件大小最大的视频文件的时长信息,若找不到时长信息,则不会写入时长信息(时长的单位为分钟)。

⁠功能

EMP 共有 为所有电影添加版本信息(all)、为新增电影添加版本信息(new) 和 为所有电影重置版本信息(reset) 三种运行模式:

  • 为所有电影添加版本信息:根据用户配置,在排除掉需要跳过的资料库后为其余库中的所有电影添加版本信息,已经存在版本信息的电影会被跳过。
  • 为新增电影添加版本信息:通过 Webhooks 功能监听服务器事件,实时获取新增项目的元数据,根据用户配置,仅为新增电影(不含需要跳过的资料库中的新增电影)添加版本信息。
  • 为所有电影重置版本信息:根据用户配置,在排除掉需要跳过的资料库后为其余库中的所有电影重置(移除)版本信息。

注:为新增电影添加版本信息 模式需要服务器的管理员账号订阅了 Plex Pass 才能使用。

⁠配置说明

运行前,请先参考以下提示(示例)对 /config/config.ini 进行配置。

[server]
# Plex 服务器的地址,格式为 http://服务器 IP 地址:32400 或 http(s)://域名:端口号
address = http://127.0.0.1:32400
# Plex 服务器的 token,用于身份验证
token = xxxxxxxxxxxxxxxxxxxx
# 指定需要跳过的资料库,格式为库名1;库名2;库名3,若没有需要跳过的资料库,可以留空
skip_libraries = 云电影;演唱会
# 语言设置,zh 代表中文,en 代表英文
language = zh

[modules]
# 指定需要写入的模块及其排序,格式为模块1;模块2;模块3,可选模块包括剪辑版本、发行版本、片源版本、分辨率、动态范围、视频编码、帧率、音频编码、比特率、大小、国家、内容分级、评分、时长
order = 片源版本;动态范围

由于 EMP 只会对电影类型的资料库进行处理,所以在指定需要跳过的资料库时,指定需要跳过的电影类型的资料库即可。写入版本信息的模块没有数量限制,可以根据需要自行选配。

在 为新增电影添加版本信息 模式下运行时,EMP 会使用 Flask 创建一个 Web 服务器,通过监听 8089 端口来接收 Plex 服务器发送的 library.new 事件,从而获取新增项目的信息并对其进行处理。

假如你的 8089 端口已经被其他服务占用,你可能需要通过修改 edition-manager-for-plex.py 倒数第九行的 port=8089(通过 Python 脚本运行时)或者通过修改端口映射(通过 Docker 容器运行时)来更换监听端口。

⁠运行方式

你可以通过 Docker 容器或者 Python 脚本来运行 EMP,推荐使用 Docker 容器运行,具体使用方法可参考下文。

⁠运行条件

  • 安装了 Docker 和 Docker Compose。

⁠Docker Compose

  • edition-manager-for-plex(Plex Pass 订阅用户)

    version: "2"
    services:
      emp-all:
        image: x1ao4/edition-manager-for-plex:latest
        container_name: emp-all
        command: python edition-manager-for-plex.py --all
        environment:
          - TZ=Asia/Shanghai
        volumes:
          - /自定义目录/edition-manager-for-plex/config:/app/config
      emp-new:
        image: x1ao4/edition-manager-for-plex:latest
        container_name: emp-new
        command: python edition-manager-for-plex.py --new
        ports:
          - 8089:8089
        environment:
          - TZ=Asia/Shanghai
        volumes:
          - /自定义目录/edition-manager-for-plex/config:/app/config
        restart: unless-stopped
    networks: {}
    
  • edition-manager-for-plex(非 Plex Pass 订阅用户)

    version: "2"
    services:
      emp-scheduler:
        image: mcuadros/ofelia:latest
        container_name: emp-scheduler
        depends_on:
          - emp-all
        command: daemon --docker -f label=com.docker.compose.project=${COMPOSE_PROJECT_NAME}
        labels:
          ofelia.job-run.emp-all.schedule: 0 30 22 * * *
          ofelia.job-run.emp-all.container: emp-all
        environment:
          - TZ=Asia/Shanghai
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock:ro
        restart: unless-stopped
      emp-all:
        image: x1ao4/edition-manager-for-plex:latest
        container_name: emp-all
        command: python edition-manager-for-plex.py --all
        environment:
          - TZ=Asia/Shanghai
        volumes:
          - /自定义目录/edition-manager-for-plex/config:/app/config
    networks: {}
    
  • edition-manager-for-plex-reset

    version: "2"
    services:
      emp-reset:
        image: x1ao4/edition-manager-for-plex:latest
        container_name: emp-reset
        command: python edition-manager-for-plex.py --reset
        environment:
          - TZ=Asia/Shanghai
        volumes:
          - /自定义目录/edition-manager-for-plex/config:/app/config
    networks: {}
    



⁠使用方法

使用 EMP 可以写入版本信息,也可以移除版本信息。由于 Docker 会在启动堆栈时自动启动堆栈内的所有容器,所以写入和移除的功能需要分开部署。请先部署 edition-manager-for-plex 用于写入版本信息,然后在有需要时部署 edition-manager-for-plex-reset 用于移除版本信息(部署后会立刻执行一次 为所有电影重置版本信息。你也可以使用 docker-compose up --no-start 来部署这个容器,这样部署后不会立刻运行,在有需要时再启动容器即可)。

  • edition-manager-for-plex

    1. 在 Plex 服务器的设置选项中找到 Webhooks,点击 添加 Webhook,填写你的 Flask 服务器地址 http://Docker 所在设备的 IP 地址:8089 并 保存修改。(非 Plex Pass 订阅用户无需填写)
    2. 下载仓库中的 /compose/edition-manager-for-plex/compose.yaml 文件(Plex Pass 订阅用户可删除 emp-scheduler 的部分,非 Plex Pass 订阅用户可删除 emp-new 的部分),将其保存在一个名为 edition-manager-for-plex 的文件夹内。
    3. 用记事本或文本编辑打开 compose.yaml,将 /自定义目录/edition-manager-for-plex/config 替换为宿主机上的一个目录,这个目录将用于保存配置文件。(emp-all 与 emp-new 使用相同的目录即可)
    4. 打开终端或命令行工具,使用 cd 命令切换到 compose.yaml 所在的目录。
    5. 使用命令 docker-compose up -d 部署并启动 edition-manager-for-plex 堆栈。
    6. 用记事本或文本编辑打开 /自定义目录/edition-manager-for-plex/config/config.ini 文件,填写你的 Plex 服务器地址(address)和 X-Plex-Token⁠(token),设置需要写入版本信息的模块及其排序(order),按照需要选填其他配置选项。
    7. 重启 edition-manager-for-plex 堆栈即可正常运行。
  • edition-manager-for-plex-reset

    1. 下载仓库中的 /compose/edition-manager-for-plex-reset/compose.yaml 文件,将其保存在一个名为 edition-manager-for-plex-reset 的文件夹内。
    2. 用记事本或文本编辑打开 compose.yaml,将 /自定义目录/edition-manager-for-plex/config 替换为宿主机上的一个目录,这个目录将用于保存配置文件。(与 emp-all 和 emp-new 使用相同的目录即可)
    3. 打开终端或命令行工具,使用 cd 命令切换到 compose.yaml 所在的目录。
    4. 使用命令 docker-compose up -d 部署并启动 edition-manager-for-plex-reset 堆栈。(若 /自定义目录/edition-manager-for-plex/config/config.ini 文件已经正确配置,堆栈会正常运行;若未配置,请先填写配置信息,然后重启堆栈,即可正常运行)

⁠运行说明

EMP 共有 emp-all、emp-new、emp-scheduler 和 emp-reset 四个容器,分别用于处理不同的任务。启动堆栈后,这四个容器的运行状态也略有差异。

  • 容器 emp-all 是用来运行 为所有电影添加版本信息 任务的,它会在启动后运行一次 为所有电影添加版本信息 任务,对设置范围内的所有电影进行处理(添加版本信息),并在终端或日志内显示资料库的信息和处理结果,处理完毕后会停止运行。你可以随时启动它来运行 为所有电影添加版本信息 任务,它将在每次处理完毕后停止运行。如果你配置了 emp-scheduler,emp-all 也会在每次到达你设置的任务时间时自动运行一次。
  • 容器 emp-new 是用来运行 为新增电影添加版本信息 任务的,它会在启动后创建一个 Flask 服务器来监听 Plex 服务器的事件,当 Plex 服务器上有新增电影时,它将自动对新增电影进行处理(添加版本信息),并在终端或日志内显示处理结果,处理完毕后会继续监听 Plex 服务器的事件,并在每次有新增电影时对其进行处理,然后继续监听。
  • 容器 emp-scheduler 是用来给 为所有电影添加版本信息 设置/触发计划任务的,它会在启动后创建一个定时运行 emp-all 的计划任务,默认设置为 0 30 22 * * *,表示每天晚上 10 点半(22:30)运行一次。你可以通过修改时间表达式来自定义运行频率,例如 "@every 3h" 表示每 3 小时运行一次,"@every 30m" 表示每 30 分钟运行一次等。它将在设置的任务时间启动 emp-all 容器,并在终端或日志内同步显示 emp-all 的日志信息,然后继续运行。
  • 容器 emp-reset 是用来运行 为所有电影重置版本信息 任务的,它会在启动后运行一次 为所有电影重置版本信息 任务,对设置范围内的所有电影进行处理(重置/移除版本信息),并在终端或日志内显示资料库的信息和处理结果,处理完毕后会停止运行。你可以随时启动它来运行 为所有电影重置版本信息 任务,它将在每次处理完毕后停止运行。

你可以根据需要选配这四个容器,若存在不需要的功能,直接在 Compose 中删除对应的部分再部署即可。

⁠注意事项

  • 请确保你提供了正确的 Plex 服务器地址和正确的 X-Plex-Token。
  • 请确保你提供了正确的库名,并按要求进行了填写。
  • 请确保你按照要求设置了正确的语言和模块信息。
  • 如果无法连接到 Plex 服务器,请检查你的网络连接,并确保服务器可以访问。如果你是通过 Docker 容器运行的,也可以尝试使用 host 模式重新部署容器运行。
  • 请使用服务器管理员账号的 X-Plex-Token,以确保你拥有足够的权限进行操作。
  • 版本信息将在添加后被锁定,若有修改需求,Plex Pass 订阅用户可以手动解锁版本信息,然后进行修改;非 Plex Pass 订阅用户不支持手动修改版本信息。若要为所有电影修改版本信息的模块或排序,请先重置版本信息,然后修改配置文件,再重新写入版本信息。
  • 修改配置文件后,需要重启容器,新的配置信息才会生效。
  • 如需使用 为新增电影添加版本信息 模式,请确保你在服务器的 设置 - 网络 中勾选了 Webhooks 选项。

⁠赞赏

如果你觉得这个项目对你有用,可以考虑请我喝杯咖啡或者给我一个⭐️。谢谢你的支持!

赞赏

Tag summary

Content type

Image

Digest

sha256:4a093c423…

Size

21.9 MB

Last updated

over 2 years ago

docker pull x1ao4/edition-manager-for-plex