乐于分享
好东西不私藏

我用OpenClaw做渲染类视频踩的6个坑

我用OpenClaw做渲染类视频踩的6个坑

先交代一下背景

最近在用 OpenClaw 做竖屏短视频。

注意,这里说的不是那种"输入文案就自动生成画面"的AI宣传类视频——比如即梦、Sora那样,输入一句话AI直接给你生成一段视频。

我做的不是这种。

我做的,是配音+字幕+画面三者完美对齐的渲染类视频

  • 文案我来写(或者让AI帮我二创)
  • 配音我来生成(TTS)
  • 然后让程序自动渲染出字幕条、每句话对应的大字画面
  • 最后合成一个竖屏短视频

这种视频的难点在于音画同步——配音多少秒,画面就展示多久,字幕和语音完全对齐。

为什么选这条路而不是AI生视频?

当我想让AI帮我做视频时,它有两条路可以选:

路线A:AI生成类(调用即梦/Sora等API)
输入文案 → 调用即梦/可灵等AI生视频API → 直接生成画面
优点:画面炫酷,AI感强
缺点:需要额外API费用,效果不可控

路线B:渲染代码类(调用TTS+ffmpeg+PIL)
输入文案 → 调用TTS生成配音 → 用Python/PIL逐帧渲染字幕+大字 → ffmpeg合成
优点:成本极低(几乎零成本),时间和内容完全可控
缺点:画面是代码生成的,没有AI生成的炫酷感

我选择的是路线B。短视频的核心是文案和配音,画面只需要干净、清晰,能看就行。成本为零,而且完全可控。

如果你想做更炫酷的内容(比如AI生成人物说话),可以调用即梦API,OpenClaw也支持。


坑一:想省钱?微软edge-tts是个好选择

背景:
一开始用的是MiniMax的TTS API,中文效果也不错。但后来发现如果按用量付费的话,TTS的消耗其实不低。

解决方案:
微软的edge-tts是完全免费的,中文音色(晓晓)效果接近真人,而且支持直接调用:

pip install edge-tts
edge-tts --voice "zh-CN-XiaoxiaoNeural" --text "你的文案" --write-media output.mp3

省成本小技巧:如果你做视频的量比较大,edge-tts可以省下TTS的API费用。

坑二:TTS切句太碎(24句而不是7句)

问题现象:
脚本只有7行,但TTS生成了24个音频片段,导致每句话只有1-2秒,画面还没切换语音就结束了。

根本原因:
正则表达式按标点切分,把一句话里的每个分句都当成了独立的一句。

解决方案:
段落(单换行)切分,不要按标点:

lines = [l.strip() for l in text.split('\n') if l.strip()]

先介绍一下渲染环节的背景

在渲染类视频的技术链路里,有一个环节是渲染画面

一开始我想用的是Remotion这个框架。它的工作方式是:用React代码描述视频的每一帧,然后启动一个无头浏览器来渲染输出。

比如你写一段代码说"第0秒到第5秒显示大字'吃得越饱',配蓝色背景",Remotion就会自动渲染出对应的画面。

所以Remotion的角色是:把代码描述变成实际视频画面

但是在使用Remotion的过程中,我踩了下面两个坑:


坑三:Remotion渲染内存不足("Out of Memory")

问题现象:
Remotion渲染时Chrome进程被系统杀掉,内存溢出了。

根本原因:
Remotion需要启动Chromium(Chrome的无头模式),这个进程本身非常耗内存。加上Node.js运行时,服务器只有4GB内存,很容易被OOM Killer杀掉。

解决方案:
干脆放弃Remotion,改用Python PIL直接逐帧生成图片,不需要浏览器:

from PIL import Image, ImageDraw

for frame in range(total_frames):
    img = Image.new("RGB", (1080, 1920), bg_color)
    draw = ImageDraw.Draw(img)
    img.save(f"frames/frame_{frame:05d}.jpg")

生成完所有帧之后,用ffmpeg把图片合成视频。40秒视频约1200帧,耗时3-5分钟。

坑四:Remotion配置文件冲突(composition ID找不到)

问题现象:
运行渲染命令时报错,找不到composition。

根本原因:
项目目录里同时存在src/index.tsxsrc/index.ts,Remotion默认读取了.ts文件而不是.tsx文件,导致注册的composition ID对不上。

解决方案:
删除旧的.ts文件,或在渲染时明确指定入口文件。

坑五:音频和画面不同步

问题现象:
画面和声音对不上——字幕消失了语音还在继续,或者语音结束了画面还在继续。

根本原因:
没有用TTS返回的真实时长,而是估算或用Whisper转写(有误差)。

解决方案:
TTS API直接返回每句的精确时长(毫秒级),这个时间戳是唯一基准:

duration_s = resp_data["extra_info"]["audio_length"] / 1000.0

坑六:脚本没有固化到本地文件夹

问题现象:
把Python代码内联执行,执行完就丢了,下次不知道用了什么参数。

根本原因:
没有把脚本当成"流程资产"来管理。

解决方案:
先把脚本写入文件,再执行:

cat > out/tts-generate.py << 'PYEOF'
...python代码...
PYEOF
python3 out/tts-generate.py

这样脚本成了可复用的"流程资产",不用每次重写。


总结

用AI做渲染类视频,技术链路很清晰:

  1. 写脚本(文案)
  2. TTS生成配音 + 精确时间戳
  3. 生成字幕数据 + 场景数据
  4. 逐帧渲染画面
  5. ffmpeg合成

每个环节都有坑,但每个坑都有解。核心原则:用TTS生成时的实际时长作为唯一时间基准,不要估算,不要转写,不要加速


你遇到过类似的坑吗?评论区说说。