简介:一套面向自媒体创作者和读书内容运营者的扣子(Coze)视频工作流,将每日读书视频的策划、素材整理、编辑加工、音效处理与渲染输出整合为可视化流程,适合需要批量稳定产出书单推荐类短视频的团队和个人。压缩包仅50KB、共4个文件,含JSON工作流配置、TXT辅助脚本和MD说明文档,可直接导入扣子平台查看各节点逻辑,轻量且便于二次修改。目前已有613人学习下载,可作为上手Coze视频类工作流的中小型参考模板。通过该工作流,使用者能掌握如何用自动化节点组织书单抓取、文案生成、画面配色与导出设置,同时学到背景音乐、色彩和文字视觉结合的细节处理思路;对于追求日更的创作者,还可据此梳理出从书单筛选到成品视频的完整制作流程,从而减少重复劳动、保持视频调性统一。
1. 扣子视频工作流解决什么问题:日更读书账号背后的流水线
先说一个可能让你有点意外的判断:你在短视频平台刷到的不少“每日读书”账号,主要推动力不是剪辑师,而是一条无人值守的流水线。那个封装成“每日读书视频.zip”的文件,里面装的正是一条扣子视频工作流——从当天书摘抓取开始,到大模型改写成口播词,再交给语音合成和视频拼接节点,最后输出一条能直接发布的短视频。它能减轻的不是“做一条视频”的时间,而是“每天坚持做一条”的重复。使用它的人只需要做一件事:填入当天的书名和摘录,然后等着拿结果。适合一个人做读书内容的博主,也适合正在验证批量内容方向的运营。下面按一线实现的做法,把这条工作流的组成、导入方式,还有容易踩的坑一并讲清楚。
2. 拆开“每日读书视频.zip”:工作流四个核心模块
2.1 先看包结构,别急着解压
很多人拿到 zip 的第一反应是双击解压、把文件拖到桌面,然后找里面的“入口文件”。但工作流包的用法不太一样:它要么作为整体上传到扣子工作台,要么把里面的 JSON 单独导入。我一般会先执行一次unzip -l,搞清楚里面是什么再决定下一步。
unzip -l 每日读书视频.zip逻辑说明:-l表示只列出压缩包内容而不解压,输出每个文件的路径、原始大小和压缩后大小。参数说明:如果看到的是workflow.json、assets/、scripts/、README.txt这类结构,说明包是完整的;如果打开只有孤零零一个.json,那就要确认它是不是工作流文件,而不是某个插件的配置。另一个重要原因是路径:有些包在 Windows 上解压会出现中文字符编码错乱,导致导入时读不到目标文件。
常见做法是下载后不动原包,先在扣子工作台点“导入/上传”选这个 zip。如果导入器不接受,再解压出里面的 JSON 单独导入。这里最不建议做的事,是用右键菜单“压缩到 zip”重新打包一份。很多人嫌文件名长,改个名顺手重新压缩,结果目录结构变了,导入时就报前面热词里经常出现的invalid zip archive: could not find eocd。这个错误在避坑章节会展开,但结论现在可以先记住:不要手动改包。
2.2 素材层:书摘从哪进入工作流
每日读书视频的“每日”体现在素材入口上。最简洁但其实最容易翻车的做法,是把书名和摘录直接写在提示词里,每天去改一次节点。这违背了工作流的初衷。我建议把素材层看作一个独立接口:用一个可公网访问的 JSON 文件、云表格或者 webhook,工作流定时去这个接口取一条记录。
你只需要关心三个参数:
- 来源地址:不能是带时效签名的链接,签名过期后工作流会静默失败。
- 取值规则:稳定日更的账号,要求“取今天还没用过的一条”;如果只是做测试,可以随机取。
- 字段映射:把来源里的
book_name、quote、author映射到后续节点变量。这层出错,后面的文案全部会幻觉。
素材层输出建议统一成 JSON 数组,而不是单个字符串。例如:
[ {"book_name": "活着", "quote": "人是为活着本身而活着", "author": "余华"} ]逻辑说明:用 JSON 数组而不是单条字符串,是为了配合扣子的循环节点。今天想一次生成三条备用,循环节点直接遍历数组即可,不需要重做接口。如果你从 RSS 订阅抓取,还需要在脚本里做一次 HTML 标签清洗,把<p>、<a>等标签去掉。标签混进文案后通常不会报错,但语音合成时会读出来,听起来就是“空格一 live 空格”这种机械音。
2.3 文案层:把摘录改成能念出来的口播稿
素材层拿到金句后,中间的大模型节点会把几十个字扩写成 200 到 400 字的口播稿。很多人忽略的是:这个节点不要用系统默认提示词。系统默认的通用提示词偏“公文风”,生成结果可以读,但没有记忆点。我常用的配置是这样:
{ "model": "doubao-pro-32k", "temperature": 0.7, "max_tokens": 600, "prompt": "你是一个读书类短视频编导。请以《{{book_name}}》作者{{author}}的一句话为开头,把它扩展成一段适合朗读的文案。要求:1.前两句承接金句;2.加上两个生活例子;3.结尾留一个问题;4.全文不超过400字,不要有标题,不要有markdown符号。" }逻辑说明:这是典型的三段式稳定输出手法。temperature 设 0.7,保留一点随机性但不会让句子散架;max_tokens 限制长度,防止生成 800 字导致视频时长失控;prompt 明确规定“不要 markdown 符号”,否则字幕节点会原样输出**和#。
参数说明:model可以替换为你所在平台已经接入的任意模型。不同模型对中文标点的处理差异很大,我一般会同时测两个模型,最终选那个不会自己补书名的。注意 prompt 里的{{book_name}}是变量引用,如果字段映射没接好,这里会原样输出{{book_name}},而模型会自作主张填一本不存在的书。
2.4 视频层:配音、字幕和画面合成
文案节点结束以后,工作流后半段通常由三个动作组成:文字转语音、字幕生成、画面合成。这里要澄清一个误区:它并不是真正意义上的“AI 生成视频”,而是“配音 + 模板背景 + 字幕”的组装流程。画面一般来自固定的背景图或素材库图片,想要动态视觉效果,可以在工作流里接一个视频增强节点,最近流行的视频超分工作流就是放在这一层的。
不过超分要消耗不少算力。作为每日自动任务,我个人的习惯是只在每周精选视频上开超分,日常视频用 1080p 的模板图就够了。字幕选择上有个分岔:硬字幕直接烧进画面,省事但改错很难;软字幕生成.srt外挂,适合后续二次剪辑。如果发布平台是抖音、视频号,建议硬字幕;如果还要同步公众号,就做软字幕。至于“每日读书视频.zip”这个包为什么叫 zip,是因为工作流里用到的模板图、插件配置和提示词版本都可以一并放进 zip,方便整套工程迁移。
3. 在扣子里跑通每日读书视频:导入、配置和批处理脚本
3.1 导入 zip 的两种路径
把工作流导入扣子,常见做法是两条路:第一条,整个 zip 作为资源包导入,适合分享者打包规范的情况;第二条,只导入 zip 里的 JSON 文件,适合导入器不认 zip 的情况。我建议先试第一条,因为能保持节点之间的相对引用关系;如果报“导入资源包失败”,再解开包拿 JSON 导入。
导入失败时不要着急重新压缩,先检查 JSON 编码。用 Windows 记事本打开一个 UTF-8 文件再另存为,常常会加一个 BOM 头,导致 JSON 解析失败。问题表现为报错信息很“泛”,既不说是编码问题也不说是格式问题。解决办法是用命令行重新输出为无 BOM 的 UTF-8:
powershell -Command "Get-Content workflow.json -Raw | Out-File -Encoding utf8NoBOM workflow_clean.json"参数说明:utf8NoBOM是 PowerShell 5.1 及以上版本支持的编码名,作用是把带 BOM 的文件重新保存为无 BOM;如果不支持这个参数,用 VS Code 打开文件后右下角“选择编码”改存为 UTF-8 也可以。这一步不改变 zip 内容,只改文本里不可见的文件头。
导入成功后,不要急着点运行。先看节点列表,一条完整的每日读书工作流一般会有 8 到 12 个节点,包括触发、抓取、清洗、大模型、TTS、字幕、视频合成和发布。节点数太少,说明导入的可能是半成品;节点数太多,要检查是不是把调试用的废弃节点也带进来了。
3.2 必配参数一览
导入完成后,运行前要检查下面四个参数,否则很容易出现节点报错或黑屏。我把它们列成一张表:
| 参数名 | 影响范围 | 示例值 | 建议 |
|---|---|---|---|
| source_url | 素材抓取节点 | https://example.com/daily.json | 不要用带时效签名的链接 |
| title / quote | 文案提示词 | {{book_name}} | 先手工运行一次看变量是否映射成功 |
| api_key | TTS / 图片插件 | sk-**** | 存到全局变量,不要写死在提示词 |
| video_size | 视频合成 | 9:16 | 读书号首选竖屏,适配信息流 |
参数说明:api_key写死到提示词里是很多人会犯的错。一旦工作流导出再导入,key 就会跟着 JSON 被分享出去,轻则被盗刷,重则插件被封。正确做法是放到扣子的全局变量或密钥管理里,节点只引用变量名。
video_size选择 9:16 还是 16:9,取决于分发渠道。抖音、视频号、快手都是竖屏为主,建议 9:16。如果你同时要发公众号,可以让工作流在末尾多生成一个 16:9 版本。两条视频共用同一份文案和音频,只是背景图和字幕位置不同,不会多花多少 API 配额。
3.3 用 Python 脚本把今日书摘送进工作流
有些人不希望把素材放在公网 JSON 上,更习惯在本地笔记里维护。这种情况可以在本地跑一个 Python 脚本,把今天的书摘推送到 webhook 触发节点。脚本用标准库实现,省去装 requests 的麻烦:
import json import datetime import urllib.request def load_today_quote(path): with open(path, 'r', encoding='utf-8') as f: lines = [l.strip() for l in f if l.strip()] day = datetime.date.today().toordinal() return lines[day % len(lines)] def trigger_workflow(payload, webhook_url): data = json.dumps(payload).encode('utf-8') req = urllib.request.Request(webhook_url, data=data, headers={ 'Content-Type': 'application/json', 'Authorization': 'Bearer YOUR_TOKEN' }) try: with urllib.request.urlopen(req, timeout=30) as resp: print(resp.status, resp.read().decode('utf-8')) except Exception as e: print("[FAILED]", e) if __name__ == "__main__": quote = load_today_quote("today_quote.txt") trigger_workflow({ "date": datetime.date.today().isoformat(), "quote": quote }, "https://your-webhook.example.com/trigger")逻辑说明:load_today_quote读取本地文件,把非空行作为候选摘录,然后用日期序数取模拿到一条。这意味着不是每次都取第一条,不同日期会轮换不同的内容,连续几天不会撞车。
参数说明:YOUR_TOKEN要改成你的 webhook 密钥,而且不要提交到 git 仓库。encoding='utf-8'是必须的,Windows 记事本默认会用 GBK 保存,Python 读取后变成乱码;建议把today_quote.txt明确保存为 UTF-8 编码。如果你的素材不止一条,而是多条摘录合并成一段,可以把quote改成数组,工作流里再用循环节点逐条处理。
脚本跑通后,可以挂到系统计划任务里。Windows 的“任务计划程序”设置每天 07:50 执行一次,扣子工作流设定 08:00 触发。两段式的好处是:脚本负责本地数据整理,扣子负责生成,问题出现时可以明确区分是数据侧还是平台侧。
3.4 首次运行要盯的三个日志点
配置完成先别急着开自动发布,而是手动执行一次。扣子的运行日志里,只要盯三个点就够:
第一,素材抓取节点返回值。确认拿到了今天的书摘,且没有把整篇原文塞进变量。见过不少人因为解析规则写错,把一本书的简介全量塞进去,大模型最后输出一篇读后感,而不是口播稿。
第二,大模型节点输出。看有没有自创作者名。读书类账号最怕胡编出处,如果模型开始自己补书名,把 prompt 里“只能使用给定作者”这串字加粗,并把 temperature 降到 0.6。
第三,视频输出节点。检查视频时长和第一帧字幕。生产中最常遇到的是字幕第一帧渲染出{{quote}}这种未替换的变量名,说明字段映射里变量名拼错了。日志节点会显示原始 markdown,对照一下就能发现。
首次运行的标准不要定在“能跑通”,要定在“能连续看三条不出现同一套画面”。到这个标准,再接入定时触发。
4. 让成片不像“黑匣子产物”:文案、配音和画面的参数调优
4.1 文案长度和信息密度
口播文案是完播率的第一道坎。读书视频的黄金时长是 30 到 60 秒,我按这个表控制文案长度:
| 目标时长 | 文案字数 | 参考语速 |
|---|---|---|
| 15 秒 | 60 - 80 字 | 0.95 |
| 30 秒 | 130 - 160 字 | 0.92 |
| 60 秒 | 260 - 300 字 | 0.92 |
逻辑说明:这里说的字数是指“总字符数”,不是模型里的 token。一个中文字通常对应 1 到 2 个 token,所以靠max_tokens控制字数并不准确。更可靠的方式是限制“句子数”,在 prompt 里写“最多 6 句”,比给数字更稳。
参数说明:语速是 TTS 插件的 speed 值,0.92 表示比标准语速慢一点,符合读书类的叙述感。不要为了塞更多内容把 speed 拉到 1.2,语速一快,AI 合成音容易丢字,观众也会觉得像在赶时间。宁可少写两句,也不要加速。
4.2 语音参数:音色、语速和停顿
读书号更欢迎“有讲述感”的声音,而不是标准播音腔。TTS 插件里通常有 pitch、speed、pause 三个参数,我给的起始值是:
speed:0.92,比默认稍慢。pitch:1.1,稍微提高一点,提高亲近感。pause:句号 300ms,逗号 150ms。
如果你听下来还是觉得 AI 味重,先不要急着换音色,看一眼文案里的标点。大模型生成的文本经常“一句话到底”,没有逗号,语音就失去了停顿点,听上去像念稿。我在提示词里会强制加一句:“句子之间必须有逗号,但全文不超过 8 个逗号。”语气是“克制”而不是“不带感情”。
换音色也有讲究:男声读历史传记类更像那么回事,女声读文学金句类更柔和。如果你用的是支持情感标签的 TTS,可以在文案开头插入一个“温柔”或“平静”的标签。但要小心,情感语音会放大句尾拖音,语录类短句用“平静”就好。
4.3 画面参数:背景图、字幕样式和超分的取舍
画面决定观众是否愿意停留。最稳的方案是:每本书做一张主题背景图,工作流里只换文字不换底图。不要依赖 AI 每回生成新背景,那会让连续两天的视频风格跳跃,账号看起来不专业。
字幕样式统一用白字加黑边,或者黑字加白边。不要用磨砂半透明样式,每天更新的账号,字幕清晰度比美观更重要。字幕字号不要超过画面宽度的 5%,手机端看起来舒服,同时避免太顶格。
如果你在本地做后期,可以控制 ffmpeg 的-crf参数在 18 到 20,否则文件体积会膨胀到几十兆。发布平台一般会二次压缩,上传的文件分辨率 1080p 就够,不用做 4K。而“视频超分工作流”建议放在每周精选或爆款预测后手动执行,不要全量接入。原因很简单:超分会大幅增加处理时间,如果每天凌晨排队,发布就会延后,断更反而得不偿失。
4.4 素材多样性:避免三天“撞款”
工作流毕竟是机器,默认参数下它会每天取同一个顺序。如果不做任何随机化,连续三天的视频内容可能是同一本书同一句话。我常用的两个方案:
方案一,在素材表里加last_used_date字段,工作流查询时要求last_used_date < 当前日期减一天,保证今天不会重复昨天的内容。
方案二,在提示词里注入“开场模板”。把十个不同的开头方式写进一个变量,每天随机挑一个。同样一段书摘,用“今天我要分享一句让我失眠的话”开头和用“这本书里最锋利的一句”开头,完全是两种观感。
顺便提一个延伸做法:这套素材层不只可以喂视频工作流,还可以喂公众号发布工作流。扣子工作流自动生成公众号文章并发布,是另一种复用方式,只需要把大模型节点的提示词从“口播稿”改成“公众号图文”。但这里要注意,视频和公众号不要共用一个触发器,否则同一天发布的内容会高度雷同,平台账号的原创度会被影响。
5. 扣子视频工作流避坑:5 个最容易“翻车”的配置点
5.1 导入资源包失败:invalid zip archive could not find eocd
现象:点击导入 zip 后,工作台直接报错“导入资源包失败 caused by: invalid zip archive: could not find eocd”,有时候压缩包在本地甚至都无法预览。
原因:绝大多数不是平台问题,而是包本身损坏。最常见的是下载中断,其次是重新压缩时破坏了 zip 的文件末尾记录。很多人会用右键“添加到压缩文件”把整个目录再压一遍,这个动作会改变内部路径结构,导致导入器找不到 End of Central Directory 标记。
解决:第一,永远保留你下载到的原始 zip,不解压后重新压缩。第二,用unzip -t 每日读书视频.zip做完整性测试,输出最后一行提示“No errors detected”再导入。第三,如果非要修改包内的提示词,先解压到临时目录,修改好后再用命令行打包:
zip -r fixed.zip workflow.json assets scripts参数说明:-r表示递归打包子目录。用命令行而不是图形界面打包,至少能保证文件头不被多加内容。测试时建议用一个最小 demo,不要直接在生产工作流上反复试错。
5.2 定时触发的时间和预期差了好几个小时
现象:工作流里设置了每天早上 8 点自动运行,结果日志显示凌晨 0 点就跑了,或者一直不执行。
原因:很多工作流平台的 cron 表达式使用 UTC 时间,没有单独标注时区。你填的 8 点被解释成 UTC 8 点,本地时间就是当天下午 4 点;如果设置成 0 点,本地就是早上 8 点。月份、星期字段也可能出现错位,周日是否算第 0 天各个平台不统一。
解决:先不要直接用 cron,第一次用“手动触发”跑通,再换算时区。比如要本地早上 8 点触发,UTC 时区就写0 0 * * *;如果你在东八区,又想要每天固定时间触发,尽量用平台提供的“间隔触发”而不是裸 cron。我习惯在 README 里记录一句话:“本地时间 8:00 = cron 0 0”,防止下次调整时重新踩坑。
5.3 视频生成后只有画面没有声音
现象:成片在本地播放器里画面正常,但完全没有声音;或者有声音,但和字幕对不上。
原因:多数是音频格式问题。TTS 插件输出的是mp3,但视频合成节点依赖内置的 ffmpeg 解码器,如果编码格式不被识别,音轨会被静默丢弃。不是没生成声音,而是输出节点没读到。音画不同步则大概率是音频采样率和视频帧率不匹配。
解决:在 TTS 节点和视频节点之间加一个音频转码节点,统一输出aac 44100Hz。如果本地做校验,用 ffprobe 查看音轨:
ffprobe -show_streams daily_read_output.mp4看到codec_name=aac说明音轨正常;如果显示none,就是静音。这条命令可以写进每日任务后面的检查脚本里,生成失败时不发布。
5.4 连续几天视频都引用同一句书摘
现象:工作流每天正常触发,但视频里的书名和摘录完全一样,翻素材表却发现新数据一直没被消费。
原因:素材源查询没有加“已使用”过滤条件,每次都返回第一条;或者加了条件,但日期字段存的是字符串,比较时类型不一致导致条件永远不成立。
解决:如果是云表格,查询语句里加WHERE last_used_date != CURRENT_DATE;如果是本地 CSV,就用日期取模代替。关键是要在消费后把这条记录的last_used_date更新到当天。没有这一步,素材池再大也会天天迭代第一行。
5.5 插件额度用完,视频直接“断更”
现象:前十天每天正常出片,第十一天日志出现 429 异常,工作流运行中断,当天视频没有发布。很多运营没看日志,直到晚上才发现缺口。
原因:TTS 或图片插件有免费配额,用完后返回限流错误。工作流没有设置错误分支,插件失败导致整条流水线停止,而且失败任务不会自动重试。
解决:给关键节点加“异常重试”分支,最多重试 2 次;失败时通过飞书或钉钉 webhook 通知管理员。同时写一个额度检查脚本,每天查看剩余配额,低于 20% 提前提醒。这是我从“断更事故”里得来的血泪经验:自动化的可贵之处是稳定,但稳定需要一套兜底机制。
6. 让工作流长期稳定运转的三个习惯:验证、备份和人工抽检
6.1 用一张日志表给每条视频做“体检”
无论你用 Excel 还是数据库,我都会给每次执行建立一行日志。字段包含执行日期、源书名、文案字数、TTS 时长、视频文件大小、最终状态。人工逐条看视频不现实,但日志表能迅速发现规律:某天起文案明显变短,大概率是 prompt 被误改;某个音色延迟变高,可能是插件账号欠费。日志在每日任务跑完后追加即可,耗时几十毫秒,不需要复杂链路。
6.2 把“能跑通”的版本用 zip 存成后悔药
工作流一旦调好,不要让它在平台里“裸奔”。每次大改动后,我会导出 workflow JSON,连同提示词版本、模板图和说明文件打成 zip,文件名带上日期,例如daily_reading_video_20250511.zip。这个 zip 不是为了分发,而是为了后悔:某天调整后效果变差,能快速恢复上一个版本。
打包时注意不要带上密钥文件。导出的 JSON 里如果引用了全局变量,保留变量名而不是值。如果你用云表格存素材,权限链接要写在 README 里,否则三周后自己都找不到数据源。这一份 zip 放到本地备份盘,异地再放一份。它不占空间,却能在工作流调坏后免去从零重组的成本。
6.3 每周一次人工抽检,防止账号被降权
自动化能做“每天发一条”,但判断不了“这条内容是否被限流”。我一般每周五抽检本周的三条成片,重点看两件事:封面和字幕有没有重复;完播率有没有异常下降。如果连续一周完播率走低,我改的通常不是视频节点,而是文案开头是不是太拖了。
经验之谈:越依赖工作流,越要保留一个“人类开关”。我在每天自动任务之后加了一个“待发布”队列,工作流只负责生成,不直接发布。每天上午扫一眼开头三五秒,再一键发布。这个习惯把风险控制在当天发现,而不是三天后才知道翻车。自动化解决的是生产效率,内容审美还是要自己把关。希望这些方法能让你少走几段弯路,如果你也在调每日读书类工作流,希望帮到你。
本文还有配套的精品资源,点击获取