Viral Reels Creator

基于ffmpeg的多平台短视频自动化制作工具,支持剪辑、配乐、字幕、特效及一键多平台导出。

已扫描
适合谁
短视频创作者、自媒体运营者
不适合谁
无视频编辑经验的新手、需要本地离线运行的用户
国内可用性
需网络配置。可能需要网络配置或第三方服务可访问。
安装难度
新手友好(★☆☆)。基于终端操作、依赖、API Key 和本地环境要求的初步判断。

安装与下载

openclaw skills install @yash-kavaiya/viral-reels-creator

Skill 说明

命令、参数、文件名以原文为准

Viral Reels 创作者 — 全视频制作套件

一个基于 ffmpeg 的综合性技能,用于创建爆款 Instagram Reels、TikTok 视频和 YouTube Shorts,包含从原始素材中提取最佳片段、节拍同步剪辑、多平台导出以及病毒式内容策略。


快速入门 — 在执行任何操作前请先阅读

  1. 安装依赖项(如尚未安装):
   apt-get update && apt-get install -y ffmpeg fonts-noto fonts-noto-color-emoji fontconfig
   # 用于场景检测 + 节拍同步:
   pip install --break-system-packages opencv-python numpy librosa soundfile
  1. 检查上传的文件:查看 /mnt/user-data/uploads/ 目录中的用户资源。
  2. 将资源复制到 /home/claude/ 再进行处理。
  3. 所有最终视频输出至 /mnt/user-data/outputs/ 并提供给用户。

平台规格(主推:Instagram Reels)

属性Instagram / TikTok / YT Shorts
分辨率1080×1920(9:16 纵向)
帧率30 fps(YouTube Shorts 使用 60fps)
最大时长90秒(IG/FB)· 60秒(TikTok/YT/Snap)
编码格式H.264(libx264)
音频编码AAC,44100 Hz,立体声
像素格式yuv420p
容器格式.mp4

基础输出参数(始终使用):

-c:v libx264 -preset slow -crf 18 -pix_fmt yuv420p -r 30 -c:a aac -ar 44100 -ac 2 -movflags +faststart

获取完整平台特定规格及导出命令 → **references/platform-specs.md**


工作流程决策树

用户请求
├── "寻找最佳片段 / 高光时刻"?
│   └── 运行 scripts/scene-detect.py → 获取时间戳 → 裁剪片段
├── "让它变得爆款" / "病毒式钩子"?
│   └── 加载 references/viral-hooks.md → 应用钩子公式
├── 单个视频输入?
│   ├── 裁剪/剪辑           → 参见:裁剪章节
│   ├── 添加字幕           → 加载 references/caption-templates.md
│   ├── 添加音乐           → 参见:音频混音章节
│   ├── 节拍同步剪辑       → 加载 references/beat-sync.md + scripts/beat-detect.py
│   ├── 色调调校           → 加载 references/color-grading.md
│   ├── 速度变化           → 参见:速度渐变章节
│   ├── 添加特效/动画      → 加载 references/animations.md
│   └── 仅调整尺寸         → 参见:缩放章节
├── 多个视频输入?
│   └── 合并并添加转场     → 加载 references/transitions.md
├── 图片输入(幻灯片)?
│   └── 使用肯·伯恩斯效果 / 幻灯片 → 参见:幻灯片章节
├── 导出多个平台?
│   └── 运行 scripts/batch-export.sh → 一次性导出所有平台
├── 从零开始制作完整 Reel?
│   └── 组合所有步骤:场景检测 → 钩子 → 内容 → 节拍同步 → 字幕 + 音乐
└── "让它看起来更好" / 通用需求?
    └── 自动缩放 + 色调调校(黄金时段或克拉伦登风格)+ 字幕模板 + 淡入淡出转场

重要提示:对于字幕、动画、色调调校、转场、病毒式策略、节拍同步及平台规格 —— 在生成 ffmpeg 命令前,请务必查阅对应参考文件


提取最佳片段(场景检测)

当用户拥有原始素材并希望提取最佳片段时:

# 找出前 10 个视觉上最吸引人的片段
python scripts/scene-detect.py raw_footage.mp4 --top 10 --thumbnail

# 提取指定数量的片段用于 30 秒 Reel(每段 5 秒 = 6 个片段)
python scripts/scene-detect.py raw_footage.mp4 --top 6 --clip-duration 5 --thumbnail

# 针对快节奏内容且场景切换频繁的情况
python scripts/scene-detect.py video.mp4 --threshold 0.2 --top 15

# 输出为 JSON 以供后续处理
python scripts/scene-detect.py video.mp4 --json > moments.json

然后根据脚本输出的 ffmpeg 命令逐一裁剪每个片段。


病毒式策略 — 快速参考

加载 **references/viral-hooks.md** 获取完整策略。核心原则如下:

  1. 3 秒内设置钩子 — 通过模式打断、大胆断言或悬念制造文字叠加
  2. 在 7 秒、12 秒、20 秒、25 秒设置留存触发点,防止观众流失
  3. 所有剪辑与节拍同步 — 提高观看时长和分享率的最关键因素
  4. 结尾设置循环 — 最后一帧应几乎与第一帧一致,促使观众重新观看
  5. 始终显示屏幕文字 — 85% 的观众在无声音状态下观看

爆款 Reel 公式:

[0–3秒]  钩子     → 大胆的文字断言或模式打断
[3–7秒]  建立背景 → 说明“你将看到什么”
[7–20秒] 内容主体 → 核心价值,快速剪辑,画面多样性
[20–25秒] 收尾     → 揭示、转变、笑点
[25–30秒] 行动号召 → “收藏这个”,“评论 X 获取第二部分”

节拍同步剪辑 — 快速参考

加载 **references/beat-sync.md** 获取完整工作流程。

# 步骤 1:检测节拍
python scripts/beat-detect.py music.mp3
# → 输出节拍时间戳,例如:0.469, 0.938, 1.407, 1.876...

# 步骤 2:使用节拍时间戳作为剪辑点
# (详见 beat-sync.md 中的 ffmpeg 多片段合成方法)

# 步骤 3:在每个节拍处添加缩放脉冲(120 BPM = 2Hz)
ffmpeg -i video.mp4 -filter_complex "
  zoompan=z='1+0.05*abs(sin(PI*t*2))':
    x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':d=1:s=1080x1920:fps=30
" OUTPUT_FLAGS zoom_pulse.mp4

核心操作

缩放 — 适配 9:16 纵向画幅

# 缩放 + 裁剪(填充画面 — 推荐用于 Reels)
ffmpeg -i input.mp4 -vf "scale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920" OUTPUT_FLAGS output.mp4

# 模糊背景填充(电影感 — 适用于横屏源素材)
ffmpeg -i input.mp4 -filter_complex "
[0:v]scale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920,boxblur=20:5[bg];
[0:v]scale=1080:1920:force_original_aspect_ratio=decrease[fg];
[bg][fg]overlay=(W-w)/2:(H-h)/2
" OUTPUT_FLAGS output.mp4

裁剪 — 剪辑片段

快速剪辑(复制 — 无需重新编码)

ffmpeg -ss 00:00:05 -i input.mp4 -t 00:00:30 -c copy trimmed.mp4

精确剪辑(重新编码以保证帧精度)

ffmpeg -i input.mp4 -ss 00:00:05 -to 00:00:35 OUTPUT_FLAGS trimmed.mp4

速度变速 — 慢动作与快进

# 0.5倍慢动作
ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=2.0*PTS[v];[0:a]atempo=0.5[a]" -map "[v]" -map "[a]" OUTPUT_FLAGS slow.mp4

# 2倍速
ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" OUTPUT_FLAGS fast.mp4

# 速度渐变:正常 → 慢速 → 正常
ffmpeg -i input.mp4 -filter_complex "
[0:v]trim=0:3,setpts=PTS-STARTPTS[v1];
[0:v]trim=3:6,setpts=2*(PTS-STARTPTS)[v2];
[0:v]trim=6:10,setpts=PTS-STARTPTS[v3];
[v1][v2][v3]concat=n=3:v=1:a=0[v]
" -map "[v]" OUTPUT_FLAGS ramp.mp4

音频混音 — 添加背景音乐

# 混合原始音频 + 背景音乐(背景音乐音量为30%)
ffmpeg -i video.mp4 -i music.mp3 -filter_complex "
[0:a]volume=1.0[voice];
[1:a]volume=0.3[music];
[voice][music]amix=inputs=2:duration=shortest
" -map 0:v OUTPUT_FLAGS output.mp4

# 背景音乐淡入淡出
ffmpeg -i video.mp4 -i music.mp3 -filter_complex "
[1:a]afade=t=in:st=0:d=3,afade=t=out:st=27:d=3,volume=0.3[music];
[0:a]volume=1.0[voice];
[voice][music]amix=inputs=2:duration=shortest
" -map 0:v OUTPUT_FLAGS output.mp4

相册视频 — 图片转视频

# 电影推拉效果(缩放+平移)
ffmpeg -loop 1 -i image.jpg -vf "
scale=2160:3840,
zoompan=z='min(zoom+0.001,1.5)':x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':d=150:s=1080x1920:fps=30
" -t 5 OUTPUT_FLAGS kenburns.mp4

高级功能 — 参考文件

在生成涉及以下功能的 ffmpeg 命令前,请务必阅读对应参考文件。

功能参考文件内容说明
病毒式传播策略与钩子references/viral-hooks.md钩子公式、格式、留存技巧、行动号召(CTA)
节拍同步剪辑references/beat-sync.md节拍拼接、缩放脉冲、高潮特效
多平台导出references/platform-specs.md平台规格、安全区域、画幅比例变体
字幕模板references/caption-templates.md10 种 Instagram 风格字幕设计
动画效果(50+种)references/animations.md50+ 种文字/视频动画:弹跳、打字机等
色彩调校references/color-grading.md20 种无 LUT 色彩调校及 Instagram 滤镜
过场转场references/transitions.md12+ 种转场效果:淡入淡出、擦除、缩放、故障等

脚本工具

脚本文件用途
scripts/scene-detect.py从原始素材中识别最佳或最具病毒传播潜力的片段
scripts/beat-detect.py检测节拍时间点,用于精准同步剪辑
scripts/batch-export.sh将单个短视频批量导出至 Instagram、TikTok、YouTube 等平台

多效果叠加使用

-filter_complex 中组合多个效果时,顺序至关重要:

1. 缩放/裁剪至 1080x1920
2. 应用色彩调校
3. 应用速度变化
4. 应用动画/特效
5. 叠加字幕/文字
6. 添加多片段之间的转场

示例:完整的病毒式短视频制作流程

ffmpeg -i clip1.mp4 -i music.mp3 -filter_complex "
[0:v]scale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920,
eq=brightness=0.06:saturation=1.4:contrast=1.05,
vignette=PI/5,
drawtext=text='Wait for it...':fontfile=/usr/share/fonts/truetype/noto/NotoSans-Bold.ttf:
  fontsize=72:fontcolor=white:borderw=4:bordercolor=black:
  x=(w-tw)/2:y=(h-th)/2:enable='between(t,0,3)',
drawtext=text='Your Caption Here':fontfile=/usr/share/fonts/truetype/noto/NotoSans-Bold.ttf:
  fontsize=56:fontcolor=white:borderw=3:bordercolor=black:
  x=(w-tw)/2:y=h-th-250:enable='between(t,3,28)',
drawtext=text='Save this!':fontfile=/usr/share/fonts/truetype/noto/NotoSans-Bold.ttf:
  fontsize=40:fontcolor=yellow:borderw=3:bordercolor=black:
  x=(w-tw)/2:y=h-th-120:enable='between(t,25,30)',
fade=t=in:st=0:d=1,fade=t=out:st=28:d=2[v];
[1:a]afade=t=in:st=0:d=2,afade=t=out:st=27:d=3,volume=0.4[a]
" -map "[v]" -map "[a]" -t 30 \
-c:v libx264 -preset slow -crf 18 -pix_fmt yuv420p -r 30 \
-c:a aac -ar 44100 -ac 2 -movflags +faststart \
/mnt/user-data/outputs/reel_final.mp4

多平台导出

完成视频制作后,可一键导出至所有目标平台:

bash scripts/batch-export.sh /mnt/user-data/outputs/reel_final.mp4 my_reel all
# 输出文件:my_reel_instagram.mp4, my_reel_tiktok.mp4, my_reel_youtube_shorts.mp4,
#           my_reel_facebook.mp4, my_reel_snapchat.mp4, my_reel_pinterest.mp4

也可仅导出指定平台:

bash scripts/batch-export.sh reel.mp4 cooking_video instagram,tiktok,youtube

水印 / 标志叠加

# 动态水印(淡入,半透明)
ffmpeg -i video.mp4 -i logo.png -filter_complex "
[1:v]scale=120:-1,format=rgba,colorchannelmixer=aa=0.7[logo];
[0:v][logo]overlay=W-w-30:H-h-30
" OUTPUT_FLAGS output.mp4

自动字幕生成(基于 Whisper)

pip install --break-system-packages openai-whisper pysrt
import whisper

model = whisper.load_model("base")
result = model.transcribe("audio.mp3", word_timestamps=True)

with open("captions.srt", "w") as f:
    for i, seg in enumerate(result["segments"], 1):
        start = seg["start"]
        end = seg["end"]
        text = seg["text"].strip()
        f.write(f"{i}\n")
        f.write(f"{int(start//3600):02}:{int(start%3600//60):02}:{start%60:06.3f} --> ")
        f.write(f"{int(end//3600):02}:{int(end%3600//60):02}:{end%60:06.3f}\n")
        f.write(f"{text}\n\n")

随后将字幕烧录到视频中(详见 references/caption-templates.md 获取样式建议):

ffmpeg -i video.mp4 -vf "subtitles=captions.srt:force_style='FontSize=22,PrimaryColour=&Hffffff,OutlineColour=&H000000,Outline=2,Alignment=2'" OUTPUT_FLAGS output.mp4

错误处理与提示

  • 检查音频是否存在: ffprobe -i input.mp4 -show_streams -select_streams a
  • 视频无声? 添加 -an 参数,或生成静音音频:-f lavfi -i anullsrc
  • 字体缺失? apt-get install -y fonts-noto fonts-liberation
  • 快速预览: 添加 -t 5 -preset ultrafast 只渲染前 5 秒
  • 文本中包含表情符号? 使用 fontfile=/usr/share/fonts/truetype/noto/NotoColorEmoji.ttf
  • 始终使用 -movflags +faststart 以确保网页和移动设备流畅播放
  • 时长限制: Instagram/Facebook 最大 90 秒 · TikTok/YouTube Shorts/Snapchat 最大 60 秒

输出检查清单

交付最终视频前请确认:

  • [ ] 分辨率应为 1080×1920
  • [ ] 时长在平台限制范围内(Instagram 90 秒,TikTok/Shorts 60 秒)
  • [ ] 帧率设置为 30(YouTube Shorts 可设为 60)
  • [ ] 包含音频轨道(即使为静音)
  • [ ] 使用 H.264 + AAC 编解码器
  • [ ] 开头 3 秒内可见吸引注意力的标题文字
  • [ ] 结尾 5 秒内可见行动号召(CTA)文字
  • [ ] 文件保存至 /mnt/user-data/outputs/
  • [ ] 如需多平台版本,通过 batch-export.sh 脚本导出
YK
@yash-kavaiya

已收录 1 个 Skill

相关推荐