什么是strm?
strm 文件是一种非常小巧的文本文件,里面保存了指向在线视频的链接地址。它的大小通常只有几十字节,因此占用的存储空间非常少。
这种文件可以用来指向各种视频资源,比如网上的流媒体内容或本地存储的视频文件。它适合用来管理大量的网络存储媒体资源。例如在播放 STRM 文件时,可以直接通过链接播放网盘中的视频,而不用把视频下载到本地设备上。这样既方便又节省空间,同时还能保证播放流畅。
轻量化 Emby 服务器,降低 Emby 服务器的性能需求以及硬盘需求
运行稳定
相比直接访问 Webdav,Emby、Jellyfin 服务器可以提供更好的视频搜索功能以及自带刮削器,以及多设备同步播放进度。
为什么使用123strm?
25年6月alist被曝疑似被收购以后,普遍比较担心使用的安全性。详细情况可前往github查看相关issue。123云盘也发公告表示于6.16暂停支持alist挂载。
于是有了本软件的诞生,目的为取消alist依赖,使用123云盘的官方api进行处理,安全稳定。
使用123云盘官方api,安全可靠,不依赖第三方
单线程下载,自动跳过已存在图片和字幕等文件,不会重复下载
可配置海报、字幕、nfo文件是否下载
自动清理本地不存在于123云盘的文件
支持生成302链接,可自定义代理地址以便外网访问
支持多账号生成,支持单账号配置多文件夹
生成速度
生成strm的速度与网盘目录文件夹内包含的子文件夹数量成正相关,简略计算方式为
生成时间=刮削目录子文件夹数量/3/60 (分钟)
以我的网盘为例,500+的子文件夹生成时间稳定在3分钟出头,即556/3/60=3.08 分钟
如果选择下载nfo、图片等文件,在第一次生成时会极大影响生成速度,耐心等待即可,也可以按照网盘目录结构从已有的刮削数据迁移过来节省时间。
项目地址
https://github.com/knifezred/123strm
如何自行打包镜像?
克隆项目到本地,执行以下命令行代码即可。
# 生成docker镜像
docker build -t 123strm .
# 生成本地镜像包
docker save -o 123strm.tar 123strm
# 压缩镜像包减小体积
gzip 123strm.tar
也可以直接前往github下载发布的镜像包,暂无dockerhub镜像地址。
部署方式
config配置
支持的Cron表达式
*/15 * * * * # 每15分钟执行
0 */2 * * * # 每2小时执行
0 0 * * * # 每天0:00执行
0 1 */3 * * # 每3天的1:00执行
45 23 * * * # 每天23:45执行
0 0 * * 1 # 每周一0:00执行
0 9 * * 5 # 每周五9:00执行
30 15 * * 0 # 每周日15:30执行
0 0 1 * * # 每月1日0:00执行
0 9 15 * * # 每月15日9:00执行
30 12 28 * * # 每月28日12:30执行
简化版config配置
# 定时任务cron表达式,不配置则默认为每天凌晨1点执行
cron: '0 02 * * *'
# strm地址使用302官方链接
use_302_url: True
# ip写自己nas的实际ip,外网可正常播放
proxy: 'http://192.168.1.16:1236'
# 是否下载 .nfo 文件(可选,默认 False)
nfo: True
# 程序启动后立即执行任务 (可选,默认 False)
running_on_start: True
# https://www.123pan.com/developer 注册获取
client_id: '123123'
client_secret: '123123'
job_list:
- id: '账号1'
root_folder_id: '123123123'
target_dir: '/media/账号1'
全部配置
cron只能使用全局默认设置,不能job单独设置,为了防止接口qps超出被封和线程冲突。
targetDir每个job必须独立配置,禁止嵌套,禁止使用同一个目录,否则会清除非当前job刮削的文件
# 定时任务cron表达式,不配置则默认为每天凌晨1点执行
# 为防止冲突,所有job都使用一个corn,依次生成直到全部结束
cron: '0 02 * * *'
# strm地址使用官方下载链接
use_302_url: True
# 不配置则默认不使用代理
proxy: 'http://nas_ip:1236'
# 302链接缓存过期时间(秒),默认5分钟
cache_expire_time: 300
# strm路径前缀,可设置为cd2挂载的目录或者123盘webdav挂载的路径,需要加上对应设置的rootFolder的文件夹目录
# 如:选择的rootFolder为 /影视剧/电视剧,cd2映射的路径为 /volume1/docker/cloud_nas/123云盘
# 则path_prefix为 /volume1/docker/cloud_nas/123云盘/影视剧/电视剧、
# use_302_url=True时该设置无效
path_prefix: '/volume1/docker/cloud_nas/123云盘/影视剧/'
# 平铺模式,开启后 subtitle、image、nfo 强制关闭(可选,默认 False)
flatten_mode: False
# 视频文件后缀 (可选,默认 ['.mp4', '.mkv', '.ts', '.iso'] )
video_extensions:
['.mp4', '.mkv', '.avi', '.mov', '.flv', '.wmv', '.m2ts', '.ts', '.iso']
# 是否下载字幕文件(可选,默认 False)
subtitle: True
# 字幕文件后缀(可选,默认 ['.srt', '.ass', '.sub'])
subtitle_extensions: ['.srt', '.ass', '.sub']
# 是否下载图片文件(可选,默认 False)
image: True
# 图片文件后缀 (可选,默认 [".jpg", ".jpeg", ".png", ".webp"] )
image_extensions: ['.jpg', '.jpeg', '.png', '.webp']
# 下载图片名后缀 (可选,默认下载全部 [] )
download_image_suffix: ['poster', 'fanart']
# 是否下载 .nfo 文件(可选,默认 False)
nfo: True
# 覆盖模式,本地路径存在同名文件时是否重新生成/下载该文件,仅支持strm文件(可选,默认 False)
overwrite: False
# 视频文件最小限制,低于该大小的视频不处理,默认为100Mb
min_file_size: 104857600
# 程序启动后立即执行任务
running_on_start: True
# https://www.123pan.com/developer 注册获取
client_id: '123123'
client_secret: '123123'
# 输出路径
target_dir: '/media/'
# 以上所有设置均可在job_list中单独设置,优先使用job_list中的配置,没有的再使用默认值
# target_dir 为最终输出路径,job_list 中可以配置多个账号,每个账号可以配置多个文件夹,该配置必须为每个Job配置独立的文件夹,不能嵌套,不能相互包含,否则生成后会清空非Job配置获取的文件
job_list:
- id: '账号1'
# 123盘文件夹的ID
# 浏览器打开对应文件夹,如:https://www.123pan.com/?homeFilePath=111111,222222
# homeFilePath后的最后一串数字就是该文件夹的ID
root_folder_id: '0'
# 输出路径
target_dir: '/media/账号1'
- id: '账号2'
# 文件夹1 文件夹2 文件夹3
root_folder_id: '12312301,12312302,12312303'
client_id: '234'
client_secret: '234'
target_dir: '/media/账号2'
docker compose安装:以绿联Nas为例
将镜像包传到nas,并在docker-镜像-本地镜像-添加镜像中选择并导入。
添加完镜像后在项目一栏选择创建项目,将compose示例填入配置,项目名称和路径可自行填写,建议为123strm
。
services:
autofilm:
image: 123strm:latest
container_name: 123strm
network_mode: host
volumes:
- /volume1/docker/123strm/config:/config
- /volume1/docker/123strm/media:/media
restart: always
working_dir: /app
environment:
PUID: "0"
PGID: "0"
直接运行python脚本 (不推荐)
前往github克隆项目到本地,直接pyhton app/main.py
即可。
使用效果
看到如下信息即表示软件正常运行,等待执行即可。
运行时会提供日志,显示下载文件地址。