akimio521 / autofilm Goto Github PK
View Code? Open in Web Editor NEW一个为Emby、Jellyfin服务器提供Strm直链播放的小项目
License: GNU Affero General Public License v3.0
一个为Emby、Jellyfin服务器提供Strm直链播放的小项目
License: GNU Affero General Public License v3.0
错误信息
autofilm | 正在执行主程序...
autofilm | [2024-06-10 22:06:18,569][INFO]<module>:当前的APP版本是:v1.1.0
autofilm | [2024-06-10 22:06:18,569][INFO]<module>:配置文件路径:config/config.yaml
autofilm | [2024-06-10 22:06:18,571][ERROR]__init__:配置文件/app/config/config.yaml读取错误,错误信息:'output_dir'
autofilm | Traceback (most recent call last):
autofilm | File "/app/main.py", line 20, in <module>
autofilm | my_autofilm = autofilm.AutoFilm(config_path=args.config_path)
autofilm | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
autofilm | File "/app/autofilm.py", line 56, in __init__
autofilm | logging.info(f"输出目录:{self.output_dir}".center(50, "="))
autofilm | ^^^^^^^^^^^^^^^
autofilm | AttributeError: 'AutoFilm' object has no attribute 'output_dir'
autofilm | 等待 3600 秒后再次执行...
config 配置文件内容
Settings:
output_path: /opt/dockge/stacks/autofilm/media # ./media # 输出路径尝试过相关路径与绝对路径,都报这个错误
subtitle: True # 是否下载字幕
img: False # 是否下载图片
nfo: True # 是否下载视频信息文件
AlistServerList:
- id: X
url: "https://alist.example.com"
username: alist
password: "password"
base_path: /xunlei-1/media
最近在用chinesesubfinder下载字幕,但是识别不到strm文件,去那边提了issue一直没有回复,今天试着复制strm文件重命名为.mkv居然能识别出来了,也算是一种临时的解决办法吧
建议根据alist中的视频文件,自动刮削整理分类成媒体库
Dev-20240707 报错如下
正在执行主程序...
[2024-07-08 01:23:14,095][INFO]:当前的APP版本是:v1.1.2-2
[2024-07-08 01:23:14,095][INFO]:配置文件路径:/config/config.yaml
[2024-07-08 01:23:14,100][INFO]init:===================输出目录:/media====================
[2024-07-08 01:23:14,100][DEBUG]run_Alist2Strm:Alist服务器加载成功
[2024-07-08 01:23:14,101][DEBUG]load_ssl_context:load_ssl_context verify=True cert=None trust_env=True http2=False
[2024-07-08 01:23:14,102][DEBUG]load_ssl_context_verify:load_verify_locations cafile='/usr/local/lib/python3.12/site-packages/certifi/cacert.pem'
[2024-07-08 01:23:14,128][DEBUG]trace:connect_tcp.started host='192.168.2.174' port=5244 local_address=None timeout=5 socket_options=None
[2024-07-08 01:23:14,130][DEBUG]trace:connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f6bb24cfd70>
[2024-07-08 01:23:14,131][DEBUG]trace:send_request_headers.started request=<Request [b'POST']>
[2024-07-08 01:23:14,131][DEBUG]trace:send_request_headers.complete
[2024-07-08 01:23:14,131][DEBUG]trace:send_request_body.started request=<Request [b'POST']>
[2024-07-08 01:23:14,131][DEBUG]trace:send_request_body.complete
[2024-07-08 01:23:14,131][DEBUG]trace:receive_response_headers.started request=<Request [b'POST']>
[2024-07-08 01:23:14,134][DEBUG]trace:receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Content-Type', b'application/json; charset=utf-8'), (b'Date', b'Sun, 07 Jul 2024 17:23:14 GMT'), (b'Content-Length', b'255')])
[2024-07-08 01:23:14,135][INFO]_send_single_request:HTTP Request: POST http://192.168.2.174:5244/api/auth/login/hash "HTTP/1.1 200 OK"
[2024-07-08 01:23:14,135][DEBUG]trace:receive_response_body.started request=<Request [b'POST']>
[2024-07-08 01:23:14,135][DEBUG]trace:receive_response_body.complete
[2024-07-08 01:23:14,135][DEBUG]trace:response_closed.started
[2024-07-08 01:23:14,136][DEBUG]trace:response_closed.complete
Traceback (most recent call last):
File "/app/main.py", line 29, in
my_autofilm.run_Alist2Strm()
File "/app/autofilm.py", line 74, in run_Alist2Strm
alist2strm = Alist2Strm(
^^^^^^^^^^^
File "/app/modules/alist2strm.py", line 63, in init
self.base_dir = client.fs.abspath(base_dir)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/alist/component/fs.py", line 2637, in abspath
path = fspath(path)
^^^^^^^^^^^^
TypeError: expected str, bytes or os.PathLike object, not NoneType
等待 3600 秒后再次执行...
运行报错,但是去目录查看,STRM、字幕、nfo都在,不知道如何查看报错软银
[WARNING]2024-07-22 16:38:16,680 - /volume2/电影/strm/电视剧/黑镜/Season 06处理失败,6秒后重试 ...
[WARNING]2024-07-22 16:38:17,804 - /volume2/电影/strm/电视剧/黑镜处理失败,6秒后重试 ...
[WARNING]2024-07-22 16:38:17,806 - /volume2/电影/strm/电视剧处理失败,6秒后重试 ...
[WARNING]2024-07-22 16:38:22,682 - /volume2/电影/strm/电视剧/黑镜/Season 06处理失败,超出最大重试次数!返回默认值
[WARNING]2024-07-22 16:38:23,807 - /volume2/电影/strm/电视剧/黑镜处理失败,超出最大重试次数!返回默认值
[WARNING]2024-07-22 16:38:23,807 - /volume2/电影/strm/电视剧处理失败,超出最大重试次数!返回默认值
启动命令:
docker run -d --name autofilm --restart unless-stopped -v /volume1/docker/emby_strm_autofilm/config:/config -v /volume2/电影/strm:/volume2/电影/strm -v /volume1/docker/emby_strm_autofilm/logs:/logs akimio/autofilm:DEV
配置文件如下:
Settings:
DEV: False # 开发者模式(可选,默认 False)
Alist2StrmList:
- id: 电影 # 标识 ID
cron: 30 9-23 * * * # 后台定时任务 Crontable 表达式
url: http://192.168.31.192:5678 # Alist 服务器地址
username: guest # Alist 用户名
password: guest_Api789 # Alist 密码
source_dir: /aliyun/Emby/ # Alist 服务器上文件夹路径
target_dir: /volume2/电影/strm # 输出路径
flatten_mode: False # 平铺模式,开启后 subtitle、image、nfo 强制关闭(可选,默认 False)
subtitle: True # 是否下载字幕文件(可选,默认 False)
image: True # 是否下载图片文件(可选,默认 False)
nfo: True # 是否下载 .nfo 文件(可选,默认 False)
raw_url: False # 是否使用原始地址替换 Alist 服务器下载地址(可选,默认 False)
overwrite: True # 覆盖模式,本地路径存在同名文件时是否重新生成/下载该文件(可选,默认 False)
other_ext: # 自定义下载后缀,使用西文半角逗号进行分割,(可选,默认为空)
max_workers: 5 # 下载文件最大并发数(可选,默认 5)
- id: 夸克
cron: 30 9-23 * * *
url: http://192.168.31.1:5244
username: admin
password: admin
source_dir: /kuake/Emby/
target_dir: /volume2/电影/strm
flatten_mode: False
subtitle: True
image: True
nfo: True
raw_url: False
overwrite: True
other_ext:
max_workers: 5
#Ani2AlistList:
# - id: 新番追更 # 标识 ID
# cron: 20 12 * * * # 后台定时任务 Crontable 表达式
# url: https://127.0.0.1:5244 # Alist 服务器地址
# username: admin # Alist 用户名(需管理员权限)
# password: myalist # Alist 密码
# target_dir: /视频/动漫/新番 # Alist 地址树存储器路径,若存储器不存在将自动创建(可选,默认/Anime)
# rss_update: False # 使用 RSS 订阅更新最新番剧,启用后忽视传入的 year 和 month(可选,默认为 True)
# year: 2024 # 动漫季度-年份,仅支持 2019-1 及以后更新的番剧(可选,默认使用当前日期)
# month: 7 # 动漫季度-月份,仅支持 2019-1 及以后更新的番剧(可选,默认使用当前日期)
# src_domain: aniopen.an-i.workers.dev # ANI Open 项目域名(可选,默认为 aniopen.an-i.workers.dev)
# rss_domain: api.ani.rip # ANI Open 项目 RSS 订阅域名(可选,默认为 api.ani.rip)
使用巴哈姆特动画疯Strm 出現下列問題
【INFO】2024-03-05 17:21:27,620 - bahastrm - Baha-Strm定时任务创建成功:*/20 22,23,0,1 * * *
【INFO】2024-03-05 17:21:27,621 - bahastrm - Baha-Strm服务启动,立即运行一次
【WARNING】2024-03-05 17:21:30,694 - bahastrm - 未获取到文件信息,3秒后重试 ...
【WARNING】2024-03-05 17:21:33,726 - bahastrm - 未获取到文件信息,3秒后重试 ...
【WARNING】2024-03-05 17:21:36,756 - bahastrm - 未获取到文件信息,3秒后重试 ...
【WARNING】2024-03-05 17:21:39,757 - bahastrm - https://aniopen.an-i.workers.dev/ 请确保当前季度番剧文件夹存在
实际使用中发现的。大佬勿怪😁。
1,判断本地是否有.strm,有就跳过,没有就生成。或者增加跳过或覆盖模式。(增加效率)
2,判断图片和字幕与本地大小是否一致,一致就跳过,不一致就覆盖。(有些图片是0kb,图片损坏,需要手动删除,重新运行)
3,刮削完成后触发emby刷新库。(目前设定的每2小时刷库)
生成strm的速度变慢了,之前10分多钟就好了,现在要快一小时了。而且只有字幕跳过了,每扫描一次就重新生成一次,覆盖模式也设置的false。
配置文件设置如下
Settings:
DEV: True # 开发者模式(可选,默认 False)
Alist2StrmList:
问了一下ai好像是
item[-1]== '/'
的问题
zz@iStoreOS:/AutoFilm-1.0.1# python /mnt/-1/AutoFilm-1.0.1/main.py
Traceback (most recent call last):
File "/mnt/-1/AutoFilm-1.0.1/main.py", line 5, in
import autofilm
File "/mnt/-1/AutoFilm-1.0.1/autofilm.py", line 13, in
from webdav3.client import Client
File "/usr/lib/python3.10/site-packages/webdav3/client.py", line 12, in
import lxml.etree as etree
ModuleNotFoundError: No module named 'lxml.etree'
zz@iStoreOS:/AutoFilm-1.0.1# pip show lxml
Name: lxml
Version: 5.2.2
Summary: Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.
Home-page: https://lxml.de/
Author: lxml dev team
Author-email: [email protected]
License: BSD-3-Clause
Location: /usr/lib/python3.10/site-packages
Requires:
Required-by: webdavclient3
root@iStoreOS:/mnt/-1/AutoFilm-1.0.1#
setting:
output_path: ./media/ # 输出路径
l_threads: 3 # list_files线程数
p_threads: 8 # processing_file线程数
subtitle: True # 是否下载字幕
img: False # 是否下载图片
nfo: True # 是否下载视频信息文件
url_encode: True # 是否对生成的strm文件中的链接进行URL编码
webdav:
movie:
url: http://127.0.0.1:5244/dav/onedriver/movie/
username: admin
password: admin
我的alist没有设置token,在旧版本中,使用python3 autofilm.py --webdav_url http://127.0.0.1:5244/dav/onedriver/movie/ --username admin --password admin --output_path /opt/strm/ --nfo true --img true,这样是完全可以工作的。我不知道要怎么修改。
通过Emby播放strm文件后无法记录播放进度,会直接标记为已播放,想请问一下你是否也遇到了这个问题。
已经设置好了token,但是为什么识别不出来呢
这样emby可以实时入库
我的服务器是1g/40g轻量云服务器,如果这样是emby边看边缓存,受服务器带宽限制,是否可以让他直接从alist获取播放链接直接播放
正在执行主程序...
[2024-06-19 19:19:40,533][INFO]:当前的APP版本是:v1.1.1-2
[2024-06-19 19:19:40,533][INFO]:配置文件路径:/app/config/config.yaml
[2024-06-19 19:19:40,534][INFO]init:=================输出目录:/app/media==================
[2024-06-19 19:19:40,538][CRITICAL]_processer:登录失败,错误信息:401 Client Error: Unauthorized for url:
我保证我的账号和密码没有错误
Traceback (most recent call last):
File "/root/AutoFilm/main.py", line 5, in
import autofilm
File "/root/AutoFilm/autofilm.py", line 6, in
from modules import Alist2Strm
File "/root/AutoFilm/modules/init.py", line 1, in
from .Alist2Strm import Alist2Strm
File "/root/AutoFilm/modules/Alist2Strm.py", line 11, in
from alist import AlistFileSystem, AlistPath
File "/usr/local/lib/python3.10/dist-packages/alist/init.py", line 25, in
from asyncio import get_running_loop, run, TaskGroup
ImportError: cannot import name 'TaskGroup' from 'asyncio' (/usr/lib/python3.10/asyncio/init.py)
依赖包已安装,为啥还会出现这个错误?
python版本是3.10.7
你好,不好意思麻烦帮忙看下哪里设置的有问题,谢谢!
config.yaml配置文件如下:
Settings:
output_dir: media # 输出路径
subtitle: False # 是否下载字幕
img: False # 是否下载图片
nfo: False # 是否下载视频信息文件
library_mode: False # 媒体库模式
AlistServerList:
- id: 视频115 # 任意字符,用于标识Alist服务器
url: http://192.168.0.100:35244 # Alist服务器URL
username: admin # Alist账号
password: admin # Alist密码
base_path: /115/video/ # Alist服务器上文件夹路径
token:
async_mode: False # 设置 subtitle,img,nfo 等二进制文件是否启用异步下载
overwrite: False # AList未启用签名时,设置为空字符串
日志信息如下:
<html>
<body>
<!--StartFragment-->
2024/06/30 21:18:32 | stdout | 等待 3600 秒后再次执行...
-- | -- | --
2024/06/30 21:18:31 | stdout | [2024-06-30 21:18:31,627][INFO]__init__:=================输出目录:/app/media==================
2024/06/30 21:18:31 | stdout | [2024-06-30 21:18:31,620][INFO]<module>:配置文件路径:/app/config/config.yaml
2024/06/30 21:18:31 | stdout | [2024-06-30 21:18:31,620][INFO]<module>:当前的APP版本是:v1.1.1-2
2024/06/30 21:18:30 | stdout | 正在执行主程序...
<!--EndFragment-->
</body>
</html>
然后我在挂载的media文件夹里没有发现任何文件,通过终端进入docker内部,在/app/media下面也没有任何文件生成。
请问下我这个有什么问题吗,请指教下,谢谢!
好的
docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "/entrypoint.sh": stat /entrypoint.sh: no such file or directory: unknown.
本地指定目录里面一直没有生成strm文件
autofilm | 正在执行主程序... autofilm | [2024-05-11 16:40:58,276][INFO]<module>:当前的APP版本是:v1.0.1 autofilm | [2024-05-11 16:40:58,277][INFO]<module>:配置文件路径:config/config.yaml autofilm | [2024-05-11 16:40:58,279][INFO]__init__:输出目录:/opt/media/;list_files线程数:3;processing_file线程数:8 autofilm | [2024-05-11 16:40:58,279][INFO]run:开始生成[迪士尼动漫]Webdav服务器的Strm文件;剩余0个Webdav服务器未进行 autofilm | [2024-05-11 16:40:58,280][WARNING]get_config_value:Alist令牌token读取错误,默认关闭,错误信息:'token'
但是我并没有填写token,这个是固定报错的,后面没有任何日志内容了,也没有生成strm文件
说明中:原版 Jellyfin 开启转码后会代理访问 strm 文件,无法实现直链访问,需修改前端
具体jellyfin应该怎么修改前端或者有已经修改过的jellyfin docker版本推荐吗
如果我添加了超过1个的WEBDAV地址,比如
webdav:
movie:
url: http://127.0.0.1:5244/dav/onedriver/movie/
username: admin
password: x
show:
url: http://127.0.0.1:5244/dav/onedriver/show/
username: admin
password: x
然后他的目录格式就会变成
只有奇怪的格式。这样在jellyfin扫描的时候,就无法分开了啊。就会被嵌套扫描。不能够每一个webdav地址都可以指定输出到某一个文件夹么。还是有我不知道的写法,我在论坛没有找到相关配置。
自行安装本程序有一定的难度,请问作者,有计划将本程序做成docker吗,这样NAS用户,都可以使用,会很方便的。
[2024-07-05 10:57:43,228][INFO]:当前的APP版本是:v1.1.1-2
[2024-07-05 10:57:43,228][INFO]:配置文件路径:/app/config/config.yaml
[2024-07-05 10:57:43,230][INFO]init:=================输出目录:/data/media=================
[2024-07-05 10:57:43,230][DEBUG]run:Alist服务器加载成功
[2024-07-05 10:58:04,662][DEBUG]_file_process:The.Last.Kingdom.S01E02.1080p.BluRay.REMUX.AVC.DTS-HD.MA.5.1-NOGRP.srt下载成功,文件本地目录:/欧美剧/孤国春秋/孤国春秋S01
[2024-07-05 10:58:04,662][DEBUG]_file_process:Mad.Max.1979.2160p.BluRay.REMUX.HEVC.DTS-HD.MA.5.1-FGT.srt下载成功,文件本地目录:/Movie/疯狂的麦克斯1 4K REMUX (1979)
[2024-07-05 10:58:04,663][DEBUG]_file_process:疯狂的麦克斯4 1080P REMUX.ass下载成功,文件本地目录:/Movie/疯狂的麦克斯4 4K REMUX(2015)
使用docker部署,请问config.yaml配置的输出目录output_dir,对应的是docker容器的目录还是宿主机的目录,现在把文件放到了容器的根目录
首先万分感谢大佬这个项目,简化了302的步骤,让我这个小白用emby+alist+autofilm就实现了strm直接302播放。
但我从一开始使用(v1.1.2)到现版本(v1.2.3),都出现了某些视频生成的strm异常,下载的图片和nfo文件损坏的情况,导致strm无法播放,而且比较奇怪的是损坏的为固定的几个文件夹中的所有文件,具体情况如下:
1、已经确认115内文件完整,可在线播放也可下载到本地查看,云端与下载到本地打开均无问题;
2、在alist中确定文件完整,且所有加密均未开启(查看过之前的issue,关闭了加密),可在线播放也可下载到本地查看,云端与下载到本地打开均无问题;
3、alist和autofilm两个镜像均尝试过重新拉取镜像进行重新部署,配置也是重新设置的,但还是会出现文件损坏问题;
4、没有找到具体的文件损坏的规律,但是能确定的是每次损坏都是固定几个文件夹内的全部文件。
尝试过如下操作,均未解决,且每次尝试均为固定的几个文件内损坏,其他文件无异常:
①在文件第一次异常之后,将所有异常文件删除后,仅重新运行任务,重新下载后的文件仍然异常;
②在文件异常之后,将所有异常文件删除后,重新部署docker并配置(配置文件及媒体目录使用原路径),重新下载后文件仍异常;
③在文件异常之后,将所有异常文件删除后,重新部署docker并配置(配置及媒体目录均使用新路径),重新下载后文件仍异常;
④115重新转存此文件,并重新部署alist和autofilm,重新下载后文件仍异常;
四次尝试,容器均无异常,日志未显示错误信息。
目前我115中有3000个视频,只有这几个视频是异常的。经过几次的尝试,我实在是分析不出来是什么原因导致的文件异常,还请大佬帮忙分析一下,下面是一些截图帮助大佬理解问题情况。
File "main.py", line 11
SyntaxError: Non-ASCII character '\xe5' in file main.py on line 11, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
请问这个是什么情况
程序每次读取alist列表数据时,很慢,以前webdav的时候,是读一个目录就能开始处理了,现在感觉像是把所有数据加载完后,才开始处理
想咨询一下,这个脚本是不是不支持扫描子目录?
比如我的alist挂载云盘目录为:https://alist.example.com:666/dav/电视剧/**/2022 ,下面包含了狂飙、人世间两个子目录,运行后会报错:
Traceback (most recent call last):
File "D:\电影\autofilm.py", line 108, in
directory, files, count = list_files(args.webdav_url, args.username, args.password, args.show_path, depth=None, path='', count=0, proxies=proxies)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\电影\autofilm.py", line 41, in list_files
subdirectory, subfiles, count = list_files(webdav_url + item, username, password, depth=None if depth is None else depth - 1, path=path+item, count=count)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: list_files() missing 1 required positional argument: 'show_path'
但是当我改为:https://alist.example.com:666/dav/电视剧/**/2022/狂飙,则可以正常获取狂飙目录下的媒体信息并输出strm文件。
File "/root/AutoFilm-main/app/main.py", line 27 logger.info(f"{server["id"]}已被添加至后台任务") ^^ SyntaxError: f-string: unmatched '['
按照教材设置,emby播放为什么还是跑服务器带宽?
能不能实现strm的增量更新,有时候云盘增加视频
.lstrip("/")
无论library_mode设置为True还是False都可以正常写入配置文件中output_dir所指定的位置。比如
周一到周五 17-20点执行
周末 08-23点执行
0 11-20 * * 1-5
0 9-23 * * 0
webdav删除后的文件夹后, 以相同参数再次运行, 原先已有的.strm .nfo 图片等文件不会同步删除
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.