跳到主要内容

眼前有景道不得:markdown2video 的失败

· 阅读需 9 分钟

微信被推送了有关 Hypit 这个项目的公众号文章,我漫无目的地点进去,扫了几眼,继而忽然坐正了身体,一字一句的读下去。显然,这就是我一年前启动的项目 markdown2video (下称md2video)的翻版, idea 是一致的,但是比我做得更好更完善。后来,我和我的 Agent 就两个项目的相同点聊了聊,毫无疑问它宣告了 md2video 项目的失败,以及最终的死亡。

md2video 的想法来源于去年六月,那还是将近前 agent 的洪荒时代,我还在 VScode 里用着 Copilot。那时候我觉得我想要输出一些什么,但是文字内容在各个平台上的传播度不高(以及我也是 B 站的老观众了),所以就想着做视频。我在很久之前学过剪视频,但又没有时间(剪过视频的人都知道,可能 3 分钟的视频内容就要花三个小时剪辑)——那么,能否通过代码的方式生成视频呢?而且,我想要的是一个通用的框架:只需要输入一定的 markdown 格式,就可以一键生成对应的视频。并不需要多少动效,只需要标题啊小标题啊有一定的格式,有配音,能加载相关图片,也就可以了。我想起了之前看过的 3b1b 的视频,因此和 Copilot 一起学习了 manim 的一些框架,搓出了非常简单的第一个 demo。

然后,到了 claude code 的时代,我到处白嫖免费的 token,然后把它们接进 claude code。我觉得这个 demo 还不足够,模块和模块之间全都是耦合的,完全不能复用。 agent 变强了,我开始重构,把它从一个很长的 Python 文件模块化成不同的文件。这时候它类似于一个视频“编译器”,可以根据 markdown 之中文字和标记解析文字,切分文字,加上语音(以语音长度为渲染视频的唯一标准),按照提前写好的一套风格渲染成视频。视频无疑是简陋的,但确实做出来了。

似乎已经足够了吗?那时候的我觉得还不够。

我想要让它做得更多。当时我有很多幻想。我看到 github 上面的 remotion 这个项目, 代码生成的动效很酷;以及,也有一些文字生成视频的模型,这些视频也可以做为一些文字的背景。因此,在原先的结构之上,我加入了 plan 的环节,让 agent 根据每一句话生成判断:是用代码动效表现,还是用最简单的方式渲染出字幕——这时有了镜头(shot)的概念。而无论是调取大模型 api 写代码,还是调取视频生成模型生成视频,还是单纯渲染字幕,这一切都抽象为 agent 的 tool ,用户(当然是我幻想中的用户)可以添加,修改,删除。真实的视频也常常涉及到几组镜头的转换(类似于 A roll 和 B roll ),在整个视频中,这些镜头是不断切换的,而每组镜头内部的风格其实大致相同,如果 agent 用代码去写这些镜头的动效,那么这些动效的单位就应该是“一组”而不是“一个”镜头,因为要提前规划这些镜头动效的连续性。因此,有了场景(scene)的概念。后来,我又想到,可以通过 Skill 的方式去约束 agent 的 plan ,从而使视频体现出不同的风格。

好了,到现在,基本就是 md2video 这个项目的最终形态了,不过它还没办法生成特别 fancy 的视频,因为我在它这里注册的 tool 和 skill 还不够多。在项目走向的思考上,我也在两难之中犹疑:是一个 video agent harness(或者说,一个为 video 特化的 coding agent),还是一组封装好的 skill 和 tool?(也就是,所有工具都交给 agent ,让它们自己调用)这时, opus 5.5 来了,大家全都因为它的视频能力震惊瘫坐。在让 opus 5.5 做了一个视频出来之后,我觉得封装好的 skill 还有 tool 才是这个项目最终的技术路径。md2video 负责提供一系列封装好的框架代码,而强力的基础模型负责填充内容。

不过这一切在今天似乎已经完全没有意义了, Hypit 的整体思路基本与 md2video 一致,而且 demo 的效果比 md2video 好上太多了。这是一件坏事吗?而我此刻唯有庆幸:md2video 此刻并不是我维护最多的项目,虽然之前我在它上面花费了许多时间精力和 token 。前文提及的 feature ,有的已经实现,有的还遥遥无期。个人的时间精力太过狭窄,何况我还是一个怪点子很多的人。过去的一年里,因为升学的压力,以及被其他项目分心,md2video 曾经被我捡起和丢下过许多次,也因此耽搁了很多项目进度(事实上,如果不是看到 Hypit,我还要把它继续搁置下去)。比起真正把它当成创业项目的同龄人而言,实在是惫懒太多。

md2video 大概是第一个我认真用 AI 维护的项目,也见证了 AI 飞速发展带来的巨变,以及随之而来的我自己 coding 工作流的变化。虽然说它最终失败了,但我还是打算把它开源出来。

如果要对这个失败做复盘的话,我会说: md2video 的失败源于此时此刻它并不是我最需要的那个产品。很多时候,我并没有那么多剪视频的需求。后来我闲下来给我制作的另一个产品 TermRail 剪视频的时候,反而找到了亲手剪视频的乐趣,更觉得这个项目没什么用了。虽然从一个需求出发,不断迭代构造软件的过程确实有趣,也由此产生了一些与之相关的 insight ,但没有真实需求的产品归根结底是缘木求鱼。在这个项目的起初,我对于这个产品尚有热情,而随着时间的推移和基模的进展,热情渐渐消失殆尽,因此 Hypit 的出现对我而言反而是如释重负的解脱。现在,在做完最后的 commit 之后,这个项目可以终结了,我也不用再挂心于此,可以专心地制作我此刻最有热情的项目了。