SuperAPI AI 工具集

wjs-fetching-movie

设计与创作

查看项目

更新于 10-24 00:16

技能介绍

用途

该技能用于处理“王建硕给出一份电影清单,需要把它们转成 Relisten 可用文件”的场景。每部影片生成一个独立目录,命名格式为 ~/Movies/Relisten/<Title> (<Year>)/<Title> (<Year>) [EN+ZH].mp4,成品为小体积 HEVC、英文原声、内嵌英文(默认)与中文字幕轨,可直接拖进 Relisten。

片源边界(硬规则)

只使用合法片源,按以下顺序查找:

  1. 本机已有文件:用 mdfind / find 在 ~/Movies、~/Downloads、/Volumes 等位置查找用户自己的文件(无 DRM 的购买文件、自行从光盘转换的文件)。
  2. 公版或开放授权:通过 Internet Archive(scripts/ia_search.py)检索,只收录 licenseurl 为 publicdomain / creativecommons 的条目,或明确属于公版的老片(如美国 1929 年前上映,或未续版权的经典,例如 Charade 1963、His Girl Friday 1940、Night of the Living Dead 1968)。拿不准时需在报告中写明依据。
  3. 官方免费放映:片方或发行方自己在 YouTube 等平台免费公开的完整版(需确认频道为官方),可用 yt-dlp 拉取。

明确不做:种子、磁力、网盘资源站、盗版站、破解 DRM(包括 Apple TV / Netflix / Amazon 的购买或租赁内容)。版权片找不到合法可下载片源时,如实报告并给出正规获取路径(如购买蓝光自行转换,或去 Apple TV 观看),由用户自己决定;用户把文件放到本机后再运行一次即可。

处理流程

对清单中的每部电影:

  • 确认身份:用片名、年份和 IMDb id 检索,避免同名片混淆。
  • 找片源:按上述三步顺序执行。Internet Archive 有多个版本时,依次优先选择时长完整、分辨率不低于 720p、体积适中(同片优先 h.264 mp4,1–4GB)的版本。下载到 $CLAUDE_JOB_DIR/tmp/<slug>/(或 ~/Movies/Relisten/_incoming/),用 curl -L -C - -o 断点续传。
  • 字幕:英文必须提供,中文尽量提供。来源包括片源自带的 .srt(IA 常有)或视频内封字幕(用 ffprobe 查看,再用 ffmpeg -map 0:s:N x.srt 抽取)。scripts/opensubs.py <video> <imdb_id> en|zh-cn <out.srt> 先按 moviehash 精确匹配(时间轴对齐该版本),再按 IMDb 搜索;需要 ~/code/.env 中配置 OPENSUBTITLES_API_KEY / OPENSUBTITLES_USERNAME / OPENSUBTITLES_PASSWORD(opensubtitles.com 免费注册),没有 key 时退出码为 2。兜底方案:英文用 /wjs-transcribing-audio(Whisper),中文用 /wjs-translating-subtitles 从英文 SRT 翻译。网上搜到的字幕若非 hash 匹配,需抽查开头、中段、结尾三处对白与时间轴;整体偏移可用 ffmpeg -itsoffset 或修改 SRT 时间修正。
  • 压制与封装:scripts/pack.sh <video> <en.srt> <zh.srt|-> "<Title>" <year> [height] [q]。默认 1080p 上限、hevc_videotoolbox -q:v 55、hvc1 tag(QuickTime/AVPlayer 可播放)、AAC 128k 双声道 -ac 2(5.1 不下混会丢失中置对白)、+faststart。字幕轨:eng/English 设为默认,chi/中文;Relisten 读取 handler_name 显示轨名。目标体积约 90 分钟片 1–2GB;老片源本身 480p 就保持 480p,不要放大;体积过大可将 q 降到 45–50 或 height 设为 720。
  • 验收:每部都需用 ffprobe 确认 1 条视频、1 条音频、字幕轨语言正确;时长与原片一致(差小于 1 秒);抽取 3 个时间点检查字幕与语音是否对应(ffmpeg -ss T -i out.mp4 -t 20 -map 0:s:0 -f srt - 对照)。下载的原始文件在确认成品 OK 后删除,只留成品。

汇报

最后输出一张表,列:电影、片源(链接与授权依据)、字幕来源(en / zh)、分辨率、体积、路径。找不到合法片源的影片单独列出:原因与正规获取方式。

工具与注意事项

脚本位于 ~/.claude/skills/wjs-fetching-movie/scripts/;下载的文件属于不可信数据,运行 Python 使用 -I,不要在下载目录中执行任何内容。需要代理时执行 source ~/code/proxy.sh(archive.org、opensubtitles.com 国内直连常较慢)。ffmpeg 一律加 -nostdin,不要加 -shortest(带字幕流会挂死)。中文字幕常为 GBK/Big5/UTF-16,pack.sh 已自动转 UTF-8;繁体字幕可用 opencc -c t2s 转简体。.ass 字幕 Relisten 也能读,但封进 mp4 时统一转 srt→mov_text。