如何用CLI将OBS、Shotcut、Kdenlive串联成视频制作全流程?
摘要:视频工具链的 CLI 困境 视频制作软件在所有专业软件里,对 Agent 最不友好——界面复杂、操作高度依赖鼠标、几乎不存在友好的命令行接口。 OBS Studio 没有官方 CLI。Shotcut 和 Kdenlive 虽然底层都用 ML
视频工具链的 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 作为中间格式,让工具链变成了可插拔的。
