一个不下载视频的 Chrome 插件
以前你要用 Video2Any,得先把文件拖到网页上。现在它也是工具栏上的一个按钮:你一支录播课看到一半,点一下工具栏上的图标,Video2Any 就在另一个标签页里把这门课的幻灯片打开。
值得写的不是「我们做了个插件」。值得写的是这个插件被允许做的事情比你以为的少得多,而这个限制是我们设计出来的,不是绕出来的。
本页内容
我们传画面,不传视频
把讲座变成幻灯片,最直觉的做法是把视频抓下来再解码。我们没有走这条路。一个会把网页上的视频抓下来的东西就是下载器,不管它同时还干了什么别的,而我们做的不是那个。
所以这个插件只会两件事:让 <video> 跳到某个时间点,然后读下屏幕上这一帧的像素。它把这些像素压成很小的 JPEG 交给 video2any.com,由网站那边判断哪几张是幻灯片。两半之间的协议里没有任何一种消息装得下一个视频文件,插件里也没有任何一段代码拼得出一个。
这不是一句关于我们动机的保证。这是代码本身就已经决定了的事,而后面这种保证比前面那种值钱。
你那么长的一支课,到底传了多少东西
下面这张采样表是产品自己那两个函数算出来的。你挑一个时长,再挑一个录制画质。
间隔和帧数是引擎自己算的。一张画面压成 JPEG 之后大约 3 KB。视频那一栏,我们按一小时的课在这三档下大约 360MB、675MB、1.35GB 来估——这是估的,写在这里是让你有得反驳。
为什么我们把插件做得这么笨
所有的判断都留在网站上:隔多久采一次、哪几帧算幻灯片、一份幻灯片该多密、导出长什么样。插件只负责跳到某一秒、把像素读下来,就这些。
理由很枯燥,但很要命。网站部署一次大约十二秒,插件更新一次要等商店审核,那是按天算的。所以经常要改的那一半必须待在商店外面,而待在商店里的那一半必须小到几乎不需要改。
这个切法还顺带定死了这东西是什么。一个什么都判断不了、也存不住视频的部件,以后很难被悄悄改成别的东西。
它做不到的事
下面每一条都是上面那个设计带来的,所以它们都不是「以后版本会修」。
有版权保护的视频
这类内容读回来是一片空白——浏览器交给插件的就是黑的。Netflix 和大部分付费课程平台都是这样。我们绕不过去,也不想绕。
正在直播的流
还在播的直播没有一个「总长度」可供采样。等录播上线之后它就能用了。
Chrome 自己的页面
Chrome 不允许插件在
chrome://开头的页面、应用商店和 PDF 上运行。这一条任何插件都没办法。把讲座那个标签页关掉
像素在那个标签页里,所以跑完之前你得让它开着。但你不用一直盯着它——它在后台干活的时候,你可以去看别的。
它在哪些地方能用
只要那支视频是用网页自带的播放器放的就行:Panopto、Echo360 这类学校的课程平台,Zoom 的云端录像,会议存档,YouTube,还有直接挂在课程页上的一个 .mp4。
我们没有一张「支持网站列表」,因为这个插件没有注册到任何网站上,它对任何站点都没有常驻权限。你点图标的那一刻,Chrome 才把那一个标签页授权给它——这也正是它能在我们根本没听说过的播放器上工作的原因。
一次转换跑完,你那个讲座标签页还停在原来的位置,音量也没变。
在哪里装
它已经上架 Chrome 应用商店。你点一下就装好,插件本身不收钱:免费额度和限制都是网站的,视频从哪条路进来都一样。
插件不会改变网站上的任何东西。你手上已经有的录像文件,还是把它拖到网页上最省事,这条路照旧。