做短视频最耗时的从来不是"生成"那一下,是生成前面和后面的活儿。
我第一次做一条 30 秒的口播短视频,流程是这样的:先想文案 → 拆成分镜 → 每个分镜写提示词 → 生成参考图 → 图生视频 → 找配音(或者自己念)→ 拖进剪辑软件对轨 → 导出。中间任何一个环节返工,后面的全部要重来。
真正麻烦的是跨环节的一致性:第 3 个镜头的画面风格和第 1 个不一样,就得回到第一步重出;配音时长和画面差 4 秒,又得回头改脚本。
这篇文章记录我把这条链路压成一条指令的过程:工具全在本地,零剪辑软件操作,脚本可以直接复制跑。
差异化说明:社区已经有讲"AI 短剧生产线方法论"的文章,那篇讲怎么组织流程;这篇只讲每台 macOS 都能立刻照着敲的命令,落到脚本层。
把"创意决策"和"机械劳动"分开,是关键的一步。
后半部分不该用 AI 一格一格生成,那属于拿积分做 ffmpeg 的活儿。让 WorkBuddy 写一次脚本,之后每条视频都白嫖。
适用边界:适合结构固定、批量重复的短内容(口播科普、产品讲解、口播切片)。单条精雕细琢的创意片不建议上流水线。
环境:macOS(Apple Silicon)/zsh/Python 3.13/WorkBuddy 桌面端 示例项目(虚构,仅用于演示):一条 30 秒科普短视频《月亮为什么总同一面朝向地球》,5 个分镜。
视频合成和配音不需要任何云服务,三条命令搞定:
# 1) ffmpeg:转码、拼接、烧字幕,整条链路的"胶水"
brew install ffmpeg
# 2) 独立虚拟环境(避免污染系统 Python;路径换成你自己的)
/opt/homebrew/bin/python3 -m venv ~/venvs/video-pipe
source ~/venvs/video-pipe/bin/activate
# 3) edge-tts:微软 Edge 的在线朗读引擎的开源命令行封装,免注册免 Key
pip install -U edge-tts验证是否装成功:
ffmpeg -version | head -1
edge-tts --list-voices | grep zh-CN | head -5 # 应能看到 zh-CN-XiaoxiaoNeural 等音色这一步是整个流程里最值钱的。不要说"帮我做个视频",要说"先给我一张表"。
直接复制这段提示词:
请为下面这个主题写一条 30 秒短视频脚本,并输出一张 Markdown 分镜表。
【虚构示例主题】月亮为什么总是同一面朝向地球
表格列必须包含:镜号 | 时长(秒) | 旁白文案(口语,每镜不超过20字) | 画面描述(用于图生视频的英文提示词) | 负向提示词
硬性要求:
1. 总时长严格 30 秒,各镜时长之和必须等于 30;
2. 每个镜头的画面描述里,主体风格、光线方向、镜头运动三项必须显式写出,且 5 个镜头保持一致;
3. 画面描述禁止出现任何文字、Logo、水印,禁止复合动作,一镜只做一件事;
4. 输出成 clips/script.md 文件,不要直接生成视频。这么做的好处:先在表格上返工。改一个单元格是零成本的,改一段 5 秒视频要重新烧一遍。
一致的诀窍:先出一个定妆图锁定主体,后续分镜全部以它为参考,而不是每个镜头都重新描述一遍。
对 WorkBuddy 这样说:
按 clips/script.md 的第 1 镜:
1. 先用 ImageGen 生成一张参考图,保存到 assets/shot01_ref.png;
2. 确认这张图达到预期后,再用这张图做图生视频,输出 5 秒、720P、16:9,保存到 clips/shot01.mp4;
3. 第 2~5 镜都以上一张的风格为基准,生成前先输出一份"跨镜一致性检查清单"(主体外观、服装/配色、光线方向、镜头语言),我确认后再生成。生成结果必须落到固定文件名上,后面脚本才能按编号自动拼。命名规则:clips/shot01.mp4 … clips/shot05.mp4,编号补零。
按分镜表逐条合成,再拼成一条人声轨:
mkdir -p audio
# 逐镜生成,文案与 script.md 的「旁白文案」列保持一致(虚构示例文案)
edge-tts --voice zh-CN-XiaoxiaoNeural --rate=-5% \
--text "你有没有发现,月亮好像只有一张脸?" --write-media audio/voice01.mp3
edge-tts --voice zh-CN-XiaoxiaoNeural --rate=-5% \
--text "其实它一直在转,只是转得刚刚好。" --write-media audio/voice02.mp3
# …… voice03 ~ voice05 同理
# 拼成整条人声轨
ffmpeg -f concat -safe 0 -i <(for f in audio/voice0*.mp3; do echo "file '$PWD/$f'"; done) \
-c copy audio/voice_full.m4a -y--rate=-5% 是经验值:默认语速偏快,口播片降到 95% 更自然。最终的语速、停顿要以分镜表的时长为准,两者对不上就回头改文案,不要怪模型。
# 1) 视频流横向拼接
ffmpeg -f concat -safe 0 -i <(for f in clips/shot0*.mp4; do echo "file '$PWD/$f'"; done) \
-c copy out/video_raw.mp4 -y
# 2) 合并画面 + 配音,并做标准化处理(统一帧率与采样率,避免音画不同步)
ffmpeg -i out/video_raw.mp4 -i audio/voice_full.m4a \
-map 0:v:0 -map 1:a:0 -shortest \
-vf "fps=30,scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2" \
-c:v libx264 -pix_fmt yuv420p -c:a aac -b:a 192k \
out/final_$(date +%Y%m%d_%H%M).mp4 -y-shortest 很关键:以最短的那条流为准截断。画面比人声长会留黑场面外静止帧,比人声短会吞掉最后一句旁白。
跑顺一次之后,把整套话术存成 PIPELINE.md,之后只需要一句:
按 PIPELINE.md 执行,主题:<填主题>,输出到 out/。以下各项均为未实测,发布前必须由本人跑一遍并把真实数值填进去,禁止照抄或凭感觉填。
项目 | 数值 | 状态 |
|---|---|---|
依赖安装(ffmpeg + venv + edge-tts)总耗时 | 【待本人实测补充】 | 未测 |
分镜表产出耗时 | 【待本人实测补充】 | 未测 |
单镜头:参考图生成耗时 | 【待本人实测补充】 | 未测 |
单镜头:图生视频 5 秒 720P 耗时 | 【待本人实测补充】 | 未测 |
edge-tts 5 段配音合成耗时 | 【待本人实测补充】 | 未测 |
ffmpeg 合片 + 烧字幕耗时 | 【待本人实测补充】 | 未测 |
整条 30 秒成片总积分消耗 | 【待本人实测补充】 | 未测 |
改造前人工全流程耗时(对照) | 【待本人实测补充】 | 未测 |
可确定的定性结论(无需积分,已验证):配音环节走 edge-tts 零积分消耗;合片走本地 ffmpeg 零积分消耗。整条链路里只有「图/视频生成」这一步会消耗额度——所以省分的关键是把 mechanical work 全部剥离出去,别用 AI 干 ffmpeg 的活。
-shortest 会静默吞画面。视频轨比音轨长时它只截,不提醒。合完必须播一遍确认最后一句旁白没被切掉。-c copy 直接报错或产出花屏。上面脚本里的 fps=30 + scale + pad 三件套就是干这个的,别省。<(...) 依赖 zsh/bash。Fish 用户要改成先写临时 list 文件。真正省下来的不是生成视频的那 5 秒,是「想法 → 成片」之间反复Explain的手工劳动。
把创意判断交给 WorkBuddy,把机械劳动交给本地脚本——这条分工线划清楚,短视频就能从"做一次累一次"变成"改一行出一批"。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。