视频智能切片工具:从长视频中按主题切出3-5分钟(最长8分钟)的独立短视频,适用于自媒体、演讲、课程、会议等场景。完整流程:关键帧采样→视觉定位→Whisper音频转写→内容分析→ffmpeg精准切割,支持中文语音识别(Whisper + MPS加速)。
从长视频中自动定位目标演讲/段落,切割出适合自媒体发布的独立短视频(3-5min,最长8min)
推荐模型:
glm-5v-turbo| 兼容: 所有多模态 Agent
能力说明关键帧采样均匀/精细两种模式,快速定位目标时间段Whisper 转写本地中文语音识别,MPS GPU 加速,支持繁简转换内容智能分析基于转写文本自动设计切片方案(主题+时间戳)精准切割ffmpeg H.264 重编码,句子边界对齐,高质量输出批量处理支持一次规划多个切片,一键批量输出
Step 1 — 获取视频信息
bash
# 获取时长、分辨率、编码格式
ffmpeg -i <video.mp4> 2>&1 | grep -E "Duration|Stream|Video"
Step 2 — 粗粒度关键帧采样(每5分钟一帧,把握整体结构)
bash
VIDEO="path/to/video.mp4"
OUT_DIR="./frames"
mkdir -p "$OUT_DIR"
for t in $(seq 0 5 200); do
ts=$(printf "%02d:%02d:00" $((t/60)) $((t%60)))
ffmpeg -y -ss "$ts" -i "$VIDEO" -frames:v 1 -q:v 2 "${OUT_DIR}/frame_${ts}.jpg" 2>/dev/null
done
Step 3 — 目视检查关键帧 → 用 Read 工具查看每帧图片 → 定位目标演讲者的大致时间段
Step 4 — 过渡区间精细采样(每2分钟一帧)
bash
# 在疑似起始/结束区间前后精细采样
for m in 38 40 42 44 46; do
ffmpeg -y -ss "00:${m}:00" -i "$VIDEO" -frames:v 1 -q:v 2 "./frames/fine_00_${m}.jpg" 2>/dev/null
done
Step 5 — 提取音频 + Whisper 转写
这是 最关键的步骤。对于长视频(>30min), 必须先提取音频片段再转写:
bash
# 5A: 先用 ffmpeg 提取目标区间的音频(比直接喂视频快10倍)
ffmpeg -y -i "$VIDEO" -ss 00:40:00 -to 01:07:00 \
-vn -acodec copy ./transcript/segment.aac
python
# 5B: Whisper 转写音频(Python)
import os, ssl, certifi, json, torch, whisper
from opencc import OpenCC
# macOS SSL 必需修复
ssl._create_default_https_context = lambda: ssl.create_default_context(cafile=certifi.where())
os.environ['SSL_CERT_FILE'] = certifi.where()
AUDIO = "./transcript/segment.aac"
START_OFFSET = 2400 # 音频起点对应的全视频偏移量(秒)
device = "mps" if torch.backends.mps.is_available() else "cpu"
model = whisper.load_model("base", device=device)
result = model.transcribe(AUDIO, language="zh", verbose=False,
initial_prompt="根据视频主题设置关键词提示")
# 繁简转换 + 时间戳校正
cc = OpenCC('t2s')
segments = []
for seg in result["segments"]:
segments.append({
"start": round(seg["start"] + START_OFFSET, 1),
"end": round(seg["end"] + START_OFFSET, 1),
"text": cc.convert(seg["text"].strip())
})
# 保存结构化结果
with open("./transcript/speech.json", "w", encoding="utf-8") as f:
json.dump(segments, f, ensure_ascii=False, indent=2)
print(f"[OK] 转写完成! {len(segments)} 个片段")
Step 6 — 分析转写文本,设计切片方案
基于 speech.json 中的带时间戳文本,Agent 需要设计合理的切片方案:
原则说明时长控制每段 3-5 分钟,最长 不超过 8 分钟单一主题每段聚焦一个明确的核心论点/概念开头 Hook以金句/故事/数据冲击开头,前3秒抓住注意力结尾完整在句子自然结束处切断,不截断语义可选过渡段间允许 5-10 秒重叠,保证衔接自然
类型时长适用场景开场震撼篇4-5min背景、问题引入、数据冲击核心概念篇5-6min主要论点、定义解释、框架介绍高观点/新观点篇4-5min哲学思考、范式转换、认知升级实践指南篇4-5min原则、方法论、操作步骤、案例展望总结篇3-4min未来趋势、行动呼吁、价值升华
将方案保存为 JSON 供切割脚本使用:
json
[
{
"clip_id": 1,
"start": "00:40:00",
"end": "00:45:00",
"title": "教育为什么必须变",
"theme": "开场震撼",
"hook": "工业时代的教育体系已经过时了...",
"duration_sec": 300
}
]
同时生成人类可读的 clips_plan.md 文档。
Step 7 — ffmpeg 逐段精准切割
bash
V="/path/to/source.mp4"
O="./output"
mkdir -p "$O"
# 单段切割命令模板(H.264重编码确保精确切割点)
ffmpeg -y -ss <START_TIME> -to <END_TIME> -i "$V" \
-c:v libx264 -preset fast -crf 18 \
-c:a aac -b:a 128k \
"${O}/clipN_<标题>.mp4"
参数说明:
参数值含义-c:v libx264H.264兼容性最好的视频编码-preset fastfast编码速度与质量平衡点-crf 1818高质量(越小越好,0-51,推荐 17-23)-c:a aacAAC通用音频编码-b:a 128k128kbps音频质量足够好
批量切割脚本:
bash
#!/bin/bash
V="$HOME/Downloads/source_video.mp4"
OUT="./output"
mkdir -p "$OUT"
# 从 clips_plan.json 读取并切割
while IFS=',' read -r start end filename title; do
echo ">>> 切割: $title ($start -> $end)"
ffmpeg -y -ss "$start" -to "$end" -i "$V" \
-c:v libx264 -preset fast -crf 18 \
-c:a aac -b:a 128k \
"${OUT}/${filename}.mp4" 2>/dev/null
done < clips.csv
echo "=== 全部完成 ==="
ls -lh "$OUT"/*.mp4
Skill 附带 Python 一键脚本,支持基础自动化:
bash
# 完整工作流(采样帧 + 转写短视频 + 输出结构化数据)
python3 {baseDir}/scripts/video_slicer.py <视频文件路径> [输出目录]
# 示例
python3 {baseDir}/scripts/video_slicer.py ~/Downloads/演讲视频.mp4 ./my_output
注意: 对于超过 30 分钟的视频,脚本会跳过全量转写(避免超时),需要 Agent 手动指定时间范围后调用
transcribe_segment()函数。
工具版本要求用途安装方式ffmpeg>= 5.0视频/音频处理核心引擎brew install ffmpegPython>= 3.10Whisper 运行环境系统 / condaopenai-whisper>= 20231117OpenAI 本地语音转文字模型pip install openai-whisperopencc-python-reimplemented>= 0.1.2繁体中文→简体转换pip install opencc-python-reimplementedPyTorch>= 2.0Whisper 底层依赖(含 MPS 支持)pip install torch
bash
pip install openai-whisper opencc-python-reimplemented torch
brew install ffmpeg # macOS
模型大小MPS速度*中文质量推荐场景tiny39MB最快 (~5x)差仅用于粗略定位,不推荐生产使用base139MB快 (~1x)中等良好日常使用推荐 ✅ 默认选择small461M中等 (~0.5x)较好需要高精度转写时medium1.5GB慢 (~0.15x)好专业级(慎用,非常慢)
\* MPS 速度为相对于 base 模型在 Apple M 系列芯片上的大致倍率
完成后的标准输出目录结构:
text
project_output/
├── output/ # ✅ 最终切片视频(交付物)
│ ├── clip1_<主题>.mp4 # 每个 3-8 min,H.264 编码
│ ├── clip2_<主题>.mp4
│ └── clipN_<主题>.mp4
├── frames/ # 采样关键帧(调试/定位用)
│ ├── frame_00:00:00.jpg
│ ├── frame_00:05:00.jpg
│ └── fine_00_40.jpg # 精细采样帧
├── transcript/ # 转写文本数据
│ ├── speech.json # 结构化 JSON(含精确时间戳)
│ ├── speech.txt # 可读纯文本
│ └── segment.aac # 提取的音频片段
└── clips_plan.md # 切片方案文档(人工可审阅)
A: 这是新手最容易踩的坑! 核心优化技巧——先提取音频再转写:
bash
# ❌ 错误:直接喂 3 小时视频给 Whisper(可能需要 30min+ 或直接 OOM)
whisper long_video.mp4 --model base --language zh
# ✅ 正确:先用 ffmpeg 提取 27 分钟音频片段,再转写(只需 2-3min)
ffmpeg -y -i long_video.mp4 -ss 00:40 -to 01:07 -vn -acodec copy segment.aac
whisper segment.aac --model base --language zh
A: 使用 re-encoding 模式( -c:v libx264)而非 stream copy( -c:v copy)。重编码模式能确保切割点的帧级精确度。
A: 利用 Whisper 转写的 sentence-level 时间戳( segments[].end),找到最近的句子结束时间作为切割终点。 不要 用任意秒数切割。
A: 这是正常现象(Whisper 训练数据包含大量繁体文本)。使用 OpenCC 的 t2s 模式即可自动转换为简体。
A: 在导入 whisper 之前添加以下代码:
python
import ssl, certifi
ssl._create_default_https_context = lambda: ssl.create_default_context(cafile=certifi.where())
os.environ['SSL_CERT_FILE'] = certifi.where()
A: 使用 -c:v libx264 重编码为 H.264 即可解决兼容性问题。
版本日期变更说明1.0.02026-05-16初始版本,基于中关村「教育+科技」创新周实战验证1.1.02026-05-16增加 ClawHub 元数据规范,优化 description 触发词1.2.02026-05-16完整用户手册,标准化输出格式,兼容性增强
{baseDir}/README.md{baseDir}/scripts/video_slicer.py