unraid服务器all in one之旅 篇三:jellyfin自动字幕的小脚本

2020-04-23 17:36:53 12点赞 65收藏 18评论

前面写了一个基于subfinder的文章,不过用来不是契合jellyfin

所以抽了点时间写了一个接入到jellyfin的小脚本

只需要添入APIKEY和服务器IP地址即可

也可以排除不需要查找的文件夹

注意的是这里默认设置不查询现有文件,只负责监控未来新加入文件

py脚本可以挂载到宝塔docker或者Chronos下,

当然也可以在虚拟机里运行,不过要注意挂载文件名称要一致

这里以Chronos docker为例,首先在app商店安装Chronos

jellyfin自动字幕的小脚本

然后修改Chronos设置将jellyfin挂载的媒体文件夹以同样方式挂载,注意挂载文件夹名称要相同

jellyfin自动字幕的小脚本


jellyfin自动字幕的小脚本

Chronos保持一致

之后新建一个API秘钥,然后在Chronos里新建一个脚本安装以下四个依赖,安装过程需要翻墙

requests

jsonpath

pandas

sqlalchemy

jellyfin自动字幕的小脚本

jellyfin自动字幕的小脚本

复制脚本进去,填入APIKEY,IP地址,按示例填入排除目录。

#!coding=utf-8

import requests

import jsonpath

import json

import pandas as pd

from sqlalchemy import create_engine

import os

import hashlib

from pathlib import Path

#填入api

api_key = '你设置的APIKEY'

#ip

IP = 'http://172.17.0.1:8096'

#排除目录,非必须

排除目录 = ['/new/JAV_output','/new/rrmovie','/new/failed/tmm']

#默认不查询现有资源,如需查询,建议用subfinder查询指定文件夹

def movname(filePath):

dirlist=[]

for fpath, dirname, fnames in os.walk(filePath):

dirlist.append(fpath)# 所有的文件夹路径

return dirlist

def remov(path):

filename1 =''

templist= os.listdir(path)

nlist=[]

name_list= ['.AVI','.WMV','.MOV','.MP4','.MKV','.FLV','.TS','.avi','.wmv','.mov','.mp4','.mkv','.flv','.ts']

for r in templist:

if any(name in r for name in name_list):

nlist.append(path+'/'+r)

return nlist

def search_subs(videofile):

filehash = video_hash(videofile)

if filehash=='':return ''

else:

root, basename = os.path.split(videofile)

url = 'https://www.shooter.cn/api/subapi.php'

payload = {'filehash': filehash,

'pathinfo': basename,

'format': 'json',

'lang': 'Chn'}

r =requests.post(url,data=payload)

req = r.text

if len(req)>50:

jsonobj = json.loads(req)

Link = jsonpath.jsonpath(jsonobj,"$..Link")[0]

Ext = jsonpath.jsonpath(jsonobj,"$..Ext")[0]

fname,fename=os.path.splitext(basename)

r = requests.get(Link)

with open(root+'/'+fname+'.'+Ext, "wb") as code:

code.write(r.content)

else:

Link =''

print('ok')

return Link

def video_hash(videofile):

""" compute videofile's hash

reference: https://docs.google.com/document/d/1w5MCBO61rKQ6hI5m9laJLWse__yTYdRugpVyz4RzrmM/preview

"""

seek_positions = [None] * 4

hash_result = []

with open(videofile, 'rb') as fp:

total_size = os.fstat(fp.fileno()).st_size

if total_size < 8192 + 4096:return ''

seek_positions[0] = 4096

seek_positions[1] = total_size // 3 * 2

seek_positions[2] = total_size // 3

seek_positions[3] = total_size - 8192

for pos in seek_positions:

fp.seek(pos, 0)

data = fp.read(4096)

m = hashlib.md5(data)

hash_result.append(m.hexdigest())

return ';'.join(hash_result)

def namelist(dirs):

nlist1=[]

dirlist = movname(dirs)

for i in dirlist:nlist1 = nlist1+remov(i)

return nlist1

def re_list(dirlist1):

engine = create_engine('sqlite:///'+dirlist1[0]+'/sub.db')

nlist=[]

for i in dirlist1:

nlist = nlist+namelist(i)

df = pd.DataFrame(nlist)

df.columns=['n']

my_file = Path(dirlist1[0]+'/sub.db')

if not my_file.exists():

df.to_sql('sublist',con=engine, if_exists='append',index=False)

sql = "select * from sublist"

df1=pd.read_sql(sql, engine)

df1.columns=['n']

df2 = df.append(df1)

result = df2.drop_duplicates(subset=['n'],keep=False)

result = pd.merge(df,result,on=['n',])

return result

url = IP+'/Library/VirtualFolders?&api_key='+api_key

r =requests.get(url)

req = r.text

jsonobj = json.loads(req)

Locations = jsonpath.jsonpath(jsonobj,"$..Locations")

dirlist1 = []

for i in Locations:

if i[0] not in 排除目录:

dirlist1 = dirlist1+i

result = re_list(dirlist1)

for i in list(result['n']):search_subs(i)

engine = create_engine('sqlite:///'+dirlist1[0]+'/sub.db')

result.to_sql('sublist',con=engine, if_exists='append',index=False)

jellyfin自动字幕的小脚本

如果是docker jellfyin 这里IP可以不动,默认http://172.17.0.1:8096即可

最后设置一个自己喜欢的间隔时间(不需要过于频繁)

就可以实现自动监控新增的jellyfin媒体目录和文件定时更新字幕了。

这里设置的是5分钟更新一次这里设置的是5分钟更新一次

展开 收起

Microsoft 微软 Office 365 个人版

Microsoft 微软 Office 365 个人版

199元起

Microsoft 微软 到手18.2元/月 微软office365家庭版microsoft365增强版15个月

Microsoft 微软 到手18.2元/月 微软office365家庭版microsoft365增强版15个月

275元起

统信 UOS桌面操作系统V20/适用于国产型号/官方正版授权/国产专用

统信 UOS桌面操作系统V20/适用于国产型号/官方正版授权/国产专用

598元起

Microsoft 微软 活动6天 office365家庭版microsoft365订阅密钥

Microsoft 微软 活动6天 office365家庭版microsoft365订阅密钥

235元起

自助挂号应用服务

自助挂号应用服务

15000元起

SANGFOR 深信服科技 存储虚拟化双活软件V6.0

SANGFOR 深信服科技 存储虚拟化双活软件V6.0

29000元起

猎寻 手机信息采集系统1.0 -ZK5000(手机快速点验/手机检查仪)

猎寻 手机信息采集系统1.0 -ZK5000(手机快速点验/手机检查仪)

38800元起

Microsoft 微软 office专业版永久激活码office2019增强版终身版outlook密钥

Microsoft 微软 office专业版永久激活码office2019增强版终身版outlook密钥

249元起

Microsoft 微软 Office2016小型企业版 MAC专用

Microsoft 微软 Office2016小型企业版 MAC专用

149元起

黑马校对软件v22.0国产化平台服务器版6亿字技术支持私有化部署服务

黑马校对软件v22.0国产化平台服务器版6亿字技术支持私有化部署服务

170000元起

微软在线发 microsoft365家庭版续费新订office365密钥OfficePLUS会员 Microsoft365家庭版 30月 密钥-在线直发咚咚聊天窗口领取

微软在线发 microsoft365家庭版续费新订office365密钥OfficePLUS会员 Microsoft365家庭版 30月 密钥-在线直发咚咚聊天窗口领取

528元起

Microsoft 微软 365家庭版个人版正版密钥Office365永久激活2021Mac

Microsoft 微软 365家庭版个人版正版密钥Office365永久激活2021Mac

暂无报价

京东 金山麒麟WPS办公软件V11

京东 金山麒麟WPS办公软件V11

暂无报价

Microsoft 微软 MAC专用办公软件office2019永久版

Microsoft 微软 MAC专用办公软件office2019永久版

259元起

华三(H3C) SecPath F100-BAS AV 防病毒 License,3年

华三(H3C) SecPath F100-BAS AV 防病毒 License,3年

6904元起

卡巴斯基(kaspersky)网络解决方案中小企业版杀毒软件1服务器10台PC三年升级

卡巴斯基(kaspersky)网络解决方案中小企业版杀毒软件1服务器10台PC三年升级

3990元起
18评论

  • 精彩
  • 最新
  • 我想要群晖篇的[捂脸]

    校验提示文案

    提交
    啥? 群晖开docker也一样用的啊

    校验提示文案

    提交
    收起所有回复
  • 看到JAV_output就懂了 [赞一个]

    校验提示文案

    提交
    JAV_output可以用机翻小助手生成字幕

    校验提示文案

    提交
    收起所有回复
  • 我也想要群晖篇的[捂脸]
    菜鸡表示看不懂!

    校验提示文案

    提交
    群晖安装两个docker一样用的

    校验提示文案

    提交
    收起所有回复
  • 大佬,我用报这个错,能看看嘛

    Traceback (most recent call last>:
    File "/chronos/scripts/sub/sub.py", line 197, in
    jsonobj = json.loads(req>
    File "/usr/local/lib/python3.7/json/__init__.py", line 348, in loads
    return _default_decoder.decode(s>
    File "/usr/local/lib/python3.7/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0>.end(>>
    File "/usr/local/lib/python3.7/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value> from None
    json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0>

    校验提示文案

    提交
    这个是我api填错了,改正后,自动跳过了我的现有文件夹,导致报错。求助大佬!

    校验提示文案

    提交
    默认不查现有资源的啊,新电影才会查找

    校验提示文案

    提交
    收起所有回复
  • emby也是否可用?

    校验提示文案

    提交
    没用过,不知道有没有API,应该可以的吧

    校验提示文案

    提交
    收起所有回复
  • 大神,这个保持什么原因啊?

    File "/chronos/scripts/sub/sub.py", line 35
    dirlist=[]
    ^
    IndentationError: expected an indented block

    校验提示文案

    提交
    缩进错误,自己排查下

    校验提示文案

    提交
    收起所有回复
  • 大佬,我这个chronos总是不正常

    校验提示文案

    提交
    那就换个方式比如cron

    校验提示文案

    提交
    收起所有回复
  • log显示ok。但是没有任何输出,这样是对的吗?大佬 [脸红]

    校验提示文案

    提交
  • 能编程的都是厉害的大神

    校验提示文案

    提交
  • 大佬,如何解决手机端字幕不同步问题。拖动进度条字幕就错乱了

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
65
扫一下,分享更方便,购买更轻松