基于Docker搭建全链路媒体库:从PT下载到Emby播放的完美方案
基于Docker搭建全链路媒体库:从PT下载到Emby播放的完美方案
最近折腾了一套基于Docker的媒体库方案,没想到效果出奇的好。整个流程从PT下载到最终在Emby中播放,实现了全链路自动化,省去了大量手动整理的时间。今天就把我踩过的坑和最终的实现方案分享给大家。
Docker媒体库自动化架构示意图
整体架构思路
这套方案的核心思路是:下载 -> 整理 -> 刮削 -> 播放 的全流程自动化。每个环节用一个专门的Docker容器来处理,通过共享卷的方式无缝衔接。
关键组件介绍
- qBittorrent:负责PT下载
- rclone:挂载网盘并生成STRM文件
- FileBot/Sonarr/Radarr:自动重命名和整理
- Jellyfin/Emby:媒体服务器
具体实现步骤
1. 准备工作
首先确保你的服务器已经安装好Docker和Docker Compose。创建一个统一的工作目录,比如 /data/media,并在下面创建必要的子文件夹:
/data/media/downloads:下载目录/data/media/movies:电影目录/data/media/tv:电视剧目录/data/media/config:配置文件目录
2. PT下载配置
使用 linuxserver/qbittorrent 镜像:
qbittorrent:
image: linuxserver/qbittorrent
container_name: qbittorrent
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
volumes:
- /data/media/config/qbittorrent:/config
- /data/media/downloads:/downloads
ports:
- 8080:8080
- 6881:6881
- 6881:6881/udp
restart: unless-stopped
3. 文件整理自动化
方案A:使用FileBot
FileBot是最传统的重命名工具,但需要许可证。我更喜欢用它来做最终的文件整理:
filebot:
image: jlesage/filebot
container_name: filebot
volumes:
- /data/media/downloads:/data
- /data/media/movies:/output/movies
- /data/media/tv:/output/tv
environment:
- TZ=Asia/Shanghai
restart: unless-stopped
方案B:使用Sonarr/Radarr
这是更现代的解决方案,特别适合追剧用户:
radarr:
image: linuxserver/radarr
container_name: radarr
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
volumes:
- /data/media/config/radarr:/config
- /data/media/movies:/movies
- /data/media/downloads:/downloads
ports:
- 7878:7878
restart: unless-stopped
4. 网盘STRM方案
这是整套方案的精髓所在。通过生成STRM文件,我们可以让Emby直接播放云端存储的媒体文件,而无需将大文件同步到本地。
安装rclone
curl https://rclone.org/install.sh | sudo bash
挂载网盘
Emby媒体服务器播放界面示意图
rclone mount gdrive: /data/media/cloud \
--allow-other \
--buffer-size 32M \
--vfs-read-ahead 2G \
--daemon
生成STRM文件
我可以写个简单的脚本自动生成STRM文件:
#!/bin/bash
find /data/media/movies -type f \( -name "*.mkv" -o -name "*.mp4" \) | while read file; do
dir=$(dirname "$file")
base=$(basename "$file")
strm="${base%.*}.strm"
echo "http://your-server:8080/media/$(basename "$dir")/$base" > "$dir/$strm"
done
5. Emby路径配置
这是很多人容易出错的地方。务必确保:
- Emby容器的挂载路径与实际情况一致
- 使用STRM时,路径要是网络可访问的
- 刮削器要能正确识别文件名
emby:
image: linuxserver/emby
container_name: emby
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
volumes:
- /data/media/config/emby:/config
- /data/media/movies:/movies
- /data/media/tv:/tvshows
ports:
- 8096:8096
restart: unless-stopped
常见问题解决
-
字幕无法自动加载:确保字幕文件与视频在同一目录且命名一致
-
STRM文件无法播放:检查URL是否正确,Emby是否能直接访问该地址
-
刮削失败:检查文件名是否符合命名规范,可考虑手动刮削
进阶优化建议
- 配置自动删除已看视频的源文件(需谨慎)
- 添加自动字幕下载服务如bazarr
- 设置定期备份Emby数据库
- 使用Nginx反代理提升访问速度
结语
这套方案虽然前期配置稍显复杂,但一旦跑通,后续基本可以实现"躺平"式观影。特别是STRM结合网盘的方案,完美解决了存储空间不足的问题。
如果有任何问题,欢迎在评论区讨论,我会尽力解答。
评论已关闭