首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【征文】#WorkBuddy# 一条指令出一条短视频:我用 macOS 本地脚本把 5 个环节串成了流水线

【征文】#WorkBuddy# 一条指令出一条短视频:我用 macOS 本地脚本把 5 个环节串成了流水线

原创
作者头像
用户12406184
发布于 2026-10-20 13:22:04
发布于 2026-10-20 13:22:04
1520
举报

一、你会遇到的场景

做短视频最耗时的从来不是"生成"那一下,是生成前面和后面的活儿。

我第一次做一条 30 秒的口播短视频,流程是这样的:先想文案 → 拆成分镜 → 每个分镜写提示词 → 生成参考图 → 图生视频 → 找配音(或者自己念)→ 拖进剪辑软件对轨 → 导出。中间任何一个环节返工,后面的全部要重来。

真正麻烦的是跨环节的一致性:第 3 个镜头的画面风格和第 1 个不一样,就得回到第一步重出;配音时长和画面差 4 秒,又得回头改脚本。

这篇文章记录我把这条链路压成一条指令的过程:工具全在本地,零剪辑软件操作,脚本可以直接复制跑。

差异化说明:社区已经有讲"AI 短剧生产线方法论"的文章,那篇讲怎么组织流程;这篇只讲每台 macOS 都能立刻照着敲的命令,落到脚本层。

二、结论先行

把"创意决策"和"机械劳动"分开,是关键的一步。

  • 交给 WorkBuddy 判断:脚本怎么写、分镜怎么拆、画面怎么描述。
  • 交给脚本固化:文件命名、批量转码、配音合成、按时间轴合片、字幕烧录。

后半部分不该用 AI 一格一格生成,那属于拿积分做 ffmpeg 的活儿。让 WorkBuddy 写一次脚本,之后每条视频都白嫖。

适用边界:适合结构固定、批量重复的短内容(口播科普、产品讲解、口播切片)。单条精雕细琢的创意片不建议上流水线。

三、完整操作步骤

环境:macOS(Apple Silicon)/zsh/Python 3.13/WorkBuddy 桌面端 示例项目(虚构,仅用于演示):一条 30 秒科普短视频《月亮为什么总同一面朝向地球》,5 个分镜。

第 1 步:一次性装好本地依赖

视频合成和配音不需要任何云服务,三条命令搞定:

代码语言:zsh
复制
# 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

验证是否装成功:

代码语言:zsh
复制
ffmpeg -version | head -1
edge-tts --list-voices | grep zh-CN | head -5   # 应能看到 zh-CN-XiaoxiaoNeural 等音色

第 2 步:让 WorkBuddy 先产出「分镜表」,不要直接出片

这一步是整个流程里最值钱的。不要说"帮我做个视频",要说"先给我一张表"。

直接复制这段提示词:

代码语言:plaintext
复制
请为下面这个主题写一条 30 秒短视频脚本,并输出一张 Markdown 分镜表。
【虚构示例主题】月亮为什么总是同一面朝向地球

表格列必须包含:镜号 | 时长(秒) | 旁白文案(口语,每镜不超过20字) | 画面描述(用于图生视频的英文提示词) | 负向提示词

硬性要求:
1. 总时长严格 30 秒,各镜时长之和必须等于 30;
2. 每个镜头的画面描述里,主体风格、光线方向、镜头运动三项必须显式写出,且 5 个镜头保持一致;
3. 画面描述禁止出现任何文字、Logo、水印,禁止复合动作,一镜只做一件事;
4. 输出成 clips/script.md 文件,不要直接生成视频。

这么做的好处:先在表格上返工。改一个单元格是零成本的,改一段 5 秒视频要重新烧一遍。

第 3 步:按表逐个做「参考图 → 图生视频」

一致的诀窍:先出一个定妆图锁定主体,后续分镜全部以它为参考,而不是每个镜头都重新描述一遍。

对 WorkBuddy 这样说:

代码语言:plaintext
复制
按 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,编号补零。

第 4 步:本地配音,一条命令出整条音轨

按分镜表逐条合成,再拼成一条人声轨:

代码语言:zsh
复制
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% 更自然。最终的语速、停顿要以分镜表的时长为准,两者对不上就回头改文案,不要怪模型。

第 5 步:合片 + 烧字幕,一行命令出成片

代码语言:zsh
复制
# 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 很关键:以最短的那条流为准截断。画面比人声长会留黑场面外静止帧,比人声短会吞掉最后一句旁白。

第 6 步:把 2~5 步固化成一个「总控提示词」

跑顺一次之后,把整套话术存成 PIPELINE.md,之后只需要一句:

代码语言:plaintext
复制
按 PIPELINE.md 执行,主题:<填主题>,输出到 out/。

四、实测数据

以下各项均为未实测,发布前必须由本人跑一遍并把真实数值填进去,禁止照抄或凭感觉填。

项目

数值

状态

依赖安装(ffmpeg + venv + edge-tts)总耗时

【待本人实测补充】

未测

分镜表产出耗时

【待本人实测补充】

未测

单镜头:参考图生成耗时

【待本人实测补充】

未测

单镜头:图生视频 5 秒 720P 耗时

【待本人实测补充】

未测

edge-tts 5 段配音合成耗时

【待本人实测补充】

未测

ffmpeg 合片 + 烧字幕耗时

【待本人实测补充】

未测

整条 30 秒成片总积分消耗

【待本人实测补充】

未测

改造前人工全流程耗时(对照)

【待本人实测补充】

未测

可确定的定性结论(无需积分,已验证):配音环节走 edge-tts 零积分消耗;合片走本地 ffmpeg 零积分消耗。整条链路里只有「图/视频生成」这一步会消耗额度——所以省分的关键是把 mechanical work 全部剥离出去,别用 AI 干 ffmpeg 的活。

五、踩坑与边界

  1. -shortest 会静默吞画面。视频轨比音轨长时它只截,不提醒。合完必须播一遍确认最后一句旁白没被切掉。
  2. 拼接前必须统一规格。各个片段的分辨率、帧率、色域只要有一个不一致,-c copy 直接报错或产出花屏。上面脚本里的 fps=30 + scale + pad 三件套就是干这个的,别省。
  3. macOS 的 process substitution <(...) 依赖 zsh/bash。Fish 用户要改成先写临时 list 文件。
  4. edge-tts 依赖外网可用性。断网或网络波动时整条配音链路会失败;重要项目建议一次生成后本地留存,不要每次复跑。
  5. 跨镜一致性是最大的返工来源。第 3 步的「一致性检查清单」一步都不能跳过——靠肉眼盯比机器贵得多。
  6. 不适合这条流水线的场景:需要真人出镜、需要精确口型对位、时长超过 1 分钟的长片。这类交给剪辑软件手动做,比脚本快。
  7. 合规提醒:edge-tts、ffmpeg 均为开源/第三方服务,成品用于商业投放前,请自行确认各自服务条款对商用与语音使用的限制。

六、小结

真正省下来的不是生成视频的那 5 秒,是「想法 → 成片」之间反复Explain的手工劳动。

把创意判断交给 WorkBuddy,把机械劳动交给本地脚本——这条分工线划清楚,短视频就能从"做一次累一次"变成"改一行出一批"。


原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 一、你会遇到的场景
  • 二、结论先行
  • 三、完整操作步骤
    • 第 1 步:一次性装好本地依赖
    • 第 2 步:让 WorkBuddy 先产出「分镜表」,不要直接出片
    • 第 3 步:按表逐个做「参考图 → 图生视频」
    • 第 4 步:本地配音,一条命令出整条音轨
    • 第 5 步:合片 + 烧字幕,一行命令出成片
    • 第 6 步:把 2~5 步固化成一个「总控提示词」
  • 四、实测数据
  • 五、踩坑与边界
  • 六、小结
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档