Install
openclaw skills install ai-short-film-producerAI短剧制作助手 | AI Short Film Producer — 低成本AI短剧/短片全流程制作技能。使用Grok Imagine生成视频镜头、TTS生成配音,配合FFmpeg+Python本地合成。适用于从零制作AI短片、短视频、短剧EP、预告片等场景。包含完整的分镜脚本创作、视频生成、配音生成、音频驱动...
openclaw skills install ai-short-film-producer本Skill提供一套完整的低成本AI短剧制作流程,从脚本创作到最终成片,总成本仅需**¥30-50/部**(128秒短片)。核心思路:用AI API生成素材 → 本地FFmpeg合成 → WorkBuddy编排调度。
适用场景:
核心成本优势:
Step 1: 脚本创作
├── 确定主题/时长/风格
├── 编写分镜脚本(镜头×台词×角色)
└── 输出:分镜表 + TTS文本清单
Step 2: 视频镜头生成
├── 调用速创API Grok Imagine
├── 25个镜头批量异步生成
└── 输出:ep1_shots/*.mp4
Step 3: TTS配音生成
├── 调用速创API audio_tts
├── 多角色多音色
└── 输出:ep1_tts/*.mp3
Step 4: 音频驱动剪辑
├── 逐段按TTS时长裁剪/循环镜头
├── 短镜头自动stream_loop填充
└── 输出:分段seg_*.mp4
Step 5: 字幕生成
├── Python Pillow生成透明PNG字幕
├── FFmpeg overlay叠加(因FFmpeg 8.x无drawtext)
└── 输出:带字幕的分段视频
Step 6: 最终合成
├── concat拼接25段视频
├── concat拼接25段音频
├── 音视频合并
└── 输出:最终成片.mp4
Step 7: 素材导出
├── 结构化桌面文件夹
├── 矩阵表 + JSON
└── 成本核算
输入: 用户需求(主题、风格、时长、参考素材) 输出: 分镜脚本文档 + TTS台词清单
工作流程:
| 角色类型 | 推荐音色ID | 说明 |
|---|---|---|
| 旁白/叙述者 | male-qn-jingying | 精英青年男声,通用 |
| 男主角 | male-qn-jingying | 精英青年男声 |
| 霸道/硬汉 | male-qn-badao | 霸道男声 |
| 反派/俊朗 | junlang_nanyou | 俊朗男声 |
| 成熟女性 | female-chengshu | 成熟女声 |
| 少女 | female-shaonv | 少女音 |
| 研究员/学生 | male-qn-daxuesheng | 大学生男声 |
| 醇厚长辈 | male-chunhou | 醇厚男声 |
API平台: 速创API(详见 references/sucuang_api.md) 模型: Grok Imagine(xAI Aurora引擎) 价格: 按秒计费(具体见平台)
API调用方式:
批量生成策略:
Prompt编写要点:
"Deep space, Milky Way galaxy slowly rotating, cinematic wide shot, photorealistic, 4K quality"API接口: POST /api/async/audio_tts 价格: 按字计费(具体见平台) 参数格式(重要): 扁平JSON,不要嵌套
{
"text": "台词内容",
"voice_id": "male-qn-jingying",
"speed": 1.0
}
注意事项(踩坑经验):
{"model":"audio_tts","params":{...}}核心理念: 画面长度由语音旁白决定,而非固定时长。先录制/生成TTS配音,再让每段视频精确匹配对应配音的时长。这样保证音画天然同步,且节奏由配音自然驱动。
每段(镜头, TTS)的处理流程:
1. 获取TTS音频实际时长 tts_dur(用ffprobe精确到毫秒)
2. 获取源视频时长 src_dur
3. 对比决策:
├── src_dur >= tts_dur + 0.5s → 直接裁剪到tts_dur(视频多出的部分舍弃)
├── src_dur ≈ tts_dur(差<0.5s)→ 直接裁剪,不做额外处理
└── src_dur < tts_dur → stream_loop循环播放填满tts_dur
4. 输出:seg_NNN.mp4(时长=tts_dur,精确匹配配音)
为什么用"音频驱动"而非"视频驱动":
当源视频时长不够时,用FFmpeg的stream_loop让视频循环播放:
# 循环播放直到填满tts_dur
/opt/homebrew/bin/ffmpeg -y -stream_loop -1 -i shot.mp4 -t {tts_dur} -c:v libx264 -preset fast seg.mp4
实战经验(三体EP1):
# 关键:每段独立裁剪,不整体缩放
cumulative = 0.0
for i, (tts_file, shot_file) in enumerate(segments):
tts_dur = get_duration(tts_file) # ffprobe获取
# 精确裁剪到tts_dur,不依赖前一段的结束时间
trim_video(shot_file, tts_dur, f"seg_{i:03d}.mp4")
cumulative += tts_dur
# 最终验证:所有seg时长之和 ≈ audio_concat时长 ≈ 最终成片时长
FFmpeg路径(Mac mini M4): /opt/homebrew/bin/ffmpeg
已知限制:
cl=stereo 而非 c=stereo方案: Pillow生成透明PNG → FFmpeg overlay叠加
from PIL import Image, ImageDraw, ImageFont
# 创建透明PNG
img = Image.new('RGBA', (1920, 160), (0,0,0,0))
draw = ImageDraw.Draw(img)
font = ImageFont.truetype('/System/Library/Fonts/PingFang.ttc', 48)
# 白色大字 + 黑色描边
draw.text((960, 80), "台词文本", fill='white', font=font,
anchor='mm', stroke_width=3, stroke_fill='black')
# FFmpeg overlay叠加
ffmpeg -i seg.mp4 -i sub.png -filter_complex "overlay=0:H-h" output.mp4
字幕设计规范:
拼接视频:
# 生成file list
for f in seg_*.mp4; do echo "file '$f'" >> video_list.txt; done
ffmpeg -f concat -safe 0 -i video_list.txt -c copy video_concat.mp4
拼接音频:
for f in audio_*.mp3; do echo "file '$f'" >> audio_list.txt; done
ffmpeg -f concat -safe 0 -i audio_list.txt -c copy audio_concat.aac
音视频合并:
ffmpeg -i video_concat.mp4 -i audio_concat.aac -c:v copy -c:a aac final.mp4
桌面文件夹结构:
~/Desktop/项目名称/
├── 01_字幕/ → 字幕PNG文件
├── 02_配音/ → TTS音频MP3
├── 03_主图/ → 镜头缩略图JPG
├── 04_视频/ → 分段视频MP4
├── 05_矩阵表/ → 矩阵表.html + 素材结构.json
└── 最终成片.mp4
成本核算模板:
| 项目 | 计算方式 | 说明 |
|---|---|---|
| Grok Imagine视频 | 总秒数 × 重试次数 × 单价 | 按秒计费 |
| TTS配音 | 总字数 × 单价 | 按字计费 |
| WorkBuddy算力 | 对话轮次 × 单价 | 按轮计费 |
| 硬件折旧 | Mac mini ¥3,999/3年寿命 | ¥3.65/天 |
| 电费 | 16h × 65W × ¥0.6/度 | ¥0.62/天 |
平台地址: 详见 references/sucuang_api.md 文档中心: 详见 references/sucuang_api.md
常用模型及价格:
| 模型/接口 | 价格 | 说明 |
|---|---|---|
| Grok Imagine 视频生成 | 按秒计费 | 文生视频/图生视频,6-15秒 |
| audio_tts 配音 | 按字计费 | 多音色TTS |
| video_digital_humans 数字人 | 按次计费 | 需公网音频URL+视频URL |
| Sora2(已弃用) | — | 持续400错误,不可用 |
API Key传递:
项目规模: 25个镜头,127秒成片,8个角色 总成本: ¥44.17(含重试+硬件折旧) 工具链: Grok Imagine × 25 + TTS × 25 + FFmpeg + Python Pillow 迭代版本: v5min → v6 → v7 → v7.1 → v8(5个版本迭代)
关键经验:
AI生成的第一版通常不是最终版。必须经过"制作→审核→修改"的迭代循环才能达到交付标准。
| 维度 | 检查内容 | 常见问题 |
|---|---|---|
| 音画同步 | 画面内容是否匹配配音台词 | 角色A说话但画面是角色B |
| 时长匹配 | 每段视频是否完整覆盖TTS | 短镜头被截断,话没说完画面就切 |
| 视觉重复 | 循环播放是否超过3次 | 火鸡演讲循环9s,观众能看出重复 |
| 字幕准确 | 字幕文本是否与TTS一致 | 错别字、标点错误 |
| 节奏感 | 整体叙事节奏是否流畅 | 某段太长拖沓,某段太短仓促 |
| 画面质量 | 是否有明显AI生成瑕疵 | 人物变形、闪烁、分辨率低 |
V1(初版合成)
↓
专业审核(逐段检查以上6个维度)
↓
问题清单 → 按严重程度排序
├── P0(必须修):音画不匹配、字幕错误、画面截断
├── P1(建议修):节奏拖沓、视觉重复感强
└── P2(可优化):画面质量、色调统一
↓
V2(修复P0问题)
↓
再次审核
↓
V3...(逐轮修复,直到P0=0、P1≤2)
↓
最终交付
| 版本 | 问题 | 修复方案 |
|---|---|---|
| v5min | 252秒成片,但TTS只有127秒,大量空白 | 重新按TTS时长裁剪 |
| v6 | 音频驱动剪辑,但3个短镜头被截断 | 修复中 |
| v7 | 短镜头截断(火鸡演讲缺9s) | stream_loop循环填充 |
| v7.1 | 循环修复完成,但无字幕 | 加字幕 |
| v8 | 字幕+音画同步修复+矩阵表 | ✅ 最终交付 |
审核工具:
ffprobe 获取每段TTS和视频的精确时长sucuang_api.md — 速创API完整接口文档和踩坑经验production_workflow.md — 制作流程详细参考