关于这个项目 · 写给想了解背后思路的人
← 回到台词搜索
这页是产品说明,不是网站本身。只想搜台词,点这里回首页就行。

我做了一个「搜台词 → 看到画面」的小网站

在线体验:<https://bigbang-quote.netlify.app>

先说结论

我在看《生活大爆炸》时,经常刷到一个梗,想说"这句台词在哪一集?",但真要找,就得打开 20 分钟的整集、 来回拖进度条,还不一定找得到。

所以我做了个网站:输入一句台词,点一下,直接播那一小段视频,中英双语,还能把这段发给朋友。

现在它里面有第一季 17 集、7040 条台词、932 段可以播放的片段。任何人有链接就能用,不用注册、不用装东西。


我是怎么想到做这个的

不是从"我要做个产品"开始的,是从一句抱怨开始的。

有天我想找谢尔顿说"薛定谔"那一段发给朋友,结果:先猜是哪一集,猜错三次;打开视频拖进度条,拖了七八分钟; 最后干脆截了张图发过去——但截图没有语气、没有表情,朋友根本 get 不到笑点。

后来我发现这不是我一个人的问题。想拿台词片段的人大概这么几类:

大家缺的其实不是"台词库",而是"那句台词对应的 20 秒"。 文字检索早就不缺了,缺的是从"搜到"到"看到"的最后一步。


我一开始以为的三件事,后来都被打脸了

我一开始的想法很朴素,一边做一边验证,结果三个想法里有两个是错的。

想法一:大家应该会记得整句台词

我的打算是:让用户把记住的整句打进去,精确匹配。

结果:我拿真实字幕统计——没有人会背整句。大家记得的是"薛定谔""penny"这种两三个字/词。 整句搜索基本没人用得上。

所以我改了:不做"整句精确匹配",改成"随便打几个字/词就能搜出来", 中文按字匹配、英文按单词片段匹配,搜完再按"像不像一句金句"排序。

这件事教会我:别猜用户会怎么用,去看真实数据。
顺便说个翻车细节:我一开始把示例关键词写成"搭讪""Bazinga",结果在第一季字幕里根本搜不到——
这两个词是我拍脑袋想的,戏里没说过。后来我把示例词全部换成数据里真实出现过的。

想法二:切出来的片段越短越好,定位最准

我的打算是:每条字幕单独切,前后各留一点,一条 3 秒。

结果:3 秒的视频里,人物刚张嘴就黑屏了。没有铺垫、没有反应,笑点完全出不来。

所以我改了:以"一小段对话"为单位,大概 15~25 秒——一句吐槽加上前面的铺垫和后面的反应。 现在全季切成 696 段,平均 20 秒。点开就有"那一幕"的感觉。

想法三:先在自己电脑上跑起来,能搜就行

我的打算是:写个本地程序,自己电脑上能用就算成了。

结果:我兴冲冲把链接发给朋友,对方打开是打不开的——因为程序跑在我自己电脑上, 我电脑一关就没了,而且不在同一个网络的人也访问不到。

所以我改了:整个东西必须"发个链接就能用"。这一步逼着我换了技术方案,也就是下面第 3 节的故事。

一句话总结这三个想法:"我以为是"和"实际是"之间,隔着的就是产品经理要干的活。

最难的两个决定

决定一:切"一句"还是切"一段"

方案听起来实际用起来
一句台词切一段(3 秒)定位最准、文件最小看不出剧情,笑点没铺垫,看完一头雾水
每 15 秒切一刀(固定长度)最好写经常从句子中间切断,观感很差
按停顿切成"一段对话"(现在用这个)要多想一步有起承转合,一般正好是一句台词 + 一个笑点

具体怎么切:两个人说话的间隔超过 1.5 秒,就当"换气/换场景"断开;攒到 18 秒左右、正好说到句号,就收尾; 不足 6 秒的碎片并到前一段,免得出现"闪一下"的片段。

效果是:全季 374 分钟视频,只有需要的那部分被切出来,一共 696 段、1.86GB, 比"整集全部转码"(大约 8GB)省了四分之三,但比按句切好看得多。

决定二:照着老师那套做,为什么我做不成

老师演示的方案(他用的是一台 Mac):

在 Cursor 里写代码 → 数据放 Supabase(一个国外在线数据库)→ 视频放 Cloudflare R2(一个国外对象存储) → 代码推 GitHub → 用 Netlify 发布上线。

我照着做,卡了三处,而且每一处都不是"我不会",是"我这条路走不通":

卡在哪具体什么情况结果
Supabase 上传视频我在华为 MateBook 14(Windows)上打开 Cursor,按教程上传,Supabase Storage 就是传不上去视频放不进去,整个方案走不下去
Cloudflare R2开 R2 要绑境外银行卡,我没有;注册要走 Google/Apple/GitHub 登录,我的 Chrome 登录不了,页面都进不去R2 完全用不了
工具本身老师的操作习惯是在 Mac + Cursor 里一路点下去我这台 Windows 本上,体验和教程对不上

我的处理办法不是硬扛,是换条路走通。 换了两个东西:

  1. 云存储:Supabase + R2 → 腾讯云 COS。 理由很实在——国内的、支付宝能付、控制台我能进、有中文文档。

视频照旧放"云上",网页照旧发"公网",只是换了一家我够得着的服务商。

  1. 工具:Cursor → DeepSeek Harness。 不是我讨厌 Cursor,是我这台机器上它能干的活 DeepSeek Harness 也能干,

而且全程能连上腾讯云、能在本地跑 python 和 ffmpeg(切视频要用的工具)。

更重要的是:我把"数据库"这一步整个省掉了。

老师那套要 Supabase,是因为要存台词、要服务端搜索。但我的数据到底有多大?7040 条台词, 全部塞进一个 1MB 的文件都嫌小。这种东西根本不需要一个数据库服务器—— 直接把这个文件交给浏览器,让人家在自己电脑上搜,快到几乎没感觉(实测不到 5 毫秒)。

所以最后的结构非常简单:

我电脑上(做素材):17 个 2GB 的 mkv + 字幕
   ↓ 切成 696 段 720p 小视频
腾讯云 COS(放视频)  ←── 网页直接从这儿取视频播放
   ↓
Netlify(放网页:搜索页 + 分享页 + 项目介绍)
   ↓
任何人点开链接:搜台词 → 播放 → 复制链接发朋友

好处是:没有服务器要维护、不会因为我关电脑就挂掉、也不花钱养一台机器。 代价是:搜索能力只有"字面匹配",做不到"我忘了原话,帮我找意思差不多的"——这个我先记在待办里。

这段我写得细,是因为它是我这次最真实的一课:
教程给的是"一种解法",不是"唯一解法"。
遇到走不通的地方,先问"我到底需要它帮我干哪件事",再去找国内能落地的替代品,
比死磕配置有用得多。老师用 Mac 能通的路,我这台华为本上要绕一下,这不是能力问题,是环境问题。

现在它长什么样

项目数字
收录第 1 季 17 集,7040 条中英对照台词
可播放片段696 段,平均 20 秒,共 1.86GB
做这些片段花了多久43.9 分钟(一次跑完,中途断了也能接着跑)
搜索速度打开网页后本地搜索,几乎瞬间(不到 5 毫秒)
别人能不能看能。网页在公网、视频在云上,手机打开也能播
我做这个用了什么DeepSeek Harness + Python + ffmpeg + 腾讯云 COS + Netlify

用法就三步:搜一句 → 点"播放这段" → 点"生成分享链接"。


我怎么判断它到底有没有用

做出来不算完,得知道"好不好用"。我给自己定了三个很土但很实的指标:

  1. 大家会不会看完(有效播放率)

点开一个片段,有没有看完一半以上。如果大家都是点开 2 秒就关,说明我切的片段不对, 要回去调"切多长、从哪儿切"——这是最直接的质量信号。

  1. 从搜到看到有多快(Aha 时刻)

从"按下搜索"到"视频开始播"的时间,目标 10 秒以内。现在是点一下 1 秒内开始播。 超过 10 秒,人就没耐心了。

  1. 搜不到的比例(零结果率)

有多少次搜索一条结果都没有。高了说明不是用户的问题,是我素材不够、或者关键词想得不对。

等有真实用户了,我要把这几个数字真的记下来,而不是"我觉得挺好用"。


做的时候踩过的坑(按发生顺序,全是真事)

  1. 示例词是我编的:搭讪、Bazinga 在第一季字幕里一条都没有,白高兴一场。

→ 教训:示例词必须从数据里挖,不能凭印象。

  1. 桶名少了一截:腾讯云的存储桶名字后面必须带一串数字(aivideoresume-1528458912),

我只写了前面一半,报错报了半小时。

  1. 密码变量名对不上:配置文件里叫 SecretId,脚本里找的是 COS_SECRET_ID,

程序不报错、只是悄悄拿不到密码,一直上传失败。

  1. 第一版切太短:前面说的 3 秒片段问题,做完才发现,推翻重切。
  2. "能搜"≠"能用":本地跑通之后发给朋友,才发现"别人打不开"是致命问题,于是整个方案改掉。
  3. 密钥泄露:我图省事把密钥贴到了聊天记录里,后来全部作废重发。

→ 教训:密码只放本地配置文件,永远不要贴出来。


如果有人想接着做,我会先做这几件事

  1. 把数据记上(最重要):现在"好不好用"全靠我感觉,得先有真实数字。
  2. 补几部剧:现在只有一部。换剧其实只要放素材、改个目录名,我想验证的是"通用",不是"粉丝项目"。
  3. 让人不用记全名字:打拼音首字母就能搜到(比如打 xed 出"薛定谔"),

还能认识外号("谢耳朵"→"谢尔顿")。

  1. 竖屏版本:同一段自动切成手机竖屏,剪视频的人能直接用。
  2. 能按"谁说的"搜:比如"谢尔顿说的关于智商的话",这就得识别每一句是谁在说,难度大,放后面。

最后说一句

这次做下来,最大的收获不是"我会写代码了",而是两次推翻:

一次是把"一句"改成"一段"——因为用户要的是那个瞬间,不是那句话; 一次是把"自己电脑上能跑"改成"发个链接谁都能看"——因为一个只有我能打开的东西,等于没做。

这两次都是做完第一版、看到真实结果之后才发现的。 所以如果非要总结一条:先做一个最便宜的版本,拿去用,让问题自己冒出来,比一开始想得很周全有用。


*素材来自《生活大爆炸》,版权归原权利方所有。这个项目只用于个人学习与作品演示,不提供整集下载,也不做商业用途。*