尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

为什么SRT白板动画srt-whiteboard-animation画复杂线稿不跳笔?墨流聚类与密度梯度游走详解

为什么SRT白板动画srt-whiteboard-animation画复杂线稿不跳笔?墨流聚类与密度梯度游走详解 为什么SRT白板动画srt-whiteboard-animation画复杂线稿不跳笔墨流聚类与密度梯度游走详解【免费下载链接】srt-whiteboard-animation将 SRT 字幕做成暖米黄纸张底的流式笔迹白板手绘动画 skillmask 分区遮罩编排 stream 连续笔迹ink→color。项目地址: https://gitcode.com/gh_mirrors/sr/srt-whiteboard-animationsrt-whiteboard-animation 是一个把 SRT 字幕变成暖米黄纸张底白板手绘动画的开源 Skill它按字幕叙事顺序分区揭示画面并用流式笔迹让笔尖沿线稿连续滑行落墨再逐步添彩导出 MP4。很多人问画面里线稿又多又碎笔尖为什么从不瞬移答案藏在渲染器的两层算法里——墨流聚类ink stream clustering与密度梯度游走gradient walk本文带你逐层看懂它。先认识这张图渲染器要解决的问题动画的输入就是一张手绘线稿图加一份同名标注文件例如 examples/scene-01-monkey-mountain-banana.annotation.json渲染核心在 scripts/stream_render.py 与 scripts/render_stream_whiteboard.py。跳笔的本质是一个排序问题图上有成百上千个含墨像素格如果按从上到下、从左到右机械遍历笔尖就会在对象之间来回穿梭观感支离破碎。srt-whiteboard-animation 的做法是把先画哪、后画哪交给算法先聚类成语义完整的墨流再在每条墨流内部生成一条几乎不折返的连续路径。第一步把线稿量化成墨迹格在 scripts/stream_render.py 中渲染器先做三件事自适应阈值用adaptiveThreshold把灰度图二值化灰度低于 10 的像素判定为墨迹不受纸张底色影响网格量化整张图切成 10×10 像素的格子grid_edge10只要格内有墨迹就算活跃格背景染色采样原图四角颜色把接近背景的像素替换成画布底色保证起笔与添彩阶段背景一致。量化之后画哪里从像素问题变成了格的游走问题这是后面所有算法的输入。墨流聚类主体、文字、轮廓分开画核心入口是cluster_ink_streamsscripts/stream_render.py它把全部活跃格聚成若干条语义完整的墨流流水线如下连通域标记对墨迹格做 8 连通域分析_label_components每个连通域就是一块笔画团细桥断开地面横线、箭头这类细长笔画会把本不相干的物体连成一大块。_split_bridge_connected_componentscripts/stream_render.py通过垂直投影找墨迹稀疏的峡谷在最优走廊处把弱连接切开避免笔尖在几个物体间反复横跳碎片归并12 格的噪点碎片会被并入质心最近的大连通域_merge_small_components防止画一块没画完就跳去补一个点语义分类classify_stroke_groupsscripts/stream_render.py把每块团判定为三类——主体最大连通域、文字宽高比 ≥2.2 且填充密度 ≥0.5、轮廓其余细线。绘制顺序固定为主体 → 文字 → 轮廓视觉区域合并边框、字和箭头哪怕分属不同连通域只要包围盒相邻就归入同一区域_group_adjacent_stroke_groups保证一个视觉单元画完再离开。区域之间怎么接算法记住每条墨流的出口下一轮总是挑入口离出口最近的墨流继续画若发现从墨流终点进入更近还会把整条路径整体反向。这一步把跨区域的跳笔压到了最短。密度梯度游走笔尖从墨最浓处下笔单条墨流内部的路径由_gradient_walk生成scripts/stream_render.py思路非常像真人写字起笔点_density_seed统计每格周围 5×5 邻域内的墨迹格数量选邻居最密的格子下笔——模拟从墨最浓处落笔走法每步在 8 个未访问邻居中挑局部密度最高、且与来向转角最小的那格形成贴着墨迹走、少折返的连续轨迹断笔兜底若四周已无可走邻居才跳到全局最近的未访问格继续跳的距离天然很短肉眼几乎不可察。对文字区域算法换成更贴近书写的横向按段扫描_text_scan_orderscripts/stream_render.py把字格按列切成若干段段内沿墨迹最近邻游走段间起点尽量靠近上一段的出口——观感就像一笔一划写字而不是栅格式刷扫。骨架模式复杂线稿的像素级追踪网格模式默认稳定但对线条更精细的插画可以用--ink-path skeleton切到骨架追踪Zhang-Suen 细化把墨迹细化到 1 像素宽的中轴线scripts/stream_render.py8 邻接最直边追踪trace_8connectedscripts/stream_render.py从端点出发在 T 型/十字交叉处沿最直的未访问边继续走用无向边集合记账避免交叉点碎成三角形小笔重采样 Chaikin 平滑去锯齿、去毛刺后再按弧长等距取点。骨架追踪失败时会自动回退到网格路径scripts/render_stream_whiteboard.py保证任何线稿都能出片。从路径到成片插值、抬笔与遮罩双保险拿到有序格路径后scripts/render_stream_whiteboard.py 的_grid_plan把相邻格中心按 2 像素间距插值成连续的笔尖坐标遇到非相邻格切换就标记一个抬笔点跳过插值——视觉上只是短暂提笔绝非瞬移。每帧再把内置手部素材 assets/drawing-hand.png 的笔尖锚点精确对齐到当前落墨点强化笔在画的错觉。编排层还有一道保险每个区域的允许掩码 自身矩形区域 − 所有后续区域 −protectedRegionsscripts/render_stream_whiteboard.py落墨被严格限制在掩码内未开始的元素不会提前露线。这样分区遮罩编排 流式笔迹各司其职遮罩管何时能画聚类与游走管按什么顺序画。快速上手3 条命令验证效果python scripts/prepare_env.py --check # 输出 ENV_PY解释器路径 python scripts/parse_srt.py 字幕.srt --target-sec 30 ENV_PY scripts/render_stream_whiteboard.py 图片 标注.json 输出.mp4 assets/drawing-hand.png --ink-path grid线稿清晰的场景把--ink-path换成skeleton即可。分镜、区域与字幕关联可以无服务器地在浏览器预览台 assets/preview.html 中拖拽调整完整工作流见 SKILL.md多幕成片用 scripts/merge_scenes.py 合并。总结不跳笔 好的排序 短兜底环节做什么对应实现墨迹量化自适应阈值 10px 网格_active_mask墨流聚类连通域分类 细桥断开 碎片归并classify_stroke_groups流间串联出口→入口最近邻可整条反向cluster_ink_streams流内路径密度种子 梯度游走文字按段扫_gradient_walk/_text_scan_order精细模式骨架细化 最直边追踪 平滑trace_8connected编排保险允许掩码限制落墨范围_allowed_mask正是这套先聚类成语义墨流、再在流内沿密度梯度连续游走的设计让 srt-whiteboard-animation 面对复杂线稿时笔尖始终贴着画面走跳笔只剩提笔级别的短停顿。【免费下载链接】srt-whiteboard-animation将 SRT 字幕做成暖米黄纸张底的流式笔迹白板手绘动画 skillmask 分区遮罩编排 stream 连续笔迹ink→color。项目地址: https://gitcode.com/gh_mirrors/sr/srt-whiteboard-animation创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表