下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/org-qcbgmje1--short-video-montage.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @org-qcbgmje1/short-video-montage。何团涨的短视频混剪,用于短视频直播平台广告投放,成品是:粗剪后的剪映工程文件
阅读全文 (展开查看完整说明)
概述
短视频混剪素材包工作流
概述
将口播短视频与素材库画面匹配,生成可直接拖入剪映的素材包。包含三个核心阶段:
- 对标视频拆解(可选)——识别镜头切换点、提取关键帧、记录口播文案
- 素材匹配——按口播文案语义为每个镜头匹配最合适的素材画面
- 素材包生成——裁好片段、统一竖屏、提取口播音频、附带导入说明
阶段1:对标视频拆解
当用户提供了参考/对标视频时使用。
步骤
- 用 ffmpeg
select='gt(scene,threshold)'检测镜头切换点- 阈值先试 0.30,用户确认后调整(短视频通常 0.10-0.30)
- 过滤间距 < 0.3s 的误检闪帧
- 为每个镜头提取关键帧(镜头中点时间)
- ASR 提取口播文案(sherpa-onnx + Whisper-small)
- Windows 环境优先用 sherpa-onnx(纯 ONNX,不依赖 torch)
- 模型来源:hf-mirror.com / csukuangfj/sherpa-onnx-whisper-small
- 无 token 时间戳 → 按镜头切分音频单独识别
- 精校文案(结合关键帧自带字幕 + 视频主题 + 用户提供的准确文案)
- 生成
recipe.json
关键脚本
scripts/detect_shots.py— 镜头检测与关键帧提取scripts/transcribe_sherpa.py— sherpa-onnx ASR 转写scripts/generate_recipe.py— 生成 recipe.json
输出
recipe.json— 每镜头:shot_index / start_time / end_time / duration / keyframe_path / voiceoverkeyframes/— 每视频一个文件夹
阶段2:素材库匹配
前提条件
- 口播短视频(.mov/.mp4,含音频)
- 素材库(多个文件夹,含视频文件)
- 可选:对标视频 recipe.json(作风格参考)
步骤
- 口播文案分段
- 用户提供准确文案优先(ASR small 模型中文专有名词易错)
- 按语义/停顿分镜头,每段 1-3 秒
- 为每段标注关键词(如"沙漠""雪水""大米")
- 素材库遍历
- 遍历所有视频,提取中点关键帧
- cv2.imread 不支持中文路径 → 用
cv2.imdecode(np.fromfile(path, dtype=np.uint8), 1) - 计算视觉特征:HSV 8×8 直方图、亮度、三分法构图、边缘密度、主色调
- 保存到
material_features.json
- 素材匹配
- 语义匹配优先:关键词(沙漠→沙漠画面、雪水→水流画面、大米→米饭/稻田画面)
- 视觉匹配辅助:对标视频镜头关键帧作参考,HSV compareHist(CORREL)
- 约束优化:
- 优先未用过的素材(每镜头尽量不同)
- 避免连续 3 个同素材
- 同类型场景可连续(如连续展示不同米饭镜头)
- 置信度 < 0.6 标记"缺素材"
- 输出
fragment_plan.json— 每镜头选中素材matches.json— 每镜头 top 候选
关键脚本
scripts/extract_material_features.py— 素材库特征提取scripts/match_materials.py— 语义+视觉匹配scripts/copy_fragments.py— 复制选中素材
阶段3:生成剪映素材包(标准交付形式)
说明
剪映 11.1.0 及以后版本对 draft_content.json 加密,pyJianYingDraft 生成的草稿格式不兼容,FCPXML 导入也可能失败。"剪映素材包"是用户确认的标准交付形式。
交付内容
素材包文件夹内包含:
| 文件 | 说明 |
|---|---|
00_口播音频.aac | 从原口播视频提取的音频 |
01_xxxxx.mp4 ~ 15_xxxxx.mp4 | 每个镜头裁好的片段,统一 1080×1920 竖屏 |
导入说明.txt | 时间对照表,标明每段对应口播时间 |
用户操作
- 剪映新建草稿 → 比例选 9:16
- 按编号拖入
01_~15_视频片段 - 拖入
00_口播音频.aac - 每个片段可右键"替换素材"换画面
技术要点
- ffmpeg 裁剪:
ffmpeg -y -ss {start} -t {dur} -i input -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black" -r 30 -c:v libx264 -pix_fmt yuv420p -c:a aac -b:a 128k output(保留片段原始背景音) - 提取音频:
ffmpeg -y -i input.mov -vn -acodec aac -ar 48000 -ac 2 output.aac get_duration()优先用cv2.VideoCapture(Windows 比 ffmpeg regex 稳定)- 不要在 ffmpeg vf 中加
loopfilter(Windows subprocess 中可能导致崩溃)
关键脚本
scripts/gen_clips.py— 生成剪映素材包
环境依赖
- ffmpeg(通过
imageio_ffmpeg.get_ffmpeg_exe()获取) - Python: opencv-python, numpy, sherpa-onnx
- pip 国内镜像:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple - HuggingFace 国内镜像:
HF_ENDPOINT=https://hf-mirror.com
已知问题与规避
| 问题 | 原因 | 解决方案 |
|---|---|---|
| faster-whisper 段错误 | ctranslate2 Windows 兼容性问题 | 改用 sherpa-onnx |
| cv2.imread 中文路径失败 | OpenCV 不支持 UTF-8 路径 | 用 cv2.imdecode(np.fromfile(), 1) |
| ffmpeg loop filter 崩溃 | Windows subprocess 处理复杂 vf | 去掉 loop,改用短素材循环拼接 |
| 剪映草稿打不开 | 剪映 11.1.0 加密草稿格式 | 改用"剪映素材包"交付 |
| sandbox 拦截 os.remove | safe-delete 策略 | 用 ffmpeg -y 覆盖,不主动删除 |
| 路径含中文导致剪映识别失败 | 剪映长中文路径截断 | 素材包用短编号命名,不涉及工程文件路径 |