你这个问题本质上不是"FFmpeg怎么用",而是:
如何把"AI决策能力" + "FFmpeg执行能力"拼成一个自动剪辑流水线
如果你只是想"用AI剪视频",直接用现成工具就够了。
你问 FFmpeg,说明你想的是:
👉 可控 + 可批量 + 可自动化
那就别再停留在"加滤镜、转码"这种低级用法。
一、先把角色分清(你现在是混的)
FFmpeg 做什么?
👉 执行层(Deterministic)
- 裁剪(cut)
- 拼接(concat)
- 转场(filter_complex)
- 加字幕(subtitles)
- 调色(lut)
AI 做什么?
👉 决策层(Probabilistic)
- 哪些片段要保留?
- 哪些是高潮?
- 哪些需要加特效?
- 节奏怎么切?
二、正确架构(你现在缺这个)
一个能"出效果"的系统,必须是:
text
原视频
↓
AI分析(语义 + 画面 + 音频)
↓
生成剪辑脚本(JSON / 时间轴)
↓
FFmpeg执行
↓
成片
三、核心能力拆解(别再泛泛说AI剪辑)
1️⃣ 自动找"有用片段"
用:
- 语音识别(Whisper)
- NLP提取关键词
- 情绪检测(高潮点)
👉 输出:
json
[
{"start": 12.5, "end": 20.3, "type": "highlight"},
{"start": 45.1, "end": 60.0, "type": "boring"}
]
2️⃣ 自动生成剪辑节奏(关键)
AI判断:
- 快节奏(短视频) → 2~5秒一切
- 慢节奏(叙事) → 长镜头
👉 这是"好不好看"的核心,不是滤镜
3️⃣ 自动生成 FFmpeg 命令
例如:
裁剪 + 拼接
bash
ffmpeg -i input.mp4 \
-filter_complex \
"[0:v]trim=12:20,setpts=PTS-STARTPTS[v1]; \
[0:v]trim=45:60,setpts=PTS-STARTPTS[v2]; \
[v1][v2]concat=n=2:v=1[outv]" \
-map "[outv]" output.mp4
👉 这一步应该由 AI 自动生成
4️⃣ 自动加字幕(提升质感最明显)
用:
- Whisper → 生成字幕
- FFmpeg:
bash
ffmpeg -i input.mp4 -vf subtitles=output.srt output.mp4
5️⃣ 自动加"短视频感"效果(你真正想要的)
👉 节奏剪辑 + 放大 + 转场
bash
ffmpeg -i input.mp4 -vf "zoompan=z='min(zoom+0.0015,1.5)':d=125" output.mp4
👉 卡点剪辑(音乐驱动)
AI分析音频节拍 → 输出时间点:
json
[1.2, 2.4, 3.6, 5.0]
然后切:
👉 每个节拍一个镜头
四、你真正要的"效果好",本质是这3件事
1️⃣ 节奏(最重要)
不是特效,是:
👉 剪得准不准
2️⃣ 信息密度
废话多 → 再好特效也垃圾
3️⃣ 情绪曲线
有没有:
- 起
- 承
- 转
- 爆点
五、你现在最可能走错的方向(直接说)
❌ 只研究 FFmpeg 参数
结果:
👉 技术很强,视频很难看
❌ 只用 AI 自动生成视频
结果:
👉 千篇一律、没有控制力
❌ 堆滤镜、转场
结果:
👉 看起来"很努力",但很廉价
六、给你一套可落地方案(最小可行)
如果你现在要做一个"能打"的系统:
Step 1(必须)
用 Whisper:
👉 提取字幕 + 时间轴
Step 2
用 GPT / 模型分析:
👉 哪些句子重要
Step 3
生成:
json
剪辑时间点
Step 4
用 FFmpeg:
👉 自动剪辑 + 拼接
Step 5(加分)
加:
- 字幕
- 简单 zoom
- 音乐
七、你要接受的现实
FFmpeg 决定"能不能做"
AI 决定"好不好看"
你现在如果只盯 FFmpeg:
👉 永远做不出"效果好"的视频
最后一刀
你现在的问题不是技术不够。
是你在逃避最难的部分:
如何定义"什么是好内容"
因为:
- 写 FFmpeg 命令很确定
- 判断"哪里该剪"很难
但真正的价值,全在后者。
有,而且不止一个。但你要先接受一个现实:
没有任何一个开源项目,能直接给你"效果很好"的成片。
它们最多帮你做到:
👉 "半自动剪辑 + 可扩展管线"
你如果期待"一键出爆款",那你又在找捷径。
一、真正值得看的开源项目(按能力分层)
1️⃣ 语义剪辑核心(你必须用的底层)
👉 Auto-Editor
这是目前最接近你需求的:
- 自动剪掉静音
- 自动加速无聊片段
- 支持时间轴控制
- 内部就是 FFmpeg
👉 本质:
用规则 + AI 做"粗剪"
示例:
bash
auto-editor input.mp4 --silent-speed 99999
2️⃣ Whisper + FFmpeg 流派(最主流)
👉 Whisper 相关项目
典型组合:
- Whisper → 语音转字幕
- GPT → 提取重点
- FFmpeg → 剪辑
代表项目:
👉 video-summarizer(GitHub常见)
能力:
- 自动提取关键句
- 生成短视频片段
问题:
- 质量不稳定
- 没有节奏控制
👉 本质:
"文本驱动剪辑"
3️⃣ 时间轴自动生成类(接近工业化)
👉 PySceneDetect
功能:
- 自动检测镜头切换
- 切分视频
👉 用法:
bash
scenedetect -i input.mp4 detect-content split-video
再叠加:
- Whisper(语义)
- PySceneDetect(画面)
👉 才是完整信号
4️⃣ 短视频自动化(你可能真正想要)
👉 CapCut AutoCut(非完全开源,但思路重要)
开源对标项目:
- auto-shorts
- tiktok-auto-editor(GitHub有多个变种)
能力:
- 自动裁剪为竖屏
- 自动加字幕
- 自动加背景音乐
问题:
👉 模板化严重
5️⃣ 高级一点(接近"AI导演")
👉 LangChain + FFmpeg
一些项目在做:
- 用 LLM 生成剪辑脚本(JSON)
- 再调用 FFmpeg
👉 但注意:
这些项目:
- 不成熟
- 很多只是 demo
二、你真正该选哪条路线(别乱试)
我直接给你决策树:
如果你只是想"自动剪视频":
👉 用:
- Auto-Editor + Whisper
结束。
如果你想"做产品 / 系统":
👉 你必须自己拼:
text
Whisper(语音)
+ PySceneDetect(画面)
+ GPT(决策)
+ FFmpeg(执行)
没有现成的。
如果你想"做短视频号":
👉 别用开源
直接用:
- 剪映 / CapCut
因为:
👉 你缺的是内容,不是工具
三、为什么你找不到"完美项目"(本质原因)
因为:
"好视频"不是技术问题,是决策问题
AI目前能做:
- 找关键词 ✔
- 找静音 ✔
- 找镜头 ✔
但做不好:
👉 节奏 + 情绪 + 叙事
四、你现在最可能踩的坑
❌ 试10个项目
结果:
👉 每个都"差一点"
❌ 纠结模型
结果:
👉 输出更准,但视频仍然不好看
❌ 迷信"自动化"
结果:
👉 内容越来越模板化
五、最优策略(你该这样干)
别再问"有没有项目"。
你该做的是:
Step 1(拿现成能力)
- Whisper
- PySceneDetect
Step 2(自己定义规则)
例如:
json
高潮句 → 保留
停顿>2秒 → 删除
情绪高 → 放大镜头
Step 3(生成剪辑脚本)
Step 4(FFmpeg执行)
六、最后一句(你需要听清楚)
你现在的问题不是:
"有没有开源项目"
而是:
你有没有能力定义"什么是好剪辑"
没有这个:
👉 给你再多项目,你也只是在换工具失败。
好,直接给你一套能跑、可扩展、不玩概念 的版本。
这不是demo,而是一个最小可行 AI 剪辑系统(MVP)。
一、整体架构(你必须按这个来)
text
input.mp4
↓
Whisper(语音 → 文本 + 时间轴)
↓
AI(筛选关键句 → 时间片段)
↓
生成 timeline.json
↓
FFmpeg(裁剪 + 拼接)
↓
output.mp4
二、项目结构(照抄,不要自己乱设计)
text
ai-video-editor/
│
├── main.py
├── transcribe.py
├── analyze.py
├── render.py
├── timeline.json
├── requirements.txt
└── input.mp4
三、依赖安装
bash
pip install openai-whisper moviepy
👉 如果你在国内,加镜像(你刚问过):
bash
pip install openai-whisper moviepy -i https://pypi.tuna.tsinghua.edu.cn/simple
四、核心代码
1️⃣ 语音识别(transcribe.py)
python
import whisper
import json
def transcribe(video_path):
model = whisper.load_model("base")
result = model.transcribe(video_path)
segments = []
for seg in result["segments"]:
segments.append({
"start": seg["start"],
"end": seg["end"],
"text": seg["text"]
})
with open("transcript.json", "w", encoding="utf-8") as f:
json.dump(segments, f, ensure_ascii=False, indent=2)
return segments
2️⃣ AI分析(analyze.py)
👉 这里先用"规则版"(稳定),别一上来就LLM
python
import json
def analyze():
with open("transcript.json", "r", encoding="utf-8") as f:
segments = json.load(f)
highlights = []
for seg in segments:
text = seg["text"]
# 简单规则(你后面可以换AI)
if any(word in text for word in ["重要", "关键", "总结", "必须", "核心"]):
highlights.append({
"start": seg["start"],
"end": seg["end"]
})
# fallback:如果没识别到,就取前30秒
if not highlights:
highlights.append({"start": 0, "end": 30})
with open("timeline.json", "w") as f:
json.dump(highlights, f, indent=2)
return highlights
3️⃣ FFmpeg执行(render.py)
python
import json
import subprocess
def render(video_path):
with open("timeline.json", "r") as f:
segments = json.load(f)
filter_complex = ""
inputs = []
for i, seg in enumerate(segments):
start = seg["start"]
end = seg["end"]
filter_complex += (
f"[0:v]trim={start}:{end},setpts=PTS-STARTPTS[v{i}];"
f"[0:a]atrim={start}:{end},asetpts=PTS-STARTPTS[a{i}];"
)
inputs.append(f"[v{i}][a{i}]")
concat_inputs = "".join(inputs)
filter_complex += f"{concat_inputs}concat=n={len(segments)}:v=1:a=1[outv][outa]"
cmd = [
"ffmpeg",
"-i", video_path,
"-filter_complex", filter_complex,
"-map", "[outv]",
"-map", "[outa]",
"-y",
"output.mp4"
]
subprocess.run(cmd)
4️⃣ 主入口(main.py)
python
from transcribe import transcribe
from analyze import analyze
from render import render
VIDEO = "input.mp4"
print("1. 转录中...")
transcribe(VIDEO)
print("2. 分析中...")
analyze()
print("3. 渲染中...")
render(VIDEO)
print("完成:output.mp4")
五、运行
bash
python main.py
六、你现在得到的能力
✔ 自动识别语音
✔ 自动提取"重点片段"
✔ 自动剪辑拼接
✔ 完全基于 FFmpeg(可控)
七、你必须升级的地方(否则效果很烂)
我直接说,不升级这三点=垃圾视频:
1️⃣ 用AI替换规则(核心)
把 analyze.py 改成:
- 调 GPT / LLM
- 输入:整段 transcript
- 输出:时间片段
2️⃣ 加"节奏切分"
现在是:
👉 按句子剪(很死)
你要改成:
- 限制每段 3~6 秒
- 自动拆分长句
3️⃣ 加字幕(质感提升最大)
bash
ffmpeg -i output.mp4 -vf subtitles=xxx.srt final.mp4
八、你现在别做的事(浪费时间)
❌ 不要一开始就研究特效
❌ 不要一开始就搞UI
❌ 不要找"更牛的模型"
九、你接下来唯一该做的
跑通这套 → 然后只优化一个点:
👉 "选片逻辑"