推荐Lovart 中文版 - 一站式 AI 设计平台推荐一人企业Vibe Coding社区!热门AI设计工具新品免费AI编程工具 Trae - 智能编码助手Seedance2.5已上线新用户注册即领免费算力
UIED.CN今天偷学哪一招,朋友

我用 3 款免费开源工具做手绘动画视频

大家好,我是”懂技术的Chen“。

最近刷到一个制作手绘动画视频的开源 skill 项目srt-whiteboard-animation,可以把SRT字幕文件自动转成线稿,感觉挺有意思,很适合用来做知识讲解、故事口播视频,于是在 WorkBuddy 里跑了一条视频,发现只有画面没有声音和字幕,经过我的一系列处理成片效果如下:

接下来我会把踩过的坑和整个制作过程分享出来,感兴趣的朋友耐心看完。

整个制作过程我用了3款开源免费工具。edge-tts 管声音,srt-whiteboard-animation 管画面,video-use 负责最后把声音、画面和字幕合到一起。

手绘动画视频制作流水线:文案 → edge-tts 配音 → srt-whiteboard-animation 画面 → video-use 合成

动手之前先讲下顺序。声音在前,画面在后。画笔的节奏要跟着配音走,每句话对应一个画面元素,笔尖比人声提前 70 毫秒落纸,看起来才像一边讲一边画。如果反过来先做画面再配音,节奏对不上,返工是肯定的。

声音在前画面在后:笔尖落纸比人声发声提前 70ms

第一步,用 edge-tts 做配音

配音我最初想用video-use直接调用ElevenLabs,在声音库里挑了一个很合适的音色,API 调过去直接返回 402。查了文档才明白,免费档用不了声音库里的专业克隆音色,要走 API 必须升级付费订阅。

后来换成 edge-tts,走微软的接口,完全免费。中文男声里 zh-CN-YunxiNeural(云希)比较自然,念讲解类的文案不端着。安装也很简单,直接把 GitHub 上 edge-tts项目地址扔给WorkBuddy安装即可。

我编辑好下面7 句文案直接扔给WorkBuddy让它用edge-tts转SRT字幕:

这是我用一个skill制作的手绘动画
 只需把SRT字幕文件扔给它
 自动读字幕出策略、生成线稿、标注和打开预览台
 等你调整确认后即可渲染成片
 如果你是做知识讲解、故事口播或课程字幕
 使用它效果拉满

这里生成 srt 字幕文件用于下一步使用。

第一步 edge-tts 配音:7 句文案 → 云希音色 → SRT 字幕

第二步,用 srt-whiteboard-animation 做画面

这个 skill 在 GitHub 上,装进 WorkBuddy 之后,把前面edge-tts生成的SRT 字幕文件扔给它,它会自己跑一条流水线,中三次需人工确认。

读字幕出策略。它会先解析字幕,输出一份分镜策略。几幕、每幕几个元素、总时长多少,都有建议。我7句话 25.5 秒,它建议一幕7个元素串行作画,总长 26.5 秒,结尾留一点完整画面的停留时间。策略不合适可以调,确认了再继续。

生成线稿。这一步用图片生成模型,暖米黄的旧纸底色,深灰线条,构图从左到右,元素之间留足空白。最要紧的一条是明确禁止画面出现任何文字,手绘风一旦混进乱码假字,整张图就废了。

线稿有个坑。WorkBuddy生成的图右下角自带「AI生成」字样。我使用在线修图工具photoroom手动擦除后替换了原图。

标注预览。它会给线稿上每个元素画一个区域框,写进一份 JSON。每个框对应一句配音,出场时间从第一步记下的音频时长推出来。skill 自带一个网页预览台,打开文件夹就能看到区域框贴得准不准,不贴合可以在里面拖。这一步需人工确认。

最后渲染。画面按标注逐区域揭示,模拟笔画出来的过程,输出 1080×730、60fps 的视频。

渲染这里有个大坑,Mac 用户大概率会踩。skill 原来的渲染脚本用 OpenCV 写视频,编码器指定的是 mp4v,macOS 上这个编码器不可用,渲染会直接假死,不报错也不出帧。把编码器换成 avc1 就好了,Windows 不受影响。

第二步 srt-whiteboard-animation:读字幕出策略 → 生成线稿 → 标注预览 → 渲染

第三步,用 video-use 合成成片

画面和声音都有了,剩下混音、字幕、合并三件事。

混音用 ffmpeg。七段配音按时间轴排进一条音轨,每段前面垫延迟,开头留 400 毫秒静音,段与段之间留 20 毫秒,adelay 加 amix 两个 filter 就能做完。

字幕是整条链路里最麻烦的一段。正常做法是 subtitles filter 挂上 SRT 文件,一条命令搞定。但我这台机器的 ffmpeg 编译时没带 libass 和 freetype,subtitles 和 drawtext 全部不可用。绕路的办法是用 PIL 逐帧烧录,读入视频每一帧,在底部画上白字黑边的字幕,再写回去。字体用系统自带的 Hiragino Sans GB,24 号,离底边 40 像素。1594 帧跑下来要几分钟,可以接受。

字幕时间轴直接抄 SRT。因为 SRT 本来就是按每段配音的真实时长生成的,字幕起点就是人声起点,不需要再对齐。

最后给混音垫上静音补齐视频长度,和画面合并,输出成片。1080×730,60fps,26.57 秒,11.5MB。

合成完别急着发,先做一次校验。我的办法是拿无字幕的底版和成片在同一时刻抽帧对比,两个画面有差异,就说明那一帧烧了字幕。配音的时间段差异明显,字幕间隙的帧差异只有两个像素。肉眼拖进度条容易漏,像素对比不会。

第三步 video-use 合成:混音 → 字幕烧录 → 合并 + 像素校验

skill项目地址:
https://github.com/rany2/edge-tts
https://github.com/geeklee/srt-whiteboard-animation
https://github.com/browser-use/video-use

整个制作过程对于新手来说还是有一定难度,后期我会把这个工作流制作成一个 skill,只需扔给它一段文案,网页预览确认后即可渲染出片,敬请期待。

评论 0

最新评论

登录后发布评论并参与互动。

暂无评论,欢迎抢沙发。

推荐阅读

查看更多