AI 视频制作工作流
用 AI 制作视频,核心不是"让 AI 生成整个视频",而是把重复性工作交给 AI,把创意判断留给人。一套完整的 AI 视频制作流水线分为六个阶段,每个阶段职责清晰,工具不重叠。
六阶段流水线
Script → Storyboard → Prompt Pack → TTS → Subtitles → Assembly Draft
脚本 → 分镜 → 提示词包 → 配音 → 字幕 → 组装草稿
1. Script(脚本)
脚本是整个流水线的源头。视频脚本不是文章,核心特征是口语化、短句、每段可视化。
脚本包含多个部分,但只有原始讲解稿会进入 TTS,其余部分是给后续阶段用的:
| 部分 | 说明 | 流向 |
|---|---|---|
| 开场钩子 | 1-2 句,抛出问题或反直觉结论 | → TTS(口播) |
| 核心结论 | 只写 1 句,定调整个视频 | → TTS(口播) |
| 讲解提纲 | 最多 3 个支撑点,结构骨架 | 内部参考,不口播 |
| 原始讲解稿 | 按段落,每段 1-3 句,口语化短句 | → TTS(口播) |
| 画面提示 | 每段标注画面类型(录屏/动画/生成等) | → Storyboard |
用 video-source-writer skill 生成脚本。时长参考:
- 短视频:45-75 秒,约 150-200 字口播稿
- 标准:90-180 秒,约 300-500 字
- 深度:3-7 分钟,约 800-1500 字
脚本写完后先大声读一遍。读起来绕口的地方,AI 配音也会出问题。
2. Storyboard(分镜)
将脚本每一段拆解为具体的画面描述,明确画面类型:
| 画面类型 | 适用场景 | 工具 |
|---|---|---|
| 录屏演示 | 工具操作、代码演示 | Screen Studio、OBS |
| 程序化动画 | 架构图、流程图、数据可视化 | Remotion、Manim |
| AI 生成画面 | 概念插图、场景 B-roll | fal.ai、Sora、Kling |
| 文字强调 | 关键词、数字、引用 | Remotion、CapCut |
| UI 截图 | 产品展示、界面说明 | 截图 + 标注 |
分镜的作用是提前决策,避免后期边剪边想画面,降低返工成本。
3. Prompt Pack(提示词包)
基于分镜,为每个需要 AI 生成的画面写提示词,统一打包。
生图提示词(fal.ai Nano Banana Pro)示例:
professional tech explainer visual, dark background,
glowing network nodes connected by lines,
minimalist flat design, 16:9 aspect ratio
生视频提示词(Kling / Seedance)示例:
slow camera pan across a terminal screen showing code being written,
green text on dark background, shallow depth of field, cinematic
提示词包要在 TTS 录音前准备好,因为画面节奏需要与语音时长对齐。先有音频时长,才能决定视频片段需要多长。
用 fal.ai 批量生成:
# 通过 fal.ai MCP 生成单张图
generate(
model_name: "fal-ai/nano-banana-pro",
input: {
"prompt": "你的提示词",
"image_size": "landscape_16_9"
}
)
# 生成视频片段(Seedance)
generate(
model_name: "fal-ai/seedance-1-0-pro",
input: {
"prompt": "你的提示词",
"duration": "5s",
"aspect_ratio": "16:9"
}
)
运行前用 estimate_cost 预估费用,避免意外消耗。
4. TTS(文字转语音)
将口播稿转为语音轨道。两个主流选项:
ElevenLabs(音质更自然,支持中文):
import os, requests
resp = requests.post(
f"https://api.elevenlabs.io/v1/text-to-speech/{voice_id}",
headers={
"xi-api-key": os.environ["ELEVENLABS_API_KEY"],
"Content-Type": "application/json"
},
json={
"text": "你的口播稿文字",
"model_id": "eleven_turbo_v2_5",
"voice_settings": {"stability": 0.5, "similarity_boost": 0.75}
}
)
with open("voiceover.mp3", "wb") as f:
f.write(resp.content)
fal.ai CSM-1B(对话感强,延迟低):
generate(
model_name: "fal-ai/csm-1b",
input: {
"text": "你的口播稿文字",
"speaker_id": 0
}
)
拿到音频后,用 FFmpeg 检查时长,反推每段画面需要的秒数:
ffprobe -v quiet -show_entries format=duration -of csv=p=0 voiceover.mp3
5. Subtitles(字幕)
基于语音音频自动生成时间轴对齐的字幕。推荐用 Whisper 本地转写,直接输出 SRT:
# 安装
pip install openai-whisper
# 生成字幕(中文视频用 zh 语言)
whisper voiceover.mp3 --language zh --output_format srt --output_dir ./subtitles
字幕文件处理建议:
- SRT:通用格式,Descript / CapCut / Remotion 均支持导入
- 每行字数:中文不超过 20 字,英文不超过 42 字符
- 时间轴校对:AI 生成后快速过一遍,修正专有名词的错别字
在 Remotion 中渲染烧录字幕:
import { useCurrentFrame, useVideoConfig } from "remotion";
// 解析 SRT 后映射到帧号,在对应帧渲染字幕文字
const subtitle = getSubtitleAtFrame(subtitles, frame, fps);
return (
<AbsoluteFill>
{subtitle && (
<div
style={{
position: "absolute",
bottom: 80,
width: "100%",
textAlign: "center",
fontSize: 36,
color: "white",
textShadow: "1px 1px 4px rgba(0,0,0,0.8)",
}}
>
{subtitle.text}
</div>
)}
</AbsoluteFill>
);
6. Assembly Draft(组装草稿)
将素材、语音、字幕按时间轴组装为可预览的草稿。两条路径:
路径 A:Remotion(代码驱动,适合程序化内容)
import { AbsoluteFill, Sequence, Video, Audio } from "remotion";
export const VideoDraft: React.FC = () => (
<AbsoluteFill>
{/* 语音轨道贯穿全程 */}
<Audio src="/voiceover.mp3" />
{/* 第一段画面:0-5 秒 */}
<Sequence from={0} durationInFrames={150}>
<Video src="/segments/intro.mp4" />
</Sequence>
{/* 第二段画面:5-12 秒 */}
<Sequence from={150} durationInFrames={210}>
<Video src="/segments/demo.mp4" />
</Sequence>
</AbsoluteFill>
);
渲染输出:
npx remotion render src/index.ts VideoDraft output.mp4 \
--codec h264 --crf 18
路径 B:CapCut / Descript(界面操作,适合快速出稿)
- 导入所有素材片段和语音文件
- 把语音拖到时间轴,以语音节奏为基准排列画面
- 导入 SRT 字幕文件,自动对齐
- 调整节奏、色调,导出
草稿阶段不追求完美,目标是能播放、能看清时序是否合理。节奏调整和最终润色在这一步之后做。
工具选型参考
| 工具 | 擅长 | 不擅长 |
|---|---|---|
video-source-writer skill | 生成口播脚本 | 分镜、后期 |
| fal.ai(Nano Banana / Kling) | 批量生成图片/视频素材 | 精细控制画面构图 |
| ElevenLabs | 自然中英文语音 | 免费额度有限 |
| fal.ai CSM-1B | 低成本 TTS | 中文效果弱于 ElevenLabs |
| Whisper | 高精度字幕转写 | 需要本地运行 |
| Remotion | 程序化动画、可复用模板 | 学习曲线,非开发者不友好 |
| CapCut / Descript | 快速剪辑、手动调整节奏 | 无法自动化 |
| FFmpeg | 批量裁剪、格式转换、音频处理 | 无可视化界面 |
各平台导出规格
| 平台 | 分辨率 | 帧率 | 时长建议 |
|---|---|---|---|
| YouTube | 1920×1080 | 30fps | 不限,>8 分钟可插播广告 |
| TikTok / 抖音 | 1080×1920(竖屏) | 30fps | 15-60 秒效果最好 |
| Instagram Reels | 1080×1920 | 30fps | 15-90 秒 |
| B 站 | 1920×1080 | 30fps | 不限 |
| X / Twitter | 1280×720 | 30fps | ≤ 2 分 20 秒 |
竖屏裁剪(FFmpeg):
# 16:9 → 9:16,居中裁剪
ffmpeg -i input.mp4 -vf "crop=ih*9/16:ih,scale=1080:1920" vertical.mp4