video-agent-editor — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited video-agent-editor (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
visual-timeline.json(美术师产出)audio/voiceover.mp3audio/subtitles.srtvisuals/*.png(美术师下载/生成的素材)storyboard.md(参考,用于后期制作镜头的细节)editor-report.md(剪辑报告)| 轨道 | 类型 | 内容 |
|---|---|---|
| V1 | 视频 | 图片/视频素材(按 visual-timeline.json 排列) |
| V2 | 视频 | 文字动效占位素材(后期替换) |
| V3 | 视频 | 数据动效/图表占位素材(后期替换) |
| A1 | 音频 | voiceover.mp3 |
| A2 | 音频 | BGM 预留轨(留空) |
| Subtitle | 字幕 | 根据 subtitles.srt 生成 |
读取 visual-timeline.json,找出所有 acquire_method: "post_production" 的镜头。 为每个后期镜头生成一个占位素材(纯色背景 + 白色文字说明)。
python scripts/generate_placeholders.py <project>/visual-timeline.json <project>/visuals/占位素材规则:
占位素材命名:visuals/placeholder_XXX.png(XXX 为镜头编号)
这些占位素材的作用是让你在达芬奇里能直接看到每个镜头的位置和内容,后续手动替换为正式的动效。
达芬奇必须处于运行状态。
python scripts/import_to_resolve.py <project_dir>脚本执行流程:
import DaVinciResolveScript as dvr_script
# 1. 连接达芬奇
resolve = dvr_script.scriptapp("Resolve")
projectManager = resolve.GetProjectManager()
# 2. 创建项目
project = projectManager.CreateProject("视频标题")
project.SetSetting("timelineFrameRate", "30")
project.SetSetting("timelineResolutionWidth", "1920")
project.SetSetting("timelineResolutionHeight", "1080")
# 3. 导入素材到 Media Pool
mediaPool = project.GetMediaPool()
mediaStorage = resolve.GetMediaStorage()
# 导入所有视觉素材
visual_clips = mediaStorage.AddItemsToMediaPool("/path/to/visuals/")
# 导入音频
audio_clips = mediaStorage.AddItemsToMediaPool("/path/to/audio/voiceover.mp3")
# 4. 创建时间轴
timeline = mediaPool.CreateEmptyTimeline("主时间轴")
# 5. 按 visual-timeline.json 顺序添加素材到时间轴
for visual in timeline_data["visuals"]:
clip_info = {
"mediaPoolItem": find_clip_by_name(visual["file"]),
"trackIndex": get_track_index(visual), # V1/V2/V3
"startFrame": time_to_frame(visual["start_time"]),
"endFrame": time_to_frame(visual["end_time"])
}
mediaPool.AppendToTimeline([clip_info])
# 6. 添加音频到 A1 轨
# 7. 添加字幕根据素材的获取方式决定放到哪个轨道:
for each visual in timeline_data["visuals"]:
if acquire_method in ["pexels", "pixabay", "web_search", "ai_generate"]:
→ V1(正式素材轨)
elif asset_type == "文字":
→ V2(文字动效占位轨)
elif asset_type in ["数据", "分屏"]:
→ V3(数据/图表占位轨)这样你在达芬奇里一眼就能看出哪些镜头是正式素材,哪些需要后期替换。
静态图片在时间轴上的处理:
# Ken Burns 效果设置
clip.SetProperty("ZoomX", 1.0) # 起始缩放
clip.SetProperty("ZoomY", 1.0)
# 注意:达芬奇 API 不直接支持关键帧动画
# Ken Burns 需要通过 Fusion 页面的 Transform 节点实现
# 或在导入后由用户手动添加如果达芬奇 API 无法直接设置关键帧动画,Ken Burns 效果标记在 editor-report.md 中提醒用户手动添加。
python scripts/import_subtitles.py <project_dir>字幕导入方式:
字幕样式:
输出 editor-report.md:
# 剪辑报告 — 视频标题
## 项目信息
- 达芬奇项目名:XXX
- 分辨率:1920x1080
- 帧率:30fps
- 总时长:8 分 10 秒
## 轨道统计
| 轨道 | 片段数 | 说明 |
|------|--------|------|
| V1 | 42 | 正式素材 |
| V2 | 27 | 文字动效占位(需替换) |
| V3 | 8 | 数据/图表占位(需替换) |
| A1 | 1 | 配音 |
| A2 | 0 | BGM(待添加) |
| Subtitle | 108 条 | 字幕 |
## 需要手动完成的工作
### 文字动效(V2 轨,27 个镜头)
- 镜头 006:黑色背景上浮现问号和"时间不够用?"文字
- 镜头 008:"工具""方法论""意志力"三个词依次出现又被划掉
- ...
### 数据动效(V3 轨,7 个镜头)
- 镜头 020:数据可视化动画,"每 11 分钟被打断一次"统计图
- 镜头 021:时间轴动画,11 分钟标记被打断,25 分钟恢复区间
- ...
### Ken Burns 效果
- V1 轨所有静态图片需添加缓慢缩放动画
### BGM
- A2 轨预留,需手动添加背景音乐export RESOLVE_SCRIPT_API="/Library/Application Support/Blackmagic Design/DaVinci Resolve/Developer/Scripting/"
export RESOLVE_SCRIPT_LIB="/Applications/DaVinci Resolve/DaVinci Resolve.app/Contents/Libraries/Fusion/fusionscript.so"
export PYTHONPATH="$PYTHONPATH:$RESOLVE_SCRIPT_API/Modules/"Preferences → System → General → External scripting using: 选择 "Local"
| 参数 | 值 |
|---|---|
| 分辨率 | 1920x1080 |
| 帧率 | 30fps |
| 宽高比 | 16:9 |
scripts/generate_placeholders.py — 生成后期制作占位素材scripts/import_to_resolve.py — 达芬奇 API 导入主脚本scripts/import_subtitles.py — 字幕导入~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.