如何用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 作为中间格式,让工具链变成了可插拔的。