本文最后更新于 454 天前,其中的信息可能已经有所发展或是发生改变。
前言:我们通过BT下载的影视资源经常会遇到不带字幕的情况,Jellyfin自带只有一个Open Subtitles的字幕插件,对中文影视和字幕匹配率很低,这次就几个非常强大字幕插件,完成99.9%的影视字幕自动下载和生成!(Jellyfin和Emby都可以使用哦)
在安装插件前,推荐先将官方的插件库(Jellyfin Stable)地址更换为更快的官方镜像地址,可以在官方镜像列表网站找到:https://repo.jellyfin.org/files/plugin/manifest-stable.json?mirrorlist
MeiamSubtitles
热门影视字幕下载
项目地址
https://github.com/91270/MeiamSubtitles
介绍
MeiamSubtitles是一款github高达1.4k收藏的中文字幕插件,这款插件能够自动从迅雷影音和射手网两大渠道匹配字幕,自动下载,亲测能覆盖绝大多数国内外热门的影视剧。
安装使用
这里介绍jellyfin的安装方式,其它方式参考项目文档,下同
在Jellyfin控制台打开插件-存储库,点击加号
填写存储库的URLhttps://github.com/91270/MeiamSubtitles.Release/raw/main/Plugin/manifest-stable.json,再随便起个名字
返回插件-目录,需要加载一会,就可以在里面找到MeiamSubtitles
第一个是迅雷影视搜索,第二个是射手网,点击安装即可
回到媒体库设置,选择你需要自动匹配的媒体库进行设置
确认字幕下载语言选择Chinese(繁体和香港会被自动勾选),然后在下面勾选MeiamSub的两个下载器,在下面的字幕下载规则选只下载完美匹配的字幕,跳过带内嵌字幕的视频避免下载多余字幕
之后插件会按照计划任务中的下载缺少的字幕的时间配置运行自动下载
后续也可以在媒体库中手动通过此插件执行搜索下载
Danmu
动漫剧集弹幕下载
项目地址
Jellyfin: https://github.com/cxfksword/jellyfin-plugin-danmu
Emby: https://github.com/fengymi/emby-plugin-danmu
介绍
你绝对想不到,私有化部署的媒体中心居然也能看弹幕?!众所周知,看番没有弹幕总感觉少点什么,这下舒服了。
安装使用
和刚才一样,在插件存储库中添加此插件的地址,在目录中安装
国内加速:https://mirror.ghproxy.com/https://github.com/cxfksword/jellyfin-plugin-danmu/releases/download/manifest/manifest_cn.json
国外访问:https://github.com/cxfksword/jellyfin-plugin-danmu/releases/download/manifest/manifest.json
在插件设置中勾选想要的弹幕来源网站,同时勾选最下方的同时生成ASS格式弹幕
因为默认生成的是xml格式弹幕文件,只有特定播放器才支持,强烈推荐国内大佬开发的Switchfin,而同时生成ASS格式可以让Jellyfin等播放器也支持,但缺点是ass弹幕和字幕观看时只能二选一
【可选】之后我们可以配置自动扫描匹配弹幕的任务,默认是关闭的(因为自动匹配率低)
由于弹幕是从各大视频网站匹配番剧名称的,而不是themvdb-id,因此匹配不是很精准,一般在番剧导入后手动搜索选择弹幕
MetaTube
不可描述电影刮削插件
项目地址
https://metatube-community.github.io/wiki/plugin-installation/
介绍
Jellyfin等一众媒体库默认使用TMDb、TvDb来匹配刮削影视信息,这两个库里是没有不可描述影视信息的,那么除非我们下载的资源就带有做种者刮削好的信息,否则媒体库会很难看。
而这个插件正是通过一些专门的信息库完美解决了这一问题,虽然它并没有匹配字幕的功能,但是他可以自动为有字幕的电影封面加上字幕icon的功能,甚至还有人脸识别,因此也在此处介绍
安装使用
通过docker安装metatube服务端,推荐与jellyfin在同一个docker网络中(替换${xx}内容为你的)
metatube:
image: metatube/metatube-server:latest
container_name: metatube
restart: unless-stopped
ports:
- ${对外的端口}:8080
depends_on:
- postgres
environment:
- TZ=Asia/Shanghai
volumes:
- ${配置存放路径}/metatube/run:/var/run
command: -dsn "postgres://metatube:metatube@/metatube?host=/var/run/postgresql" -port 8080 -token "${定义一个你的token}" -db-auto-migrate -db-prepared-stmt
postgres:
image: postgres:15-alpine
container_name: metatube-postgres
restart: unless-stopped
environment:
- TZ=Asia/Shanghai
- POSTGRES_USER=metatube
- POSTGRES_PASSWORD=metatube
- POSTGRES_DB=metatube
volumes:
- ${配置存放路径}/metatube/db:/var/lib/postgresql/data
- ${配置存放路径}/metatube/run:/var/run
启动服务端后在Jellyfin插件库中添加存储库并在目录中安装
国内加速:https://cdn.jsdelivr.net/gh/metatube-community/jellyfin-plugin-metatube@dist/manifest.json
国外使用:https://raw.githubusercontent.com/metatube-community/jellyfin-plugin-metatube/dist/manifest.json
插件配置中填写刚才部署的服务端地址和token,注意在手动搜索匹配时展示图片会使用metatube的地址,所以一定要填写metatube的外部访问地址,至少是内网地址,https的公网地址最好
由于这类电影基本都是外语,我们还可以给插件设置内容简介翻译功能,支持Baidu/Google/OpenAi
百度个人每月有50万字的免费额度,可以自行申请:https://api.fanyi.baidu.com/api/trans/product/desktop?req=detail , 其它则需要有科学上网的能力
最后也是在计划任务中配置好定时运行即可
Subgen (终极大杀器)
本地AI翻译字幕
项目地址
https://github.com/McCloudS/subgen
介绍
上面介绍的插件虽然能匹配大部分热门的影视字幕,但是前提是依赖的字幕网站中有别人制作上传过的字幕,像一些冷门的影视全网都搜不到字幕这时候怎么办呢,那就轮到高科技大炮“AI”上场了!
我们熟悉的OpenAI虽然不干人事,对国内越来越不友好,但是OpenAI在此之前开源了一个非常牛逼的项目Whisper,是一个多语言语音识别模型,尤其对英语的识别准确率极高,之后又有大佬使用更高效的CTranslate2对其重新实现,生成了faster-whisper模型,比whisper要快4倍!而且内存占用更小,以至于目前家用平台即使没有独显,也能使用它通过cpu完美运行本地音频转录。
然后现在要介绍的这位国外McCloudS大佬为了自己看视频方便,随手搓了这个项目,将faster-whisper与jellyfin等媒体应用集成,自动完成字幕生成(subtitle generate)
安装使用
还是docker-compose部署
subgen:
container_name: subgen
tty: true
image: mccloud/subgen
environment:
- "WHISPER_MODEL=medium" #实测cpu使用medium即可,如果性能不够可以试试small
- "WHISPER_THREADS=3" #并发线程数
- "PROCADDEDMEDIA=True" #是否在jellyfin新增媒体时触发
- "PROCMEDIAONPLAY=True" #是否在jellyfin媒体播放时触发
- "NAMESUBLANG=chi" #需要生成的字幕文件语言后缀
- "SKIPIFINTERNALSUBLANG=chi" #是否跳过已有中文字幕的视频
- "SKIPIFEXTERNALSUB=True" #是否跳过带内嵌字幕的视频
- "SKIP_IF_AUDIO_TRACK_IS=chi" #跳过中文音频的视频
- "JELLYFINTOKEN=你的jellyfin token(控制台-API密钥-新增)"
- "JELLYFINSERVER=http://jellyfin:8096" #你的Jellyfin地址,同个容器网络填写容器名+端口
- "WEBHOOKPORT=9000" #服务端口
- "CONCURRENT_TRANSCRIPTIONS=2" #同时转录的视频数
- "WORD_LEVEL_HIGHLIGHT=False" #没啥用
- "DEBUG=True" #开启DEBUG日志,实测无效要改源码
- "USE_PATH_MAPPING=False" #开启重映射
- "FORCE_DETECTED_LANGUAGE_TO=chi" #强制指定转录语言
- "TRANSCRIBE_OR_TRANSLATE=transcribe" #transcribe可以实现英文转中文
- "TRANSCRIBE_DEVICE=cpu" #使用硬件,有独显可以换成gpu
- "CLEAR_VRAM_ON_COMPLETE=True" #开启垃圾收集
- "MODEL_PATH=/subgen/models" #模型保存路径,对应下面的映射
- "UPDATE=True" #是否自动从git库更新程序,一些最新更改可能没在docker镜像中,比如最近我刚建议大佬开放的vad参数,也可以自己指定
- "APPEND=False" #在字幕结尾添加whisper文案
- "USE_MODEL_PROMPT=True" #使用自定义提示词
- "CUSTOM_MODEL_PROMPT=你好,欢迎来到我的讲座。" #自定义提示词,如果你懂提示词优化的话
- "LRC_FOR_AUDIO_FILES=True" #支持歌曲LRC歌词文件生成
- "CUSTOM_REGROUP=cm_sl=84_sl=42++++++1" #不懂,应该是优化字幕格式的
- "SUBGEN_KWARGS={'vad': True,'prefix': '对,没错,继续。'}" #通过vad避免幻听和提示前缀避免变回英文
volumes:
- ${你的媒体库所在目录}:/media #映射目录路径要保持一致(/media:/media),否则需要配置重映射
- ${配置保存目录}/subgen/models:/subgen/models #模型目录
#- ${CONFIG_PATH}/subgen/subgen.py:/subgen/subgen.py #如果你要修改程序则指定路径
ports:
- 40221:9000
通过Jellyfin插件目录安装自带的Webhook插件,重启Jellyfin
添加一个通用钩子,填写subgen服务的地址,并勾选Item Add(媒体添加)和Playback Start(媒体播放)两个事件
再勾选Movies Episodes Season Series等你要生成字幕的媒体类型,实测电视剧集类型也是Movies,建议都勾上吧
最后再添加一个请求头: Content-Type application/json,保存即可
然后我们随便播放一个Jellyfin中的视频,看subgen日志是否成功触发,看到带'/jellyfin'的日志记录说明成功,比如下面是因为内嵌字幕所以跳过的日志:
INFO:root:/media/movie/Rebel Moon - Part One A Child of Fire (2023)/Rebel Moon - Part One A Child of Fire (2023) WEBDL-2160p HDR.mkv already has an internal subtitle we want, skipping generation
INFO:root:Metadata refresh queued successfully.
INFO:root:Metadata for item 4573c2b5fa21675fbc7e2c490540ca72 refreshed successfully.
INFO: 172.20.0.7:46548 - "POST /jellyfin HTTP/1.1" 200 OK
成功触发后,半小时的视频差不多10分钟可以生成好一个字幕,文件带有subgen后缀
由于whisper并没有官方支持英语翻译为别的语种,模型训练语料基本三分之二都是英语,所以会出现有些片段变回英文的情况,大家可以自行研究下模型参数调优,或者删除重新生成(挖个坑,我正在开发通过其他翻译接口来翻译英文转录字幕的方式,如果测试效果会开源出来)
总结
总之,通过上面介绍的几个插件,Jellyfin几乎可以胜任任何类型的适配字幕匹配了,这才是科技该有的样子啊,Fucking closed-source!
欢迎关注我的小红书账号,持续分享更多NAS最佳实践:
4384174891 赛博蓝猫
