起因

周五一个晴朗的下午,正打着哈欠对着电脑屏幕无所事事,突然想看 Mark McMorris 的记录片《Unbroken》,由于在红牛官网看有点累,所以下载了下来。看完之后就按照习惯随手上传到了阿里云盘,看着阿里云盘9.5T的容量和保存丰富的影音库,突然想到阿里云盘支持 WebDAV,能挂载到本地,就想能不能试试把阿里云盘里面的电影、美剧和动漫接入我的本地影音管理工具Plex(Emby、Jellyfin 和 Infuse 同理,操作稍微有一点不同)。

准备工作

我尝试了两种把阿里云盘创建 WebDAV 的方式,分别是:

  1. 利用 docker 创建阿里云盘的 WebDAV 服务
  2. 利用 RaiDrive 创建阿里云盘的 WebDAV 服务

在这之前,我们需要打开浏览器来获取阿里云盘的 refreshToken

第一步,打开浏览器,打开 阿里云盘 官网并登录

第二部,按F12打开开发者工具,点击 Application(应用程序),在打开的菜单里点击 Local Storage(本地储存),点击 Local Storage 下的 https://www.aliyundrive.com/,然后在二级菜单里点击右边的 token,就可以看到下面的 refreshToken 了。

利用 docker 创建阿里云盘的 WebDAV 服务

在这里我利用的是 rclone-mount 这个 docker 镜像来实现,但是我后来有找到了更好上手的方法,如下:

  1. 利用 zxbu/webdav-aliyundriver 来实现 WebDAV
  2. 下载 Jar 包运行
  3. Docker run 运行
  4. Docker compose

补充

上面的折腾主要是因为我一个穷学生没有 NAS,如果你有群晖 NAS 的话,也可以利用 docker 部署到本地后,直接在群晖内挂载此 WebDAV 就可以在群晖的文件管理里随时访问。

  1. docker - 注册表 - 搜索 webdav-aliyundriver
  2. 下载结果的第一个 zx5253/webdav-aliyundriver
  3. 启动此镜像
  4. 在常规设置里勾选 使用高级权限执行容器
  5. 在高级设置的装载路径填写 /etc/aliyun-driver
  6. 容器端口设置默认为8080
  7. 高级设置 - 环境 - 添加以下变量
  8. ALIYUNDRIVE_REFRESH_TOKEN 为上文获取的 refresh_token
  9. ALIYUNDRIVE_AUTH_USER-NAME 为 WebDAV 设置用户名
  10. ALIYUNDRIVE_AUTH_PASSWORD 为 WebDAV 设置密码
  11. 最后在群晖里直接挂载 WebDAV

利用 RaiDrive 创建阿里云盘的 WebDAV 服务

如果你觉得用 docker 太难,RaiDrive 绝对是更为简单的选择,这里我们则需要准备几个文件:

  1. 首先下载 RaiDrive
  2. 下载 Winsw 的 exe 文件
  3. 下载 zxbu/webdav-aliyundriver 里的 Jar 文件

到这里,整个流程已经完成了一半,我们剩下要做的是创建一个 Winsw 的 xml 文件,内容如下:

<service>
  
  <!-- ID of the service. It should be unique across the Windows system-->
  <id>webdav-aliyundriver</id>
  <!-- Display name of the service -->
  <name>webdav-aliyundriver</name>
  <!-- Service description -->
  <description>webdav-aliyundriver</description>
  
  <!-- Path to the executable, which should be started -->
  <executable>java</executable>

  <!-- 
       aliyundrive.refresh-token 填写TOKEN
       server.port 填写端口
       这里出于避免与其它服务冲突将其默认8080修改为8181,当然你也可以修改成自己的端口 
  -->
  <arguments>-jar webdav-aliyundriver-2.4.2.jar --aliyundrive.refresh-token="填写TOKEN"  --server.port="8181" --aliyundrive.auth.enable=true --aliyundrive.auth.user-name="admin" --aliyundrive.auth.password="admin"</arguments>
   <!--
    OPTION: onfailure
    Defines a sequence of actions, which should be performed if the managed executable fails.
    Supported actions: restart, reboot, none
  -->
  <onfailure action="restart" delay="10 sec"/>
  <onfailure action="restart" delay="20 sec"/>
  <!--
    OPTION: resetfailure
    Time, after which the Windows service resets the failure status.
    Default value: 1 day
  -->
  <resetfailure>1 hour</resetfailure>
  <!--
    OPTION: priority
    Desired process priority.
    Possible values: Normal, Idle, High, RealTime, BelowNormal, AboveNormal
    Default value: Normal
  -->
  <priority>Normal</priority>
  
  <!-- 
    OPTION: stoptimeout
    Time to wait for the service to gracefully shutdown the executable before we forcibly kill it
    Default value: 15 seconds
  -->
  <stoptimeout>15 sec</stoptimeout>
    
  <!--
    OPTION: stopparentprocessfirst
    If set, WinSW will terminate the parent process before stopping the children.
    Default value: false
  -->
  <stopparentprocessfirst>false</stopparentprocessfirst>
 
    <!--
      OPTION: startmode
      Defines start mode of the service.
      Supported modes: Automatic, Manual, Boot, System (latter ones are supported for driver services only)
      Default mode: Automatic
    -->
    <startmode>Automatic</startmode>
    <waithint>15 sec</waithint>
    <sleeptime>1 sec</sleeptime>

    <log mode="roll-by-size">
        <sizeThreshold>10240</sizeThreshold>
        <keepFiles>8</keepFiles>
    </log>
</service>

做完所有步骤后,我们可以看到文件夹里有三个文件:

  1. Winsw 的 exe 文件
  2. Winsw 的 xml 文件
  3. Webdav-aliyundrive 的 jar 文件

此时,我们将第一个和第三个文件命名保持一致,然后在 xml 文件里修改 refreshToken(就是我们在前面得到的)。

剩下就可以开始启动服务了:

  1. 以管理员身份打开 cmd
  2. 使用 cd 命令进入进入下载的软件包解压后放置的位置,例如 cd aliyundriver
  3. 执行命令 webdav-aliyundriver-2.4.2.exe install
  4. 若提示安装成功,执行命令 net start webdav-aliyundriver ,如果这一步显示 1064 报错,安装 jdk1.8 可解决,版本过高可能会出现问题。
  5. 若提示请求的服务已经启动,打开 RaiDrive,点击 Add

选择服务 WebDAV,盘符和名称自定义,端口8181,账号和密码都是 admin,记得去掉地址后面的那个选框。

配置完成以后,点击连接,就可以看到阿里云盘已经挂载到本地了。1

连接 Plex

剩下的就是将本地资料库添加到 Plex 进行刮削了,由于 Plex 自带的刮削器不太给力,比如说我就遇到了有些动漫和美剧无法找到的情况,我们可以用两个插件来解决这个问题。

Absolute-Series-Scanner 可以扫描且补全剧集的缺失信息

Hama.bundle 用来从 Anidb 刮削数据,补全动漫刮削的缺失

The Movie Database (TMDb) 用来补全电影和剧集刮削的缺失

Absolute Series Scanner

我们先从 GitHub 上下载 Scanner,然后找到 Plex Media Server 的文件夹,位置在 C:\Users\用户名\AppData\Local\Plex Media Server\,将 Scanners 目录和子目录下的所有.py 文件放置于 Plex 服务器文件夹内即可生效。2

Hama bundle

直接从 Github 下载最新的代码,解压于 Plex Media Server内的 Plug-ins 子目录下即可生效。

确定插件下载完成后,我们需要启用插件。打开 Plex 的媒体库设置,然后进入高级设置。

将扫描器选为 Absolute Series Scanner,代理选为 HamaTV。在 HamaTV 设置部分中:

  • Serie Lanaguge Priority 设置为 zh-Hans, zh, zh-Hant, ja, main, en
  • Episode Language Priority 设置为 zh-Hans, zh, zh-Hant, ja, main, en
  • TheTVDB Poster Language Priority 设置为 zh, ja

如果你有其他亚洲语言需求,可以参考 GitHub 库里的语言参考表:

Languages codesAniDBTheTVDB
chinese (unspecified)zhzh
chinese (traditional)zh-HantN/A
chinese (simplified)zh-HansN/A
chinese (cantonese)zh-x-yueN/A
chinese (mandarin)zh-x-cmnN/A
chinese (taiwanese)zh-x-nanN/A
japanesejaja
japanese (transcription)japN/A
koreankoko
korean (transcription)x-kotN/A

刷新媒体库的元数据,就可以看到原来无法刮削的动漫被完美读取了。

简介、制作公司、卡司都可以完美的显示。

对海报不满意也可以从海报库里进行修改。

TMDb

Hama bundle 已经很够用了,笔者暂时没有遇到无法读取的媒体。为了以防万一,我们也可用官方推荐的 TMDb 进行刮削。

这里我们不需要做任何的下载,Plex 右上角点击"设置",左侧设置栏选择"代理",电影下方的 The Movie Database 菜单,拖动 "The Movie Database" 到第一行就大功告成。

最后点击旁边的齿轮,勾选全部并且把国家选为中国,然后重复之前把 Hama bundle 作为代理的操作就可以开始扫描了。

如果遇到扫描匹配不正确的情况,我们也可以手动修正匹配,选择正确的信息。

修正匹配

最终成果展示

电影

海上钢琴师

剧集

权游

尾声

折腾了那么多,其实还是为了一个漂亮的影视管理。如果你想要一个流畅的追剧体验的话,线上流媒体才是一个更完美的选择。本文的的目的是给像我一样没有 NAS 的同学写一个打造影视库的指南。如果你有类似需求,就上手试试吧!