闲社服务运行正常AI智能体自动化平台
s

视频字幕叠加

技能标识:skill-video-caption-overlay

Render TikTok-style animated pill captions onto short-form videos using MoviePy + PIL. Takes a base MP4, a captions JSON, and optional background audio — outputs a final video with fade-in/out pill overlays. Fixes the PIL textbbox y-offset bug that causes text to sit outside pill boundaries. Use for TikTok ads, Reels, YouTube Shorts.

作者:admin | 来源记录:ClawHub
登记来源
ClawHub
版本
V 1.0.0
检测标记
后台标记通过
免费
免费获取
0
收藏
来源与检测标记为平台登记信息,并不代表已展示可复核的检测报告。使用前请核对版本、依赖和所需权限,建议先在隔离环境中运行。
概述
安装方式
版本历史

视频字幕叠加

视频字幕叠加

用于短视频的动画药丸式字幕叠加。无需Premiere,无需CapCut——纯Python实现。

使用方法

bash
uv run --with moviepy --with pillow scripts/overlay.py \
--video base.mp4 \
--output final.mp4 \
--captions scripts/example_captions.json \
--audio music.mp3 \
--audio-start 8 \
--audio-vol 0.5

如需保留原始视频音频,则无需使用--audio参数。

自定义字体

bash
--font-black /path/to/Montserrat-Black.ttf \
--font-bold /path/to/Montserrat-Bold.ttf

若未指定字体,则默认从~/.local/share/fonts/目录加载Montserrat字体。

captions.json格式

阶段数组——每个阶段是一个时间窗口,包含一个或多个垂直堆叠的药丸式字幕行。

json
[
{
start: 0,
end: 3.2,
y_frac: 0.06,
lines: [
{
text: POV:,
size: 28,
bold: true,
bg: [0, 195, 255],
fg: [0, 0, 0],
bg_opacity: 0.9,
px: 20, py: 9, r: 12
},
{
text: 多喝水,
size: 50,
bg: [255, 255, 255],
fg: [0, 0, 0]
}
]
}
]

字段类型默认值描述
startfloat必填阶段开始时间(秒)
end
float | 必填 | 阶段结束时间(秒) | | y_frac | float | 0.06 | 垂直位置(视频高度的比例) | | lines[].text | string | 必填 | 字幕文本 | | lines[].size | int | 50 | 字体大小(像素) | | lines[].bold | bool | false | 使用粗体(相对于黑色/重型字体) | | lines[].bg | [R,G,B] | [255,255,255] | 药丸背景颜色 | | lines[].fg | [R,G,B] | [0,0,0] | 文字颜色 | | lines[].bg_opacity | float | 0.93 | 药丸背景透明度(0-1) | | lines[].px | int | 26 | 水平内边距 | | lines[].py | int | 13 | 垂直内边距 | | lines[].r | int | 18 | 边框圆角半径 |

PIL文本边界框修正

PIL的textbbox((0,0), text, font)返回(x0, y0, x1, y1),其中y0是一个非零偏移量(根据字体大小通常为7-15像素)。在(x, y)位置绘制文本时若不补偿此偏移量,会导致文本显示在药丸视觉中心的下方。

在pill()中实现的修正方法:
python
bb = draw.textbbox((0, 0), text, font=font)
xoff, yoff = bb[0], bb[1]
vis_w = bb[2] - bb[0] # 实际视觉宽度
vis_h = bb[3] - bb[1] # 实际视觉高度

绘制文本时补偿偏移量

tx = cx - visw // 2 - xoff ty = y - y_off draw.text((tx, ty), text, font=font, fill=fg)

表情符号说明

NotoColorEmoji.ttf在任意尺寸下均无法与PIL正常配合使用(位图字体仅支持有限尺寸)。请使用文本替代方案(例如使用免费配送代替免费配送 🚚)以确保可靠渲染。

示例输出

请参阅scripts/example_captions.json获取完整的3阶段TikTok广告结构:

  • - 阶段1(0-3.2秒):钩子——屏幕顶部药丸堆叠
  • 阶段2(2.8-5.8秒):产品宣传——重叠淡入效果
  • 阶段3(5.3-8.0秒):行动号召——屏幕底部价格+配送+个人简介链接

标签

skill ai

通过对话安装

以下为平台配置的接入选项,并非逐项实测通过。能否安装取决于客户端支持、技能来源和运行环境:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 skill-video-caption-overlay-1776288622 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 skill-video-caption-overlay-1776288622 技能

通过命令行安装

skillhub install skill-video-caption-overlay-1776288622

下载

⬇ 下载 skill-video-caption-overlay v1.0.0(免费)

文件大小: 5.4 KB | 发布时间: 2026-4-16 16:11

v1.0.0 最新 2026-4-16 16:11
- Initial release of video caption overlay tool.
- Render TikTok-style animated pill captions onto short-form videos using MoviePy and PIL.
- Accepts a base MP4 video, captions JSON, and optional background audio.
- Outputs a final video with fade-in/out pill overlays for each caption phase.
- Implements a fix for the PIL textbbox y-offset bug to properly center text within pill overlays.
- Supports custom fonts and detailed caption styling through JSON configuration.
返回顶部