mcpField
V
video-edit

video-edit

github.com/video-db其他13913 次安装今天更新
代码仓库

关于 video-edit

面向使用 VideoDB 连接器工具或 Python SDK 的 Agent 视频编辑技能,涵盖素材准备、时间线合成、渲染与交付,并区分聊天和命令行环境的操作方式。

主要功能

  1. 01上传并列出视频、音频和图像素材
  2. 02合成分层轨道与定时片段
  3. 03添加标题、字幕、音乐和转场
  4. 04渲染时间线并获取 MP4 文件
  5. 05处理异步渲染轮询

适用场景

  1. 01剪辑并排列来源视频片段
  2. 02添加标题、字幕或背景音乐
  3. 03制作竖屏社交视频布局

MCP 相关

可用时,该技能通过 VideoDB 连接器工具上传素材、渲染时间线、轮询状态和下载成品;连接器工具不可用时,也介绍 Python SDK 路径。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/video-db/skills --skill video-edit

安装后在 Claude Code 中输入/video-edit确认已加载。

详细介绍

编辑与合成

选择路径

  1. 提供了 VideoDB 连接器工具(名称如 render_timeline、upload_media、download_timeline_render):使用这些工具。这是 Claude 网页版、桌面版和移动版聊天,以及 Cowork 中使用的路径。无需安装任何内容,也不要索要 API 密钥。
  2. 没有 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 也可以。
  3. 没有 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")。

评论

支持 Markdown