前言
前文【基于 PVE 的折腾之路(3)之 影音库自动化】实现了本地自动化追剧。但现在阿里云盘的热门以及搭配各种项目也能实现自动化转存追剧,并且通过 nginx 的 njs 模块将 emby 视频播放地址劫持到 alist 直链。
本文需要在群晖 Docker 安装 emby 、alist、aliyundrive-subscribe、nginx、rclone
完成后基本流程:电视剧有更新 -> aliyundrive-subscribe 自动转存到指定目录 -> 通知 emby 有新视频 -> emby 刮削 -> emby 通过 nginx 直接播放阿里云盘上的视频。
为什么改用 Emby?
之前一直都是用 jellyfin,因为开源免费。但不知为何对于现在的 4k 视频很多无法正常播放,都强制服务端转码。一开始以为是电视型号太旧不支持解码,所以以前下载视频都只能找特定编码的。
偶然一次心血来潮换成 emby 测试一下,竟然除了音频是 TrueHD 7.1 或 Dolby Atmos 7.1 会导致服务器转码,其他 4K HEVC HDR10 或 4K HEVC HDR10+ 都播放很流畅,所以就改用 emby 做服务端。
1、安装 emby
docker run -d \
--name emby \
-e PUID=1026 \
-e PGID=100 \
-e TZ=Asia/Shanghai \
-p 8096:8096 \
-v /volume1/docker/emby:/config \
-v /volume1/video:/video \
--restart unless-stopped \
lovechen/embyserver:latest
2、安装 alist (alist 配置教程请看 wiki)
docker run -d \
--name=alist \
--restart=unless-stopped \
-e PUID=1026 \
-e PGID=100 \
-e UMASK=022 \
-p 5244:5244 \
-v /volume1/video:/video \
-v /volume1/docker/alist:/opt/alist/data \
xhofe/alist:latest
3、安装 aliyundrive-subscribe
docker run -d \
--restart=unless-stopped \
--name=subscribe \
-e PUID=1026 \
-e PGID=100 \
-e TZ=Asia/Shanghai \
-p 19035:19035 \
-v /volume1/docker/subscribe:/app/conf \
looby/aliyundrive-subscribe:latest
4、安装 nginx (映射文件请在 Wiki 中提前下载)
docker run -d \
--name=nginx \
-e PUID=1026 \
-e PGID=100 \
-e TZ=Asia/Shanghai \
-p 8095:80 \
-v /volume1/docker/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /volume1/docker/nginx/conf.d:/etc/nginx/conf.d \
-v /volume1/docker/nginx/cache:/var/cache/nginx/emby \
nginx:alpine
配置 alist
默认用户名admin,密码需要在 控制台日志查看,通过群晖 IP:5244 端口登录进入后台,找到存储这里,点击添加
选择阿里云盘Open
主要配置挂载路径,即在 NAS 本地的路径;还有刷新令牌。
具体配置教程可以看 Wiki
配置 aliyundrive-subscribe
通过群晖 IP:8002 端口登录 subscribe,/volume1/docker/subscribe/config/app.ini 设置好账号密码以及阿里云盘的 token。
具体配置教程可以看 Wiki
roclone 挂载 alist 到本地
通过 ssh 登录到群晖,获取 root
# 安装 rclone
curl https://rclone.org/install.sh | sudo bash
# 创建 rclone 配置文件文件夹
mkdir /volume1/docker/rclone
# 创建 rclone 配置文件,注意用户名和密码,建议 alist 创建一个只读的用户用于挂载用途
cat <<EOF >> /volume1/docker/rclone/rclone.conf
[aliyunpan]
type = webdav
url = http://10.0.0.5:5244/dav
vendor = other
user = admin
pass = Hg8GURjFFspmY0UJKImq5NnzhpW5
EOF
# 创建 rclone 挂载文件,注意修改下面挂载参数
cat <<EOF >> /volume1/docker/rclone/rcloned
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
NAME_BIN="rclone"
NAME="aliyunpan" #和上面的 rclone 文件一致
REMOTE='' #远程文件夹,网盘里的挂载的一个文件夹,留空为整个网盘
LOCAL='/volume1/video/aliyunpan' #挂载地址,VPS本地挂载目录
LOG="/volume1/docker/rclone/log.txt"
Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m"
Info="${Green_font_prefix}[信息]${Font_color_suffix}"
Error="${Red_font_prefix}[错误]${Font_color_suffix}"
RETVAL=0
check_running(){
PID="$(ps -C $NAME_BIN -o pid= |head -n1 |grep -o '[0-9]\{1,\}')"
if [[ ! -z ${PID} ]]; then
return 0
else
return 1
fi
}
do_start(){
check_running
if [[ $? -eq 0 ]]; then
echo -e "${Info} $NAME_BIN (PID ${PID}) 正在运行..." && exit 0
else
fusermount -zuq $LOCAL >/dev/null 2>&1
mkdir -p $LOCAL
mkdir -p ${LOG%/*}
sudo /usr/bin/rclone mount --config /volume1/docker/rclone/rclone.conf $NAME:$REMOTE $LOCAL --umask 000 --default-permissions --allow-non-empty --allow-other --buffer-size 32M --vfs-read-chunk-size 64M --vfs-read-chunk-size-limit 1G > "${LOG}" 2>&1 &
sleep 2s
check_running
if [[ $? -eq 0 ]]; then
echo -e "${Info} $NAME_BIN 启动成功 !"
else
echo -e "${Error} $NAME_BIN 启动失败 !"
fi
fi
}
do_stop(){
check_running
if [[ $? -eq 0 ]]; then
kill -9 ${PID}
RETVAL=$?
if [[ $RETVAL -eq 0 ]]; then
echo -e "${Info} $NAME_BIN 停止成功 !"
else
echo -e "${Error} $NAME_BIN 停止失败 !"
fi
else
echo -e "${Info} $NAME_BIN 未运行"
RETVAL=1
fi
fusermount -zuq $LOCAL >/dev/null 2>&1
}
do_status(){
check_running
if [[ $? -eq 0 ]]; then
echo -e "${Info} $NAME_BIN (PID $(echo ${PID})) 正在运行..."
else
echo -e "${Info} $NAME_BIN 未运行 !"
RETVAL=1
fi
}
do_restart(){
do_stop
sleep 2s
do_start
}
case "$1" in
start|stop|restart|status)
do_$1
;;
*)
echo "使用方法: $0 { start | stop | restart | status }"
RETVAL=1
;;
esac
exit $RETVAL
EOF
最后运行 rclone 挂载到本地
# 使用方法: { start | stop | restart | status }
bash /volume1/docker/rclone/rcloned strat
配置 nginx
主要还是配置 emby.js
const embyHost = 'http://172.17.0.1:8096'; //默认emby的地址是宿主机ip
const embyMountPath = '/video'; // rclone 的挂载目录, 例如将阿里云盘挂载到/volume1目录下: /volume1/video/aliyun,就填写 /video
const alistToken = 'alist-1c14e05d-b222-4307-9db7····'; //alist token, 在alist后台查看
const alistAddr= 'http://172.17.0.1:5244'; //访问宿主机上5244端口的alist地址
const embyApiKey = 'ab5bbc1f4233saedg2252e95fb53cbc4'; //emb api key, 在后台设置
const alistPublicAddr = 'http://10.0.0.5:5244'; // alist公网地址
具体配置教程可以看 Wiki
总结
至此,可以访问群晖IP:8095 端口访问 emby 服务,emby 媒体库也和添加普通本地文件一样步骤,刮削的文件和图片建议放本地,不要放到媒体所在文件夹,以免访问 api 过于频繁。播放速度也不再受制于家里宽带的上传速度,直接在客户端播放阿里云盘上的视频。
结合上篇本地自动化和本文云盘自动化,总存储空间达到了 42 T 左右,不过收藏的还是建议存储在本地,云盘上的只用于追剧,免得哪天又倒闭了。
求这个教程镜像分享
文章内都有具体镜像说明了的
追剧很有用~
折腾帝啊,以前我以爱折腾,现场是怎么简单怎么来~
其实也就是让自己追剧更轻松点,毕竟经常人和服务器不在同一个区域。