前端程序员 Vibe Coding 了一个字幕识别的 Mac App ( Swift ),感慨良多~ - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
Haixiang
V2EX    分享创造

前端程序员 Vibe Coding 了一个字幕识别的 Mac App ( Swift ),感慨良多~

  •  
  •   Haixiang
    haixiangyan 1 月 17 日 1277 次点击

    灵感

    其实也不是什么灵感,就是自己用 Final Cut Pro 用多了。一直搞不懂为什么果子不做一个字幕识别的功能出来。哪怕收费的也可以啊。

    市面上的字幕识别软件也有,例如 Arc Time ,剪映,讯飞等。但他们一般只导出 srt 文件。

    而 srt 文件导入到 FCP 后,作为字幕组件,FCP 竟然不支持调整样式,难顶。

    所以最后自己搞了个字幕识别的 Mac App (因为要用到离线识别,所以只能用 Mac App 了)。

    下载体验地址: https://video-caption.site/

    文章最后写了一下在开发这款 App 的一些感想,想了解的可以直接拉到最后~

    预览

    预览视频链接

    功能

    离线识别

    使用 Whisper 模型的能力来进行音频转文本。

    效果一般般,只能说到能说,但肯定无法直接媲美剪映。同时 Whisper 需要用到本地计算资源,所以识别的速度取决于电脑性能。当然,如果只识别几分钟的视频,而且用个基础的 base 模型,速度还是够用的。

    在线识别

    因为离线能力一般般,所以就顺手加上了在线识别功能。当然,我觉得各大平台和软件都有了,甚至做得应该比我好,我只是额外提供一下在线识别能力,用的是剪映同款的火山引擎音频识别。

    因为这里要调 API ,所以不可避免要收费,不过,我觉得目前定价 10 分钟视频就 1 块,应该还好?一年 48 周,一周一条视频,也不超过 50 块。

    因为要做收费,所以也得做个登录功能来给大家记账。为了方便大家,这里用的是微信登录,并不是想单独整活。

    导入 Final Cut Pro

    目前提供了导出为 SRT 文件,以及生成 fcpxml 文件。选择“导入 FCP”后,会自动生成 fcpxml 文件,同时导入字幕项目。每条字幕在 FCP 里就是一个标题。

    后面大家就可以批量针对字幕进行样式调整了。

    调整好样式后,可以把当前字幕项目“新建复合片段”,在 FCP 里变成一条新素材,再复制到你自己的项目里就 OK 。

    P.S. 所以可能出现导入后看不到字幕的情况,这是因为 FXP 字幕默认是黑色的,可以在背后加个背景或者加到自己的项目中就能看到了。

    其他功能

    还有一些我自己想的,方便大家的功能:

    1. 字幕历史记录。可以复用以前的字幕。
    2. 将 SRT 文件转为 FCP 标题,导入到自己项目中。本质上就是用你的 srt 生成一个 fcpxml ,后续流程和 “导入 Final Cut Pro” 一样

    End

    当做完这个 App 的时候真的很感慨 AI 的能力竟然如此强大。我自己是个前端程序员,并无任何客户端开发能力。可以说整个项目我都没怎么写过代码。全靠 cursor 开发。

    以前的我也属于那种”守旧派“,觉得别人一直在吹 AI ,我偏要做”众人皆醉,我独醒“的那个人。用一个电影来举例就是《我,机器人》里的那个警探。一方面面临 AI 随时能替代我这样的”页面仔“的恐惧,另一方面又因为厌恶它们对职场的冲击,而不愿意使用或者信任它们。仿佛我极不情愿地被 AI 时代推着往前走的感觉。

    但当我越来越使用 cursor 去实现的时候,我的态度开始转变,就像那位警探一样。从最初的不信任,到把它变成工具,现在我自己对它的感情就像是我的虚拟同事一样。有的时候真的会被 AI 整难受,骂了它一个早上...

    当然,我不是那种吹嘘”AI 就能搞定的“那类人。因为在做这个 App 的时候,我依然跟 Cursor 聊了 1-2 个月(当然是下班闲着的时间了),才聊出来的。所以,我并不认可那些”全给 AI 做,很快就搞定“的言论。AI 是可以提速,但依然有很多问题需要自己面对:

    1. 维护问题。虽然我测过很多遍了,但如果现在有一个线上问题,可能我是没办法及时修复的,因为我对代码是 0 感知。就算要用 AI 来修 Bug ,AI 要花很多 token 去阅读上下文以及代码,才能解决问题。一旦问题多起来,自己全然不理解的话,维护成本( Money )只会越来越高,人力成本变成了金钱成本。
    2. Money 问题,别看我用 AI 用得很爽。整个前后端,服务,咨询消耗的 token 已经爆炸。那个月从原来的 Pro 升级为 Pro+,再升级到 Ultra 。每次问 Cursor 的时候,感觉我的心在滴血,惨~ 我也试过别的 AI model ,但目前来说 Opus 是比较强的。
    3. 上瘾问题。由于所有代码都是 AI 生成的,一旦 token 消耗完了,自己没有能力接管的话,就只能坐以待毙:自己上,实现没 AI 好。放弃?钱都花出去了,就差一点了。最终带来的结果就是你得不断地使用 AI ,不断地砸钱进去。这确实有点像是 Du Pin:一旦停止了,就会出现戒断反应。

    实际上 AI 确实只是工具,拼到底的是执行能力以及解决问题的能力。在做这个 App 时,我也遇到了很多需要人为解决的问题:

    1. 微信支付。 a. 支付需要申请为商家 -> 商家需要个体户/公司。问题:个体户和公司的区别是什么,但这里的区别我想要的是经验上的坑的区别,不单只是条款上的区别。又去了解了一些财务知识。 b. 成立公司/个体户 -> 需要各种备案,提供材料,而且这些材料和流程并不是流水那样的,还有一些相互依赖。 c. 开通收款,如果是公司,还得去银行开个对公账号 b. 成立公司/个体户后,备案主体也得换,换了又得重新备案...
    2. 天杀的微信的开发平台 vs 开发平台 vs 小程序开发平台各管各的功能。
    3. ...

    可以看到,以上这类问题根本无法用 AI 100% 帮你解决,你要做的就是去学习,重新思考,执行,落地。这也是我想表达的:拼到底的是执行能力以及解决问题的能力。

    感想写了好多(非 AI ),大家可以酌情看看,路过方便也可以体验一下 App 哈哈。

    1 条回复    2026-01-17 18:23:40 +08:00
    craftsmanship
        1
    craftsmanship  
       1 月 17 日 via Android
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1518 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 16:46 PVG 00:46 LAX 08:46 JFK 11:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86