运行时依赖
安装命令
点击复制技能文档
AI Short Film Producer – 低成本AI短剧制作 概述 本Skill提供一套完整的低成本AI短剧制作流程,从脚本创作到最终成片,总成本仅需¥30-50/部(128秒短片)。核心思路:用AI API生成素材 → 本地FFmpeg合成 → WorkBuddy编排调度。
适用场景:
- 用户说“帮我做一个短片/短剧/预告片”
- 用户说“把这段文案做成视频”
- 用户说“生成一个XX题材的短视频”
- 用户需要从零到一完成AI视频制作
核心成本优势:
- 视频生成:Grok Imagine ¥0.05/秒(速创API)
- 配音生成:TTS ¥0.0006/字(速创API)
- 合成剪辑:本地FFmpeg免费
- AI编排:WorkBuddy Lite版约¥0.0022/轮
制作流程总览 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 └── 成本核算
详细步骤 Step 1: 脚本创作 输入:用户需求(主题、风格、时长、参考素材) 输出:分镜脚本文档 + TTS台词清单 工作流程:
- 与用户确认主题方向(科幻/悬疑/科普/剧情等)
- 编写分镜脚本,包含:镜头编号、画面描述、时长、配音台词、角色分配、音色选择、音效说明
- 输出TTS台词清单(25段以内,每段2-20字最佳)
角色音色分配表: 角色类型 | 推荐音色ID | 说明 旁白/叙述者 | male-qn-jingying | 精英青年男声,通用 男主角 | male-qn-jingying | 精英青年男声 霸道/硬汉 | male-qn-badao | 霸道男声 反派/俊朗 | junlang_nanyou | 俊朗男声 成熟女性 | female-chengshu | 成熟女声 少女 | female-shaonv | 少女音 研究员/学生 | male-qn-daxuesheng | 大学生男声 醇厚长辈 | male-chunhou | 醇厚男声
Step 2: 视频镜头生成(速创API Grok Imagine) API平台:速创API https://api.wuyinkeji.com 模型:Grok Imagine(xAI Aurora引擎) 价格:¥0.05/秒(按生成视频时长计费,不足1秒按1秒) API调用方式:
- 鉴权:Authorization Header 传API Key(不带Bearer前缀)
- 接口:POST /api/async/video/grok_imagine
- 参数格式:扁平JSON
- 结果查询:GET /api/async/detail?id=xxx(轮询直到status=2)
批量生成策略:
- 25个镜头同时提交(用ThreadPoolExecutor)
- 每个镜头约10秒,生成耗时约30-60秒
- 失败自动重试(平均重试3次)
- 英文Prompt效果更稳定
- 包含:场景描述、光线、构图、镜头运动
- 示例:"Deep space, Milky Way galaxy slowly rotating, cinematic wide shot, photorealistic, 4K quality"
Step 3: TTS配音生成(速创API audio_tts) API接口:POST /api/async/audio_tts 价格:¥0.0006/字 参数格式(重要):扁平JSON,不要嵌套 { "text": "台词内容", "voice_id": "male-qn-jingying", "speed": 1.0 } 注意事项(踩坑经验): ❌ 不要传 format 参数(会报500"存在未绑定的参数") ❌ 不要嵌套成 {"model":"audio_tts","params":{...}} ✅ 状态码判断:status=2 完成,status=0/1 处理中 ⚠️ 部分任务会卡住(status一直=0),重试可换IP节点 ✅ 返回tar包,需解压获取mp3
Step 4: 音频驱动剪辑(核心节奏控制) 核心理念:画面长度由语音旁白决定,而非固定时长。先录制/生成TTS配音,再让每段视频精确匹配对应配音的时长。这样保证音画天然同步,且节奏由配音自然驱动。
4.1 节奏控制逻辑 每段(镜头, TTS)的处理流程:
- 获取TTS音频实际时长 tts_dur(用ffprobe精确到毫秒)
- 获取源视频时长 src_dur
- 对比决策:
- 输出:seg_NNN.mp4(时长=tts_dur,精确匹配配音)
为什么用"音频驱动"而非"视频驱动":
- 传统剪辑:先定视频长度,再往里塞配音 → 配音节奏被画面绑架
- 音频驱动:先定配音节奏,再裁剪画面适配 → 叙事节奏由台词自然决定
- 效果:观众听到的每句话都有对应的画面时长,不会出现"话没说完画面就切了"
4.2 短镜头循环填充(stream_loop) 当源视频时长不够时,用FFmpeg的stream_loop让视频循环播放: /opt/homebrew/bin/ffmpeg -y -stream_loop -1 -i shot.mp4 -t {tts_dur} -c:v libx264 -preset fast seg.mp4 实战经验(三体EP1):
- 25个镜头中有3个需要循环填充
- 最大修复:pan_han_02火鸡演讲(源视频10s → TTS需要19s,循环补9s)
- 循环填充的视觉重复感在1-2次循环内不明显,超过3次建议换镜头
4.3 逐段精确裁剪避免累积漂移 # 关键:每段独立裁剪,不整体缩放 cumulative = 0.0 for i, (tts_file, shot_file) in enumerate(segments): tts_dur = get_duration(tts_file) # ffprobe获取 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 已知限制:
- FFmpeg 8.x 未编译drawtext/libass/freetype滤镜 → 不能直接加字幕
- anullsrc语法用 cl=stereo 而非 c=stereo
- shell转义用Python subprocess list模式避免zsh问题
Step 5: 字幕生成 方案:Pillow生成透明PNG → FFmpeg overlay叠加 from PIL import Image, ImageDraw, ImageFont 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 -i seg.mp4 -i sub.png -filter_complex "overlay=0:H-h" output.mp4
字幕设计规范:
- 底部居中,距底部约60px
- 白色大字 + 3px黑色描边
- 字号48-56px(PingFang SC字体)
- 可加角色标签(如"旁白:"、"汪淼:")
Step 6: 最终合成 拼接视频: for f in seg_.mp4; do echo "file '$f'" >> video_list.txt; done ffmpeg -