0. 前言

仓鼠病数年,囤积的媒体文件也是越来越多,但去学校不方便带一堆硬盘,全拷到电脑和手机上看又觉得太占空间,一个文件拷贝多份管理起来也麻烦,于是在一个月前购入了PN41,打算搭一个小型媒体服务器。
因为初次接触,饶了很多弯路,本来在半个月前就想写一篇折腾记录的,可是学校宿舍要求人走断电,想着等五一回家DDNS解析到机器上全部布置完再写,于是一拖再拖。

1. 机器配置

关于配置也没什么好讲的,直接丢一个配置表
CPU:N6005
内存:DDR4 8G 2133MHz单条(本来说可能后续会再加一条,不过看实际使用可能也没什么加的必要了)
硬盘:M.2位插了块1T,2.5寸盘位用上了之前PS4拆下来的1.5T机械,然后又外接了一块4T蓝盘。
网口:1+2.5G双网口(虽然暂时只用到了一个)
系统:Ubuntu 22.04LTS
搭建思路:整理好文件夹之后无脑docker。

2. Jellyfin

Jellyfin自带完善的剧集和电影信息刮削功能,只要按规则重命名即可,很方便。也能管理音乐和音声作品。

不要吐槽为什么语言是日文,首次设置的时候刚好在推Gal,系统语言是日文,设置完之后发现改不回中文…
docker-compose.yml

version: "3"
services:
  jellyfin:
    image: jellyfin/jellyfin
    container_name: jellyfin
    stdin_open: true
    tty: true
    restart: always
    ports:
      - 8096:8096
    volumes:
      - /config路径:/config
      - /媒体路径:/media
      - /dev/dri:/dev/dri
    privileged: true

2.1 剧集命名整理

2.1.1 影片

TheTVDB搜索剧集英文名称与Specials顺序。
为了方便刮削和整理,番剧或电视剧按以下结构归档

剧集英文名

Specials
— 剧集英文名 S00E01.mkv
— 剧集英文名 S00E02.mkv

Season 1
— 剧集英文名 S01E01.mkv
— 剧集英文名 S01E01.ass
— 剧集英文名 S01E02.mkv
— 剧集英文名 S01E02.ass

Season 2

使用ReNamer批量重命名

电影的话按照影片英文名+年份重命名,BD原盘重命名文件夹即可。

2.1.2 音声作品

最近开始听音声作品,因为来源都是DLsite,所以用Onsei Data Capture刮削元数据。
因为不同社团文件夹结构和命名方式都有所出入,还要考虑到不同声效不同文件,所以整理只能靠人工,麻了。

2.1.3 里数据

赞美Movie Data Capture
一般的(一般?)影片、DLsite以及Getchu作品用番号重命名后,拖到同一文件夹下直接执行程序,方便得不能再方便。
多集作品需要等程序执行完毕之后,手动合并并添加"cd1、cd2、cd3…"后缀。

output

XX-XXX

XX-XXX cd1.mp4
XX-XXX cd2.mp4

里番刮削功能也在测试中了,期待www

2.2 N6005调用硬件解码

明明看其他人的教程只需要升级内核就能够支持,但不知道是版本问题还是什么,实际操作中死活无法调用硬件解码。后来不知道是怎么设置的,就忽然可以用了。
emmmmmmm…
玄学

测试了一些4K影片解码以10Mbps推流,CPU占用基本不会超过55%


解码BD原盘的时候CPU满载,但解码速度还是有80-110fps

2.3 安装字体-解决方块字

2.3.1 进入容器安装

确定容器名字
docker container ls
进入容器
docker exec -i 容器名字 bash
安装字体
apt install fonts-noto-cjk-extra

2.3.2 安装备用字体

在config路径中创建fonts目录。
下载Noto Sans SC woff2字体包,将NotoSansCJKsc-Medium.woff2上传到fonts目录。
在控制台的播放设置中设置备用字体文件路径为/config/fonts,并勾选启用备用字体

3. Komga

原本以为可以用Jellyfin完成一站式媒体服务,可惜Jellyfin不太适合看本子,所以还是使用Komga。
具体可以看这篇文章
docker-compose.yml

version: '3.3'
services:
  komga:
    image: gotson/komga
    container_name: komga
    volumes:
      - type: bind
        source: /config路径
        target: /config
      - type: bind
        source: /漫画路径
        target: /data
      - type: bind
        source: /etc/timezone #alternatively you can use a TZ environment variable, like TZ=Europe/London
        target: /etc/timezone
        read_only: true
    ports:
      - 8080:8080
    user: "0:0"
    restart: unless-stopped

4. 下载服务

4.1 qbittorrent

既然要搭建媒体服务器,那怎么能少了bt下载。
docker-compose.yml

version: "2.1"
services:
  qbittorrent:
    image: lscr.io/linuxserver/qbittorrent:latest
    container_name: qbittorrent
    environment:
      - PUID=0
      - PGID=0
      - TZ=Etc/UTC
      - WEBUI_PORT=8080
    volumes:
      - /config路径:/config
      - /下载路径:/downloads
    ports:
      - 8080:8080
      - 6881:6881
      - 6881:6881/udp
    restart: unless-stopped

可能会遇见的Unauthorized错误

安装好之后访问WebUI显示"Unauthorized"。
解决方法:进入config文件夹中在qBittorrent.conf末尾添加以下参数后重启docker。

WebUI\HostHeaderValidation=false

4.2 百度网盘

下一些涩涩的东西经常需要用到百度网盘,之前用的都是第三方加速服务,虽然一个月几块钱的费用可以接受,但偶尔会遇到无法连接或跑路的情况,比较闹心。
既然弄了台24*7的服务器,那干脆就在这上面挂网盘下载,100KB/s一天也能下8G。

docker-compose.yml

version: '3.3'
services:
    baidunetdisk:
        container_name: baidunetdisk
        restart: always
        ports:
            - '5800:5800'
            - '5900:5900'
        volumes:
            - /config路径:/config
            - /下载路径:/config/baidunetdiskdownload
        environment:
            - GROUP_ID=0
            - USER_ID=0
            - VNC_PASSWORD=password
        image: johngong/baidunetdisk

5. DDNS与端口转发

因为家宽是公网IP所以不需要内网穿透,不过由于IP地址不固定,需要设置DDNS。

还需要设置端口转发,可以多转发一些端口方便后续拓展,如果需要外网访问ssh的话记得转发22端口。

6. 小结

五一假期要结束了,暂时先折腾到这里,用一段时间看看还需要哪些功能再接着折腾。
PS:上传速度不到下载速度1/10,闻者伤心,见者落泪。