记录在 macOS 上自动追番的方案。
下载源选择
自动追番需要下载源,我选择的是 蜜柑计划 ,原因如下:
- 页面交互良好,前端体验好于纯数据库型资源网站。
- 按季度更新动画信息,每季度动画独立成页,方便检索。
- 会放出未开播动画页,方便我确定开始扫番的时间节点。
- 可直观的看到动画海报,快速避开不喜欢的类型。
由于蜜柑计划提供 RSS 订阅服务,所以这里需要一个方案来自动下载 RSS 订阅中的种子。
自动下载种子
这次我选择的是FlexGet + Transmission的方案。
安装 FlexGet
- 安装 Homebrew。
- 安装 Python3:
brew install python- 安装 pipx:
brew install pipxpipx ensurepathsource ~/.zprofile- 安装 FlexGet:
pipx install flexget- 进入目录:
mkdir -p ~/.flexget- 创建配置文件:
nano ~/.flexget/config.yml
接下来只需要在配置文件中填入订阅内容即可,RSS 订阅链接去蜜柑计划里找就行,基本格式如下:
# 不含过滤关键词
download_ANi_我推的孩子:
rss: https://mikanani.me/RSS/Bangumi?bangumiId=3407&subgroupid=583
accept_all: yes
download: /Users/wuzhi/Downloads
# 含过滤关键词
download_MiaoMeng_直至魔女消逝:
rss:
regexp:
accept:
- 简
download: /Users/wuzhi/Downloads
接下来验证一下配置是否成功。
# 验证命令
flexget check
# 若输出如下内容则配置无误
Everything went fine. Ready to start for real.
# 手动运行一次 FlexGet
flexget execute
接下来设置自动运行 FlexGet,实现自动化。
# 创建目录
mkdir -p ~/Library/LaunchAgents
# 创建任务文件
nano ~/Library/LaunchAgents/com.flexget.rss.plist
# 粘贴以下内容到文件(你可以每 30 分钟跑一次任务)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.flexget.rss</string>
<key>ProgramArguments</key>
<array>
<string>/Users/wuzhi/.local/bin/flexget</string>
<string>execute</string>
</array>
<key>StartInterval</key>
<integer>3600</integer> <!-- 每3600秒 = 每小时运行一次 -->
<key>RunAtLoad</key>
<true/>
<key>StandardOutPath</key>
<string>/Users/wuzhi/flexget.log</string>
<key>StandardErrorPath</key>
<string>/Users/wuzhi/flexget_error.log</string>
</dict>
</plist>
# 加载任务
launchctl load ~/Library/LaunchAgents/com.flexget.rss.plist
# 如果修改过配置,想重新加载
launchctl unload ~/Library/LaunchAgents/com.flexget.rss.plist
launchctl load ~/Library/LaunchAgents/com.flexget.rss.plist
种子自动下载
前面已经通过 FlexGet 将种子自动下载到同一文件夹,接下来需要利用下载器完成种子下载,这里我选择 Transmission 。
我利用他的原因如下:
- 占用资源小
- 可监视文件夹自动下载
- 可以设置规则自动调整下载位置
Automator
单纯的完成下载并不优雅,所以这里使用 macOS 自带的自动化工具 Automator 对文件进行重命名,大部分刮削器都是以文件名来进行刮削,而直接下载的动画无法自动刮削的原因也在这里。
首先创建一个自动操作文稿,类型选择 文件夹操作,然后文件夹就选择动画下载完最后到的那个文件夹,这里就要求在文件未完成下载的时候文件不能进入该文件夹,否则会先触发改名。
然后设定变量的值,这里创建一个文本变量,名字随意,比如我这里创建的就是 文件信息。接下来运行 Shell 脚本,传递输入选择 做为自变量,这个脚本的目的只是获取文件名并往下传递。
basename "$1"
然后再运行一个 Shell 脚本,同样的传递输入选择 做为自变量,这个脚本的目的是对文件名信息提取并重组。
#!/bin/bash
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
file_name="$1"
# 获取文件基本名称
file_name=$(echo "${file_name%.*}")
# 喵萌奶茶屋定制格式
nekomoe=$(echo $file_name | egrep 'Nekomoe kissaten')
if [[ "$nekomoe" != "" ]]
then
file_name=$(echo $file_name | sed "s/\[[^][]*]//" | sed "s/\[//" | sed "s/\]//")
fi
# 替换集数格式、清除标签项
file_name=$(echo $file_name | sed -r "s/([0-9][0-9])v[1-9]/\1/" | sed -r "s/\[([0-9][0-9])\]/ - \1/" | sed "s/\[[^][]*]//g")
# 清除首位空格
file_name=$(echo $file_name | sed "s/^ //")
# 季度检测
quarter=$(echo $file_name | grep -E -o 'S[0-9][0-9] |S[0-9] |第[一二三四五六七八九十]季 | Season [0-9] ')
# 定义中文数字映射
declare -A chinese_num_map=(["一"]=1 ["二"]=2 ["三"]=3 ["四"]=4 ["五"]=5 ["六"]=6 ["七"]=7 ["八"]=8 ["九"]=9 ["十"]=10)
if [[ $quarter =~ 第?(.+)季 ]]; then
# 提取中文数字
chinese_num=${quarter:1:1}
num=${chinese_num_map[$chinese_num]}
# 补零格式化,1-9前面加0
if (( num < 10 )); then
num="0$num"
fi
# 替换“第X季”为“S0X”
file_name=$(echo "$file_name" | sed "s/第${chinese_num}季/S$num/")
quarter="S$num"
fi
if [[ "$quarter" =~ [[:space:]]*Season[[:space:]]*([0-9]+)[[:space:]]* ]]; then
num=${BASH_REMATCH[1]}
[[ $num -lt 10 ]] && num="0$num"
file_name=$(echo "$file_name" | sed -E "s/[[:space:]]*Season[[:space:]]*${BASH_REMATCH[1]}[[:space:]]*/S$num/")
quarter="S$num"
fi
set_area=$(echo "${file_name##*-}")
set_name=$(echo $set_area | sed "s/[ -]//")
if [[ "$quarter" != "" ]]
then
file_name=$(echo $file_name | sed "s/ -$set_area/E$set_name/")
else
file_name=$(echo $file_name | sed "s/ -$set_area/ S01E$set_name/")
fi
echo $file_name
然后再设定变量的值,这次再新建一个文本变量,这个变量用来储存文件名,名字只要和上边的不重复就行,比如我取的名字是 文件名,这样就得到了要重命名的文件名,接下来再回到文件的处理上。新建一个获得变量的值,选择 文件信息 变量,并在选项中 忽略此操作的输入。然后给访达项目重命名,选择 给单个项命名,名称 仅基本名称 至 文件名,这里的 文件名 就是我们之前设定的变量。接下来把重命名结束的文件送到下一个文件夹即可。
这个方法一次只能对一个文件处理,不过这个文件夹是下载后自动送文件进来的,所以一次确实只能进来一个文件。然后就是这个方法对所有内容都用 [] 包围的文件名无效,所以需要针对字幕组制作定制格式,可以参照我代码里的 喵萌奶茶屋定制格式。
动画观看
接下来是动画观看环节,需求有两个:刮削器、多端同步。所以我选择用Infuse
这个应用能够实现如下功能
- 自动对视频文件进行刮削。
- Apple 全平台客户端。
- 多端同步观看进度,只需将视频文件放在云盘中。
- 极佳的观看体验。


