自动化中文字幕下载。

716 b84d484ef9 修复 subhd 的下载之后,匹配视频错误的问题 %!s(int64=4) %!d(string=hai) anos
.github 31b5f601d7 Update issue templates %!s(int64=4) %!d(string=hai) anos
AnimeFolder af34006cfe 修改支持 Series 的自动化下载 %!s(int64=4) %!d(string=hai) anos
DesignFile 6fa1ec4a7c 修复 rod browser 泄露,更新 README.md %!s(int64=4) %!d(string=hai) anos
MovieFolder af34006cfe 修改支持 Series 的自动化下载 %!s(int64=4) %!d(string=hai) anos
SeriesFolder af34006cfe 修改支持 Series 的自动化下载 %!s(int64=4) %!d(string=hai) anos
common 01cbd4602f 增加并发数设置 %!s(int64=4) %!d(string=hai) anos
interface 78cb76d965 重构 zimuku 把下载字幕 30天限期调整到最上层 %!s(int64=4) %!d(string=hai) anos
mark_system 14cb528746 添加、修改 TODO %!s(int64=4) %!d(string=hai) anos
model b84d484ef9 修复 subhd 的下载之后,匹配视频错误的问题 %!s(int64=4) %!d(string=hai) anos
movie_helper d8f5e30e11 如果电影发布的时间距现在有2年了,那么如果发现它已经下载过字幕了,就没必要继续下载更新字幕了 %!s(int64=4) %!d(string=hai) anos
series_helper 01cbd4602f 增加并发数设置 %!s(int64=4) %!d(string=hai) anos
sub_parser a505c5d967 解决压缩包内文件名称编码问题,以及字幕文件读取编码问题,可能还会遇到坑,再议 %!s(int64=4) %!d(string=hai) anos
sub_supplier b84d484ef9 修复 subhd 的下载之后,匹配视频错误的问题 %!s(int64=4) %!d(string=hai) anos
videofolder 6f78c1e351 添加 Dockerfile,注意 cgo 的问题 %!s(int64=4) %!d(string=hai) anos
.gitignore 3a01f46ef8 正在写 %!s(int64=4) %!d(string=hai) anos
Dockerfile caa284d9dd 搞定 docker 下使用 chrome %!s(int64=4) %!d(string=hai) anos
README.md ac7a483fe8 update README.md %!s(int64=4) %!d(string=hai) anos
config.yaml.sample 01cbd4602f 增加并发数设置 %!s(int64=4) %!d(string=hai) anos
downloader.go b84d484ef9 修复 subhd 的下载之后,匹配视频错误的问题 %!s(int64=4) %!d(string=hai) anos
downloader_test.go 769392cbc0 修复 go-rod 写固定远程调用 browser 的问题 %!s(int64=4) %!d(string=hai) anos
go.mod 5d1b6bd087 修复连续剧下载的bug %!s(int64=4) %!d(string=hai) anos
go.sum 5d1b6bd087 修复连续剧下载的bug %!s(int64=4) %!d(string=hai) anos
main.go 01cbd4602f 增加并发数设置 %!s(int64=4) %!d(string=hai) anos

README.md

ChineseSubFinder

本项目的初衷仅仅是想自动化搞定限定条件中文 字幕下载。

开发中,可能有不兼容性的调整(配置文件字段变更)

最新版本 v0.5.x 支持连续剧字幕下载

Why?

注意,因为近期参考《高阶教程-追剧全流程自动化 | sleele的博客》搞定了自动下载,美剧、电影没啥问题。但是遇到字幕下载的困难,里面推荐的都不好用,能下载一部分,大部分都不行。当然有可能是个人的问题。为此就打算自己整一个专用的下载器。

手动去下载再丢过去改名也不是不行,这不是懒嘛...

首先,明确一点,因为搞定了 sonarr 和 raddarr 以及 Emby,同时部分手动下载的视频也会使用 tinyMediaManager 去处理,所以可以认为所有的视频是都有 IMDB ID 的。那么就可以取巧,用 IMDB ID 去搜索(最差也能用标准的视频文件名称去搜索嘛)。

功能

支持的部署方式

  • docker,见 How to use
  • Windows,需要去 Release 下载,见 How to use Windows 可以自行编译即可

支持的视频分类

类型 是否支持 备注
电影 已经支持,通过 IMDB、或者文件名进行搜索
连续剧 已经支持,必须依赖 tvshow.nfo 中的 IMDB ID
动画 - 待定

支持的字幕下载站点

  • zimuku
  • subhd
  • shooter
  • xunlei

优先级

网站字幕优先级别暂定 :zimuku -> subhd -> xunlei -> shooter

支持的视频格式

  • mp4
  • mkv
  • rmvb
  • iso

字幕格式优先级

暂时没打算实现

字幕语言类型优先级

  • 双语 -> 单语种
  • 简体 -> 繁体

How to use

使用本程序前,强烈推荐使用 emby 或者 tinyMediaManager 对你的视频进行基础的削刮,整理好视频的命名,否则你自行命名连续剧是无法进行识别自动下载的。

配置建议

Threads

目前测试,设置到 6 ,群晖918+ 8G 内存,是性能比较极限的数值。建议设置到 4 比较合适。太低就很慢,因为进行了大量的网络查询(依赖 IMDB API 以及各个字幕网站的查询接口)。太高的设置,这个看你的性能,也别太凶猛,不然被 ban IP。

EveryTime

其实也无需经常扫描,按在下现在的使用情形举例。每天上午7点30群晖自动开机,然后本程序自动启动。设置 12h 的间隔,晚上回家吃完饭很可能电影剧集更新,正好观看。(后续考虑给出多个固定时间点的字幕扫描触发功能)

SaveMultiSub

如果你担心本程序的自动选择最佳字幕的逻辑有问题(现在这个选择的逻辑写的很随意···),那么建议开启这个 SaveMultiSub: true。这样在视频的同级目录下会出现多个网站的 Top1 字幕。

连续剧如何搜索字幕

连续剧字幕自动下载的功能严重依赖于 IMDB ID,所以会自动去每个剧集的目录中找 tvshow.nfo 这个文件,这个文件是 emby 或者 sonarr 自动生成的。

如果你的剧集没有经过 emby 或者 TMM 的整理,那么抱歉,本功能将无法正常使用!

推荐的目录结构

目录结构如下图:

可以看出,下面的目录名称是两个程序混合削刮的。后面带有 (年份)是之前手动下载的连续剧然后经过 TMM 削刮的,纯英文文件夹名称的是 sonarr 自动下载的连续剧

05

06

每一集的命名样式

如下图,如果你的连续剧被 emby 或者 TMM 整理过,那么就有类似的命名样子。那么连续剧的自动搜索功能才能正确生效,否则无法正常使用。

07

使用 docker-compose 部署

编写以下的配置文件,注意 docker-compose 文件需要与本程序的 config.yaml 配套,特别是 MovieFolder、SeriesFolder 。

version: "3"
services:
  chinesesubfinder:
    image: allanpk716/chinesesubfinder:v0.5.0
    volumes:
      - /volume1/docker/chinesesubfinder/config.yaml:/app/config.yaml
      - /volume1/docker/chinesesubfinder/logs:/app/Logs
      - /volume1/Video/电影:/app/MovieFolder
      - /volume1/Video/连续剧:/app/SeriesFolder
    environment:
      TZ: Asia/Shanghai
    restart: unless-stopped

然后把 config.yaml.sample 复制一份,重命名为 config.yaml,内容如下(每个配置啥意思见《配置文件解析》)

UseProxy: false
HttpProxy: http://127.0.0.1:10809
EveryTime: 12h
Threads: 4
DebugMode: false
SaveMultiSub: false
MovieFolder: /app/MovieFolder
SeriesFolder: /app/SeriesFolder

配置文件解析

把 config.yaml.sample 复制一份,重命名为 config.yaml,内容如下:

UseProxy: false
HttpProxy: http://127.0.0.1:10809
EveryTime: 6h
Threads: 4
DebugMode: false
SaveMultiSub: false
MovieFolder: X:\电影
SeriesFolder: X:\连续剧
  • UseProxy,默认false。是否使用代理,需要配合 HttpProxy 设置
  • HttpProxy,默认 http://127.0.0.1:10809。http 代理这里不要留空,不适应就设置 UseProxy 为 false
  • EveryTime,默认 6h。每隔多久触发一次下载逻辑。怎么用参考,robfig/cron: a cron library for go (github.com)
  • Threads,并发数,最高到 20 个。看机器性能和网速来调整即可。
  • DebugMode,默认 false。调试模式,会在每个视频的文件夹下,新建一个 subtmp 文件夹,把所有匹配到的字幕都缓存到这个目录,没啥事可以不开。开的话就可以让你手动选择一堆的字幕啦。
  • SaveMultiSub,默认值 false。true 会在每个视频下面保存每个网站找到的最佳字幕(见下面《如何手动刷新 emby 加载字幕》,会举例)。false ,那么每个视频下面就一个最优字幕。
  • MovieFolder,填写你的电影的目录
  • SeriesFolder,填写你的连续剧的目录

如何手动刷新 emby 加载字幕

首先,本程序会自动下载字幕文件,如下图:

这里演示开启了 SaveMultiSub: true ,也就是把每个网站最优的字幕都存下来

如果没有开启 SaveMultiSub: false,.那么就是下载一个。后续的刷新操作一样

00

然后,去 emby 对应影片的详情页面,点击“更多”。如下图

01

然后点击“刷新元数据”

02

注意,这里“搜索缺少的元数据”,没必要全刷新

03

直接播放影片,点击 “CC” 这个按钮是不是看到对应的字幕列表了。

04

版本

  • v0.4.x 支持设置并发数 -- 2021年6月18日
  • v0.3.x 支持连续剧字幕下载(连续剧暂时不支持 subhd) -- 2021年6月17日
  • v0.2.0 docker 版本支持 subhd 的下载了,镜像体积也变大了 -- 2021年6月14日
  • 完成初版,仅仅支持电影的字幕下载 -- 2021年6月13日

TODO

  • 字幕的风评(有些字幕太差了,需要进行过滤,考虑排除,字幕组,关键词,机翻,以及评分等条件
  • 加入 Web 设置界面(也许没得很大的必要···)
  • 提供 API 接口,部署后,允许额外的程序访问(类似 emby 等)获取字幕

设计

基础字幕搜索流程

限定条件

  • 电影、连续剧(后续会考虑:动画)

  • 只搜索中文字幕

  • 必要条件,视频文件经过削刮器处理

  • 搜索优先级

    • 经过削刮器处理
    • 视频经过削刮器(tinyMediaManager、Emby)处理,视频同级目录有 *.nfo 文件(Kodi 格式的)
    • 使用 Raddarr 下载的电影, Metadata 设置 Emby,存在一个 movie.xml 文件
    • 以上两个文件任意一个能读取到 IMDB ID
    • 通过视频文件的唯一ID(针对不同搜索方式不同)进行搜索
    • 视频文件名
  • 支持的网站

    • subhd(根据优先级)

    • zimuku(根据优先级)

    • shooter(通过视频文件的唯一ID)

    • 迅雷(通过视频文件的唯一ID)

感谢

感谢下面项目的帮助