Loading

OBS + Shotcut + Kdenlive:用 CLI 把视频制作流程串起来

视频工具链的 CLI 困境

视频制作软件在所有专业软件里,对 Agent 最不友好——界面复杂、操作高度依赖鼠标、几乎不存在友好的命令行接口。

OBS Studio 没有官方 CLI。Shotcut 和 Kdenlive 虽然底层都用 MLT(Media Lovingly Toolkit),但官方没有把 MLT 接口暴露出来。结果就是:你想用命令行自动化视频流程,几乎只能靠屏幕录制然后 ffmpeg 后处理,质量大打折扣。

CLI-Anything 给这三款软件都生成了 CLI。这篇文章展示的是:三个不同的视频工具,通过 JSON 项目文件作为中间格式,能不能被 Agent 用命令行串联成一个完整的工作流。


工具链概览

OBS Studio  → 录制原始素材(obs-studio CLI 控制场景配置)
     ↓
Shotcut     → 粗剪、时间线编排(shotcut CLI 操作 MLT XML)
     ↓
Kdenlive    → 精调、色彩校正(kdenlive CLI 深层调色)
     ↓
ffmpeg      → 最终压制(直接调用系统命令)

三个工具各有分工:OBS 负责采集,Shotcut 负责快速剪辑,Kdenlive 负责精细调色,ffmpeg 负责最终输出。


第一步:OBS 场景配置

OBS 的 CLI 通过 obs-websocket 插件实现远程控制。如果你的 OBS 已经装了 websocket 插件,可以远程配置场景:

# 创建直播场景
$ cli-anything-obs-studio scene new --name "LiveStream"
✓ Created scene: LiveStream

# 添加来源(视频捕获、设备、窗口)
$ cli-anything-obs-studio source add \
  --scene LiveStream \
  --type video_capture \
  --name "Camera1" \
  --device "/dev/video0"

✓ Added video capture source: Camera1

$ cli-anything-obs-studio source add \
  --scene LiveStream \
  --type image \
  --name "Logo" \
  --file ./logo.png

✓ Added image source: Logo

# 设置 Logo 位置(左上角)
$ cli-anything-obs-studio source transform \
  --scene LiveStream \
  --source Logo \
  --position-x 0 \
  --position-y 0 \
  --width 320 \
  --height 180

✓ Transformed source: Logo (pos: 0,0 size: 320×180)

# 启动录制
$ cli-anything-obs-studio recording start
✓ Recording started: ./obs_recordings/live_20260322.mp4

如果你的场景不需要实时录制,可以直接导出 OBS 的场景配置:

$ cli-anything-obs-studio scene export \
  --scene LiveStream \
  --output ./live_scene.json

✓ Exported scene config: live_scene.json

第二步:Shotcut 粗剪

Shotcut 的项目文件格式是 MLT XML。CLI 操作的是这个 XML 文件,不需要真正打开 Shotcut GUI。

# 创建项目
$ cli-anything-shotcut project new --name "ProductDemo"
✓ Created project: ProductDemo.mlt

# 导入素材(通过本地文件路径)
$ cli-anything-shotcut clip add \
  --project ProductDemo.mlt \
  --file ./obs_recordings/live_20260322.mp4 \
  --name "raw_footage"

$ cli-anything-shotcut clip add \
  --project ProductDemo.mlt \
  --file ./product_shots.mp4 \
  --name "product_shots"

✓ Added clip: raw_footage (4m32s)
✓ Added clip: product_shots (1m15s)

# 粗剪:截取需要的片段
$ cli-anything-shotcut clip trim \
  --project ProductDemo.mlt \
  --clip raw_footage \
  --in 0:32 \
  --out 2:15

✓ Trimmed: raw_footage → 1m43s (in: 0:32, out: 2:15)

$ cli-anything-shotcut clip trim \
  --project ProductDemo.mlt \
  --clip product_shots \
  --in 0:05 \
  --out 0:45

✓ Trimmed: product_shots → 0:40s (in: 0:05, out: 0:45)

# 把片段放到时间线上
$ cli-anything-shotcut timeline add \
  --project ProductDemo.mlt \
  --track V1 \
  --clip raw_footage

$ cli-anything-shotcut timeline add \
  --project ProductDemo.mlt \
  --track V1 \
  --clip product_shots \
  --position 0:01:43

✓ Timeline: 2 clips, total duration 2:23

Shotcut 的中间文件(MLT XML)是可以直接用 melt(MLT 的命令行播放器/渲染器)渲染的:

# 用 melt 预览(不打开 GUI)
melt ProductDemo.mlt -consumer avformat:preview.mp4 vcodec=libx264

# 或者导出完整视频
melt ProductDemo.mlt -consumer avformat:./shotcut_export.mp4 \
  vcodec=libx264 crf=23 acodec=aac

第三步:Kdenlive 精细调色

Kdenlive 也用 MLT,但比 Shotcut 有更深的项目结构。CLI 用来做精细调色和 LUT 应用:

# 创建 Kdenlive 项目
$ cli-anything-kdenlive project new --name "ProductFinal"
✓ Created Kdenlive project: ProductFinal.kdenlive

# 导入 Shotcut 的中间文件(两个工具都是 MLT 生态,可以复用)
$ cli-anything-kdenlive clip add \
  --project ProductFinal.kdenlive \
  --file ./shotcut_export.mp4 \
  --name "main_clip"

✓ Added clip: main_clip

# 添加到时间线
$ cli-anything-kdenlive timeline add \
  --project ProductFinal.kdenlive \
  --track V1 \
  --clip main_clip

✓ Added to timeline: main_clip

# 调整速度(放慢到 0.75x)
$ cli-anything-kdenlive clip speed \
  --project ProductFinal.kdenlive \
  --clip main_clip \
  --speed 0.75

✓ Adjusted speed: 0.75x (duration: 3:11)

# 应用色彩校正
$ cli-anything-kdenlive color grade \
  --project ProductFinal.kdenlive \
  --clip main_clip \
  --brightness +10 \
  --contrast +15 \
  --saturation +5

✓ Applied color grade to main_clip

# 导出项目
$ cli-anything-kdenlive render \
  --project ProductFinal.kdenlive \
  --output ./final_export.mp4 \
  --preset "H.264 High Quality"

✓ Exported: ./final_export.mp4 (H.264, 1920×1080, 3:11)

第四步:ffmpeg 最终压制

# 加上片头片尾
ffmpeg -i ./final_export.mp4 \
  -i ./intro.mp4 \
  -i ./outro.mp4 \
  -filter_complex \
    "[0:v][1:v][2:v]concat=n=3:v=1:a=0[outv]" \
    "[0:a][1:a][2:a]concat=n=3:v=0:a=1[outa]" \
  -map "[outv]" -map "[outa]" \
  -c:v libx264 -crf 20 -preset slow \
  -c:a aac -b:a 192k \
  ./product_demo_final.mp4

Agent 视角:完整的视频工作流

把上面的流程整合到一个 Agent 任务里:

帮我制作一个产品演示视频:
1. 用 OBS 配置直播场景(摄像头+Logo)
2. 录制 5 分钟的原始素材(存为 raw_footage.mp4)
3. 用 Shotcut 截取素材中 1-3 分钟的部分,加入产品图片(product.jpg)
4. 用 Kdenlive 做色彩校正,调整为 16:9 竖屏比例
5. 用 ffmpeg 加上片头(intro.mp4)和片尾(outro.mp4)
6. 输出最终视频到 ./output/final.mp4

Agent 收到这个任务后,会自动分解成上面的具体命令序列,用 JSON 模式获取每个步骤的状态,然后按顺序执行。整个过程不需要人在 GUI 里点一下鼠标。


为什么 JSON 文件是粘合剂

回顾整个工作流,每个工具之间传递数据的媒介是项目文件

OBS 场景配置 (JSON)
    ↓
Shotcut 项目 (MLT XML)
    ↓
Kdenlive 项目 (MLT XML)
    ↓
ffmpeg 命令参数 (命令行)

这种模式的好处是:每个工具都是独立的,可以单独测试,单独替换。如果你不想用 Shotcut,换成 Kdenlive 的粗剪功能也可以。JSON 和 MLT XML 作为中间格式,让工具链变成了可插拔的。

posted @ 2026-03-25 15:32  饭勺oO  阅读(1437)  评论(0)    收藏  举报