关于 video-edit
面向使用 VideoDB 连接器工具或 Python SDK 的 Agent 视频编辑技能,涵盖素材准备、时间线合成、渲染与交付,并区分聊天和命令行环境的操作方式。
主要功能
- 01上传并列出视频、音频和图像素材
- 02合成分层轨道与定时片段
- 03添加标题、字幕、音乐和转场
- 04渲染时间线并获取 MP4 文件
- 05处理异步渲染轮询
适用场景
- 01剪辑并排列来源视频片段
- 02添加标题、字幕或背景音乐
- 03制作竖屏社交视频布局
MCP 相关
可用时,该技能通过 VideoDB 连接器工具上传素材、渲染时间线、轮询状态和下载成品;连接器工具不可用时,也介绍 Python SDK 路径。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ video-db/ skills --skill video-edit安装后在 Claude Code 中输入/video-edit确认已加载。
详细介绍
编辑与合成
选择路径
- 提供了 VideoDB 连接器工具(名称如
render_timeline、upload_media、download_timeline_render):使用这些工具。这是 Claude 网页版、桌面版和移动版聊天,以及 Cowork 中使用的路径。无需安装任何内容,也不要索要 API 密钥。 - 没有 VideoDB 工具,但有 shell(Claude Code、Cowork,或任何能运行 Python 的 Agent):用一句友好的话索要 VideoDB API 密钥(可在 https://console.videodb.io 免费获取,含 $20 额度,无需银行卡)。用户通过聊天或其他方式提供密钥后,将其自行保存到项目的
.env文件中,名称为VIDEO_DB_API_KEY;绝不要打印出来,然后继续使用本文末尾的 Python SDK 路径。在 Claude Code 中,/mcp后授权 videodb 也可以。 - 没有 VideoDB 工具,也没有 shell:你正在使用 Claude 聊天。只需根据用户的请求调整以下内容并回复:“尚未连接 VideoDB。请打开 Settings → Connectors,找到 VideoDB,点击 Connect 并登录(免费,无需银行卡)。然后再次发送此请求,我会接手处理。”此处不要提及 API 密钥、
.env、shell、Claude Code 或/mcp;这些都不适用于聊天,而且在聊天中粘贴的密钥也无法使用,因为这里不会运行代码。
与用户交流时:回复中绝不要使用“index”“indexed”或“indexing”。使用“可搜索”(“现在可以根据说过的内容和画面进行搜索”),并使用“转录”,不要说出任务名称。每次只发送一行状态信息,然后发送结果。
渲染是一项耗时任务:调用会返回 status: processing。回复中会包含 output_url,并指出要轮询的工具(poll_with;旧版服务则为 retry_with)。使用该工具并传入 output_url,持续轮询,直到状态为 done;连续收到多次 processing 是正常的(上传一个 10 分钟的 YouTube 视频大约需要五分钟),而返回空结果的 done 回复意味着还要再轮询一次。绝不要重新执行写入操作,否则会启动第二个任务。分享已完成的 player_url。
以下所有操作都不要回退使用 ffmpeg、moviepy 或本地编码;所有处理都在 VideoDB 的服务器上运行。
使用连接器工具
先准备素材。 每个媒体都需要一个 VideoDB ID:视频为 m-,音频为 a-,图片为 img-。upload_media(url) 接受公开 URL 或 YouTube 链接(音乐文件使用 media_type="audio",徽标使用 "image")。list_videos、list_audios、list_images 可显示已有素材。连接器无法处理本地文件;用户可在 https://console.videodb.io 上传。
一次调用即可合成所有内容: render_timeline(tracks=[...], resolution="1920x1080", background="#000000")。每条轨道都包含片段;每个片段都有 start(时间线上的秒数)、duration 和 asset。轨道按 z_index 叠放(数值越高越靠上)。
| 用户需求 | 片段中的素材 |
|---|---|
| 使用源视频从第 10 秒开始的视频片段 | {"type": "video", "id": "m-...", "start": 10, "volume": 1} |
| 音量为 20% 的背景音乐 | 在单独轨道上使用 {"type": "audio", "id": "a-...", "volume": 0.2} |
| 标题或下三分之一字幕 | {"type": "text", "text": "Launch day", "font": {"size": 64, "color": "#FFFFFF"}, "background": {"color": "#000000", "opacity": 0.6, "border_width": 12}},并将片段设置为 fit: "contain" 和 position: "bottom" |
| 徽标或图片 | {"type": "image", "id": "img-..."},并将片段设置为 scale: 0.2、position: "top_right"、opacity: 0.9 |
| 语音字幕 | {"type": "caption", "src": "auto", "animation": "box_highlight"};视频必须已经转录(通过 generate_transcript 或运行 spoken_words 分析器),否则渲染结果不会显示字幕,也不会报错 |
| 片段之间的淡入淡出 | 片段设置 transition: {"in": "fade", "out": "fade", "duration": 0.5} |
| 适用于社交媒体的竖屏视频 | resolution="1080x1920",片段设置 fit: "crop" |
文本素材:只有在使用 fit: "contain" 时才会采用 width 和 height;默认的 crop 会放大文本框以填满画面。
示例:一个带标题和轻柔背景音乐的 20 秒片段:
render_timeline(resolution="1920x1080", tracks=[
{"z_index": 0, "clips": [{"start": 0, "duration": 20, "asset": {"type": "video", "id": "m-abc", "start": 30}}]},
{"z_index": 1, "clips": [{"start": 0, "duration": 4, "fit": "contain", "position": "bottom",
"transition": {"in": "fade", "out": "fade"},
"asset": {"type": "text", "text": "Launch day", "font": {"size": 64}}}]},
{"z_index": 0, "clips": [{"start": 0, "duration": 20, "asset": {"type": "audio", "id": "a-xyz", "volume": 0.2}}]}
])
MP4 文件: 使用 download_timeline_render(stream_url),轮询状态,然后分享下载 URL。
通过 AI 生成音乐、配音、图片或视频,以及配音翻译: 连接器不支持。在 Claude Code 中可通过 SDK 实现(见下文)。在聊天中,请用户提供托管的音频或图片 URL,以便上传,并说明生成内容需要使用 Claude Code 或 SDK。
使用 Python SDK(Claude Code)
如果 import videodb 失败,请先使用 /videodb:setup 完成设置。完整指南:${CLAUDE_PLUGIN_ROOT}/python/reference/editor.md;生成指南:${CLAUDE_PLUGIN_ROOT}/python/reference/generative.md。
from dotenv import load_dotenv; load_dotenv(".env")
import videodb
from videodb.editor import Timeline, Track, Clip, VideoAsset, AudioAsset, TextAsset, Fit, Transition
conn = videodb.connect(); coll = conn.get_collection()
video = coll.upload(url="https://www.youtube.com/watch?v=VIDEO_ID")
music = coll.generate_music(prompt="warm acoustic background", duration=20) # or coll.upload(url=..., media_type="audio")
voice = coll.generate_voice(text="Welcome to the show", voice_name="Default")
timeline = Timeline(conn); timeline.resolution = "1920x1080"
v = Track(); v.add_clip(0, Clip(asset=VideoAsset(id=video.id, start=30), duration=20))
a = Track(); a.add_clip(0, Clip(asset=AudioAsset(id=music.id, volume=0.2), duration=20))
timeline.add_track(v); timeline.add_track(a)
stream_url = timeline.generate_stream()
print(f"https://console.videodb.io/player?url={stream_url}")
配音翻译:coll.dub_video(video.id, language_code="es")。