豆瓣电影 Top 250 还缺哪几部?历届奥斯卡最佳影片收齐了吗?想补一补某位导演的作品,又该从哪里开始?
片库慢慢攒起来以后,我发现自己花在“核对”上的时间越来越多:打开一份榜单,查一个片名,再去片库搜有没有;遇到不同译名,还得确认是不是同一部。好不容易对完,榜单又更新了。收藏了很多电影,真正坐下来挑一部想看的,反而没有那么容易。
于是我做了 Emby 观影助手(Emby Companion),一款个人使用免费的原生 Mac 应用。它把我持续整理的影视榜单、TMDB 资料和自己的 Emby 媒体库放在一起:从榜单发现想看的作品,核对已经收了什么、还缺什么,再交给熟悉的播放器观看。
没有 Emby 服务器也可以用。 填上自己的 TMDB API Key,它就是一个按榜单、厂牌和人物找片的工具;连接 Emby 后,再加上入库核对、缺集检查和播放进度同步。
这篇文章先讲榜单和片库整理,再讲播放上的几个取舍和细节,最后聊聊这次全部交给 AI 写代码的经历。
写作说明: 本文使用 ChatGPT + Claude 辅助梳理结构、改写部分段落及润色表达,由我手动编辑、调整内容并完成配图,文中的项目经历、功能描述与事实由我核对。
先有榜单,才有这个应用
我最初想解决的,并不是再做一个播放器,而是让手里的榜单真正和自己的收藏发生联系。
榜单提供了很多挑片的角度:想补经典,可以从 IMDb、豆瓣 Top 250 开始;想顺着电影史往下看,可以逛影评人和导演票选;想找没那么熟悉的作品,可以换成电影节获奖名单。它们各有侧重,也比面对整个片库时漫无目的地翻找更有方向。
不只是一份 Top 250
这些片单是我用自己的定时脚本持续抓取、整理,再同步到 TMDB 上的。榜单配置和对应的片单编号公开在 emby-collection-sync 项目里,观影助手直接读取,用户不需要另外部署任何工具。
截至本文写作时,预置了 143 份片单,侧栏里按七个梯队和豆瓣分类榜单排列:
| 分组 | 包括 |
|---|---|
| 第一梯队 · 大众必看 | IMDb 电影 Top 250、IMDb 剧集 Top 250、豆瓣电影 Top 250 |
| 第二梯队 · 影史殿堂 | 《视与听》导演票选与影评人票选、AFI 百年百大电影、《纽约时报》21 世纪最佳电影与最佳剧集 |
| 第三梯队 · 国际大奖 | 奥斯卡最佳影片、戛纳金棕榈、威尼斯金狮、柏林金熊、BAFTA 最佳影片、金球奖最佳剧情片与音乐/喜剧片、独立精神奖、多伦多人民选择奖 |
| 第四梯队 · 影迷与名家 | Letterboxd Top 500、最受影迷喜爱 250 部、动画与纪录片 Top 250,以及 Roger Ebert 的“伟大电影” |
| 第五梯队 · 超大体量片单 | TSPDT 影史 1000 佳、《有生之年非看不可的 1001 部电影》、Criterion Collection |
| 第六梯队 · 独立厂牌 | A24、NEON、MUBI 的全部作品 |
| 第七梯队 · 口碑与趋势 | 豆瓣一周口碑电影、华语与全球口碑剧集、实时热门,以及 TMDB 热门与本周趋势 |
| 豆瓣分类榜单 | 电影按 28 个类型分出 Top 20、高分经典、冷门佳作、近期热门;剧集按大陆、美、英、日、韩、港、台等地区分类出高分经典、冷门佳作、近期热门 |
对我来说,分类榜尤其有用。想看科幻时,不一定只看综合榜里最有名的那几部,也可以看看科幻分类里的冷门佳作;换成纪录片、动画或某个地区的剧集,又是一条新的探索路线。
应用按不同方向把榜单分组放在侧栏,保留榜内排名,可以按地区、类型、年份、入库和观看状态筛选,豆瓣与 TMDB 评分并排显示。

把榜单变成自己的待补清单
连上并同步 Emby 后,每张海报会显示是否已入库,匹配依据是作品的 TMDB 编号和媒体类型,观看状态也会一起呈现。打开一个想补齐的榜单,筛选“未入库”,留下的就是这份榜单中还没有收藏的作品;筛选“未观看”,则可以从已经收好的片子里找下一部。

这让榜单不再只是“推荐我看什么”,还可以回答“这里面我已经有什么”。打开作品详情,又能反过来看到它被哪些榜单收录。偶然发现的一部电影,可能就这样把我带进另一份没逛过的片单。剧集还会按季对照 TMDB 的集数,查看哪些季度尚未收齐、各缺多少集。
榜单更新,自己的片单也能加进来
榜单配置来自线上,应用每天北京时间 9 点检查更新,关闭或休眠期间错过的检查,会在下次启动时补上。
预置范围之外,也可以粘贴 TMDB 片单链接导入。先预览片单内容,再设置侧栏名称和分组,之后就能和预置榜单一样浏览、筛选和核对入库。
如果你也想按榜单补片
不管用不用这个应用,按榜单整理片库这件事,我有几点体会:
- 从一份小榜单开始。 历届奥斯卡最佳影片不到 100 部,比一上来就挑战 IMDb Top 250 更容易坚持,也更快看到成果。
- 多用分类榜,少盯综合榜。 综合榜前列往往是比较熟悉的作品,分类榜里的冷门佳作,才是真正帮你发现新片的地方。
- 收藏和观看分开看。 已入库只说明“收了多少”,不说明“看了多少”。我更常用的其实是“已入库但未观看”,那才是今晚的片单。
从榜单继续逛,也可以换一种找片方式
厂牌:今天想看哪一种气质
除了榜单,首页还有 48 个厂牌与平台入口,分成电影厂牌、动画厂牌、欧美剧集和亚洲剧集四组,每组 12 个。
想看动画,可以从皮克斯、吉卜力、梦工厂出发;想找剧集,也可以沿着 HBO / Max、Netflix、Apple TV+ 或熟悉的亚洲平台往下逛。每个入口都有简介,作品墙同样支持筛选,并显示入库和观看状态。


搜索:从一部电影,走到一个人的作品
TMDB 搜索提供片名、人物、编号和合集四种入口。可以输入中文或原名、粘贴 TMDB / IMDb 编号与作品链接,也可以按电影系列名称找合集。片名留空时,则能浏览所选地区的热门影视。
我比较常用的是人物搜索。看完一部喜欢的电影,接着找导演或演员的其他作品,卡片上能看到已入库作品数量,点进去继续核对和浏览。作品详情还可以跳转豆瓣、IMDb 和 TMDB,方便查阅其他资料。应用右上角另有 Emby 媒体库搜索,支持中文拼音首字母查找。

浏览:让海报墙适合慢慢逛
用鼠标或方向键选择作品,按空格快速预览,回车打开详情,Esc 返回。
海报大小、深浅色都可以调;macOS 26 上可以用 Liquid Glass 外观,也能切回经典样式。界面支持简体中文、繁体中文和英文,片单、资料和海报语言也可以分别设置。

自己做应用,就能把这些细节一个个磨平
有了自己的应用之后,我开始回想看片时遇到的问题,一次调整一个流程。先说最大的一个取舍,再说几个反复修改过的细节。
不做播放器,也要把播放做好
播放是这个应用里取舍最多的部分。第一个决定是:不内置播放核心。
解码、HDR、杜比视界、字幕和音轨,Infuse、SenPlayer、VidHub 都已经做得很好。我再做一个,大概率只会更差,还得长期跟着维护。更重要的是,每个人都有自己用惯的播放器。所以我把应用的重心放在浏览和选片上,再把视频交给习惯的播放器。
如果只是把播放链接交给外部播放器,播放状态和进度不会自动同步回 Emby。我还需要把这个环节接起来:
- 交给播放器之前,先向 Emby 登记这次播放,播放期间定时报告,后台能看到“正在播放”,也会留下播放记录。
- 借助这些播放器支持的回调(x-callback-url),关闭播放窗口时把停下的位置带回来,再交给 Emby 按自己的规则保存续播位置或标记看完。换到其他设备的 Emby 客户端,也能接着看。
- 回调对不上这次播放或者播放器没有回传时,都不写入进度,也不凭空推算位置。
也有补不上的地方:进度只在关闭播放窗口时回传,直接退出播放器就收不到;播放器里的自动连播,也不在这种模式能控制的范围内。下面的“继续上集”,就是在这些回传记录的基础上,多给用户一个选择。
上集还剩几分钟,首页却已经推荐下一集
追剧时,我遇到过这样的情况:一集快结束了,有事先停止播放;第二天回来,Emby 已经把它标为看完,首页推荐下一集,但我其实还想补完剩下的几分钟。
完播判定取决于 Emby 服务器的设置,我不想让一个辅助工具去覆盖用户原来的规则,只希望它在有可靠记录时,多给我一个选择。
Emby 观影助手的做法是:
- 前面说的回传位置,会在本地按账号、具体分集和播放版本单独保存 30 天,即使 Emby 已将该集标记为看完,本机仍会保留这份回传记录。
- 首页已经推荐下一集时,如果本机保存了上一集可恢复的播放记录,点播放会提示具体分集和剩余时间。默认仍是“播放本集”,也可以选“继续上集”,从记录的位置接着看。
- 上一集可以跨季查找,并跳过特别篇。提醒本身不修改已看状态,也不调整 Emby 的完播判定配置。

分段文件:每一段各记各的
老电影和蓝光原盘常常分成几段,比如 CD1、CD2 或者 Part 1、Part 2。如果当成普通的多版本来处理,第一段看到的位置就可能被带到第二段,首页和详情页也会被一段一张卡片挤满。
- 识别 PART、CD、DVD、DISC 等常见写法。只看文件信息,片名里的“Part 2”(比如续集的名字)不会被误认成分段。
- 同一版本的各段合成一张卡片,首页“继续观看”也只占一张。
- 每一段的进度独立保存,普通的完整版本之间仍然同步进度。
实际用起来是这样的:在首页或详情页点一部分段电影,会弹出一个分段选择窗口,列出每一段和各自的进度。默认选中上次正在看的那一段,回车或点一下就从记录的位置续播;鼠标停在 PART、CD 这类标记上,还能看到原始文件名,方便确认是哪个文件。

这些问题单看都不大,可能一个月才碰到一次。但正是这些地方,决定了一个工具用起来是“还行”,还是“很舒服”。
我做判断,AI 写代码
上面这些细节,放在以前我大概不会去做。一个月才碰到一次的问题,花几天去写、去测,很难说服自己。现在写代码的成本降下来了,细节才真正值得去磨。
这个项目的所有代码都是 Codex 写的,包括测试和打包脚本,我没有写一行。我的工作是决定做什么、不做什么、做到什么程度,以及实际使用、挑毛病。
| 我负责 | AI 负责 |
|---|---|
| 产品定位和功能取舍 | 写代码、写测试 |
| 交互和视觉的细节要求 | 按要求实现、修 bug |
| 实际使用、发现问题 | 定位原因、给出方案 |
| 制定规则 | 按规则修改,并运行相关检查 |
比如“上集未看完”的提醒,最初默认选的是“继续上集”。后来实际点了几次,我觉得既然用户点的是下一集,就应该尊重这次操作,把“播放本集”放在前面并默认选中,“继续上集”留作另一个选择。
分段电影也是这样:既然用户已经选了具体分段,就按已有进度直接续播,不再弹一次“继续还是从头”的选择。单个弹窗看起来都合理,连着弹两次,操作就变得拖沓了。
AI 很擅长把一件事想得很全,但“什么可以不做”还是要人来定。
代码量不太能说明这件事做得好不好,我也很难把这段经历换算成“省了多少个月”。更实际的变化是:我可以把一条使用反馈交给 AI,得到一个能运行的版本,再亲自验证它是否真的更顺手。时间并没有消失,而是更多花在定义问题、核查实现和使用验证上。
管住 AI 的第一招:把反复出现的问题写成规则
同样的问题,光在对话里提醒,并不能保证下次不再出现。提醒到第三次,我就把它写进项目根目录的 AGENTS.md,Codex 每次开工前都会读。几条规则都来自很具体的问题:
- 加了新提示,只写中文。 英文和繁体界面要么漏掉,要么直接露出中文。于是有了“所有用户可见文案,三种语言同步维护”。
- 换了新方案,旧代码还留着“备用”。 没人用的开关、状态和辅助函数越积越多,下一次修改时 AI 还会被它们误导。于是有了“新方案替换旧实现后,清理不再使用的代码”。
- 文件越写越大。 AI 习惯往已有文件里继续加,最大的文件一度接近 2,000 行,改一处就顾此失彼。于是有了“单个源文件不超过 1,000 行,接近上限按职责拆分”。
光写下来还不够,能检查的就写成检查:一个脚本统计源文件行数,超过上限就报错;一组测试扫描所有界面文案,缺了哪种语言的翻译就不通过。把规则写成检查,更容易发现遗漏;检查覆盖不到的情况,仍要通过审查和实际使用来确认。
管住 AI 的第二招:让另一个 AI 来挑毛病
写代码的 AI 很难发现自己的问题。我的做法是:Codex 负责写,再让另一个 AI 助手(Claude)只读代码、不改代码,专门做审查,把结论交回给我判断。
它挑出来的问题,很多一说就懂,但自己天天用反而习以为常:
- 滚回去时,海报先闪一下。 海报墙往下滚、再滚回来,看过的海报会先闪一下灰色占位,再出现图片。原因是海报一滑出屏幕,图片就被丢掉;滚回来时,哪怕图片还在内存里,也要重新走一遍加载。改成先查内存,有就直接显示,来回滚动就不闪了。
- 鼠标划过海报墙,放大动画一顿一顿。 悬停时海报会轻轻放大,可鼠标快速划过一排,动画就明显发卡。原因是一张卡片放大,屏幕上几十张卡片都跟着重新计算一遍。改成每张卡片只管自己的状态,减少鼠标切换时无关卡片的重复计算,改善悬停响应。
- 筛选里的“全部”。 筛选条件一开始直接拿“全部”这两个中文字来比较,每次改筛选都照着写,慢慢散落到了几十处。中文界面一切正常,可一旦界面切到英文、按钮上显示的是 All,这些判断就对不上了,筛选会悄悄失效。最后统一改成程序内部的状态值,再写进规则,不许再拿显示文字做判断。
这些问题都不会让程序崩溃,写代码的 AI 自己测也很难发现,换一个专门审查的角色,能帮助我发现实现时遗漏的问题。
审查也会出错。有一次它列出“分段电影要连弹两个窗口”,说得有理有据,我回头一看,这个问题早就改好了,它用的是上一轮的结论;还有一次它说“点下一集总会先弹一个确认窗口”,可实际上只有上一集真的没看完时才会提醒,它把代码的判断条件读漏了。所以审查意见要回到当前代码和实际使用里核对,最终拍板的还是人。
审查也不只看代码。最近我常用 Gemini 4 Argon 看界面:把软件截图交给它,让它站在用户的角度挑毛病,比如信息层级清不清楚、按钮主次对不对、状态提示是否容易看懂。代码审查发现的是“写错了什么”,看截图发现的是“哪里用着别扭”,不少交互细节就是这样一点点补上的。
几点体会
- AI 降低的是写代码的成本,不是做判断的成本。 做什么、不做什么、体验怎么取舍,这些仍然要自己想清楚。想不清楚的时候,AI 只会把一个模糊的想法做得很复杂。
- 测试通过只是起点。 播放记录归属、分段进度隔离、语言覆盖这些规则都靠回归测试守着;但窗口、键盘和真实播放器的交互,仍然要自己上手用过才算数。
- 一个人也能做完整的工具了。 以前想给自己做一个家庭影音工具,光是把功能做出来就要耗掉大量业余时间,更别说把一个月才碰到一次的问题磨平。现在写代码不再是瓶颈,精力可以留给想清楚要什么,以及把细节一个个打磨好。
下载和接下来
Emby 观影助手个人非商业使用免费,应用本身闭源,安装包、使用说明和问题反馈都在 GitHub。
| 项目 | 说明 |
|---|---|
| 系统要求 | macOS 14 及以上,支持 Apple 芯片和 Intel Mac |
| TMDB | 需要 API Key,可免费申请,应用内提供申请指引 |
| Emby | 可选连接,用于核对入库状态和播放媒体库内容 |
| 语言支持 | 界面支持简体中文、繁体中文和英文;片单、影视资料与海报语言可分别设置 |
两个使用提醒:
- 看完先关闭播放窗口,不要直接退出播放器。 播完自动关闭或中途手动关闭都会回传进度;播放器一旦退出,回调就发不出来了。播放进度回传需要 SenPlayer 6.1.1、Infuse 8.4.7 或 VidHub 2.3.5 及以上版本。
- 首次打开请参照安装说明。 当前安装包使用本地签名,尚未经过 Apple Developer ID 签名和公证。确认来自项目 Releases 并尝试打开后,如被系统阻止,可到“系统设置 → 隐私与安全性”选择“仍要打开”。
它最适合喜欢按榜单找片、整理收藏、平时在 Mac 上挑片的人。连接 Emby 后,能把这些清单和自己的片库对起来;暂时没有服务器,也可以先把它当作榜单和 TMDB 浏览工具。应用不提供影视资源、服务器账号或第三方服务凭证。
接下来没有什么宏大的路线图,就是继续迭代和打磨:补充和优化榜单、把浏览和筛选做得更顺手、修掉大家遇到的问题。应用内支持检查更新,默认开启自动检查和下载,安装时仍会提示确认。
如果你也在整理自己的片库,欢迎使用。想看哪些榜单、哪些厂牌,或者用起来哪里不顺,都可以在评论区或 GitHub 告诉我。
回头看,这次最大的收获是:那些以前只能放在收藏夹里的榜单,终于能和自己的片库连起来。我也有了一件可以按自己习惯不断调整的工具。
