拉片笔记:全本地的电影拉片工具,说几个卡了很久的工程问题

8 月 6 日
 bkingfilm
工具叫拉片笔记,导入一部电影,抽帧加字幕打包给 AI ,拆出分段、剧情泳道时间轴、结构树、情绪曲线,然后边播边改。纯前端,React + Vite ,数据在 localStorage 和 IndexedDB ,不传服务器。

几个卡过很久的地方。

抽帧慢。一秒一帧,两小时的片子七千多帧,串行 seek 时解码器大部分时间在等,CPU 闲着。改成开 3 个 video 各抽一段连续区间,22 分钟的片从 1.1 帧每秒到 3.1 。再多开收益递减,seek 之间开始抢 IO 。

图不能太大。原来抽 480 宽质量 0.72 ,两小时片的 AI 包 280MB ,ChatGPT 免费版传不上去。降到 320 宽 0.62 ,单张 25KB 变 10KB ,包 70MB 。实测 320x180 的画面 AI 认场景和构图没问题,烧录的中文字幕也读得出。

自动搜字幕。中文片名走伪射手,外文走 OpenSubtitles ,一个源空了自动落下一个。有个坑找了很久:OpenSubtitles 的字幕头尾夹广告条目,广告时间码在片尾之后,片长校验被撑过头,错版字幕就这么混进来。现在进校验前先剥广告 cue 。

最近一版加了 AI 直连,填自己的 key 一键跑完,不用手动打包上传。浏览器直连大多数 AI API 会被 CORS 挡,走 dev server 转发一层,key 只存本机。

GitHub 仓库
https://github.com/bkingfilm/lapian-notes

在线试用版只能导 MP4 ,没有转码和自动搜字幕
https://bkingfilm.github.io/lapian-notes/
2639 次点击
所在节点    分享创造
24 条回复
bkingfilm
8 月 15 日
@ButcherHu 没算过最优值,是从画质那头倒着定的。抽帧一开始 480 宽,后来降到 320 宽、质量 0.62 ,单张十来 KB ,两小时的片打包七十兆上下,免费档的 AI 也能传进去。宽度压到这份上,密度就不敢再往下动了,代码里 1 秒是写死的下限。往上调是省钱,但三四秒一帧短镜头整段都不出现,分段就开始飘。
ButcherHu
8 月 16 日
@bkingfilm b 导好认真啊,star 了。
倒着定我觉得也正常,embeddings 模型最早也是直接切块的 doge 。如果想要可变密度,可以试试能不能用语音识别里面的 vad ,或者是字幕时间码来判断截图的密度。还有能不能截成 gif 啊(我觉得动态信息也很有用,gif 只有几个关键帧如果压缩时候降低色深的话,可能体积也不会增大太多),其实拉片展示页面也很想看动图的,能看运镜啥的。
bkingfilm
8 月 16 日
@ButcherHu 字幕这条其实已经算了一半。时间轴上那根台词密度曲线就是按字幕时间码来的,60 秒窗口滑着统计每分钟台词量,只是这个数只画出来给人看,没回喂给抽帧那头,接过去应该是最省事的一条路。VAD 还得先把音轨解出来,比读字幕重不少。

gif 那条卡在别的地方。现在是每帧一次 seek ,等 seeked 事件回来再 drawImage ,一秒一帧两小时七千次 seek 已经是三路并行在扛。gif 要连续十几帧,照这个路子 seek 次数直接乘上去,得改成让 video 正常播、按帧定时截,是另一套抽法。另外 canvas 直接吐不出 gif ,256 色量化和编码得自己接一个库。
bkingfilm
8 月 23 日
@0x2CA 这个全黑的情况新版已经处理了。浏览器解不出画面的片源,以前会闷头抽几千张黑图,现在开头 30 帧全黑就直接停下来提示先转成 H.264 再导入,不让人白等。GitHub 上已经能下 v0.5.2 了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/1232398

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX