首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >用 WorkBuddy 搭建全自动新闻视频生产线:从采集到成片只需 10 分钟

用 WorkBuddy 搭建全自动新闻视频生产线:从采集到成片只需 10 分钟

原创
作者头像
用户12501733
发布2026-05-24 11:14:44
发布2026-05-24 11:14:44
1460
举报

用 WorkBuddy 搭建全自动新闻视频生产线:从采集到成片只需 10 分钟

本文记录了我用 WorkBuddy 搭建"全球新闻速报"自动化视频生产线的完整过程。每天早上 8 点自动执行,AI 搜集 7 条全球热点新闻,自动生成 1080×1920 竖屏视频,包含真实配图、逐句字幕和 AI 配音,输出 MP4 直接发布到抖音/头条。

一、为什么做这个项目?

做短视频的同学都知道,新闻资讯类视频是抖音的流量密码——信息密度高、完播率好、容易出爆款。但每天手动找新闻、写文案、配图、配音、剪辑,至少要花 2-3 小时。

我的目标很简单:让 AI 替我干这些脏活。每天自动产出一条 1-2 分钟的全球新闻速报视频,我只需要最后审核一下就能发布。

最终效果:每条视频 7 条新闻,1080×1920 竖屏,真实新闻配图 + 半透明遮罩,逐句字幕跟随 AI 配音,云扬男声 -5% 语速。

二、技术栈

组件

用途

WorkBuddy

AI 对话 + 自动化调度 + 代码生成

Python

核心视频生成脚本

Pillow

逐帧渲染画面(标题、字幕、配图)

edge-tts

微软免费 TTS,中文云扬男声

FFmpeg

帧序列合成视频 + 音频拼接

环境要求:

  • Python 3.11+(Pillow、edge-tts)
  • FFmpeg(Windows 构建版
  • Windows 系统(需要微软雅黑字体)

三、核心流程设计

整条生产线分为 6 个步骤:

代码语言:ash
复制
新闻采集 → 选题筛选 → 文案撰写 → 视觉渲染 → AI配音 → 视频合成

在 WorkBuddy 中,我通过自动化任务(Automation)设置每天早上 8 点触发。WorkBuddy 会自动:

  1. 通过网络搜索采集当天全球热点新闻
  2. 筛选 7 条最有报道价值的新闻
  3. 为每条新闻生成标题、正文和配音文案
  4. 根据新闻主题匹配背景配图
  5. 用 edge-tts 生成配音音频
  6. 用 FFmpeg 合成最终视频

四、代码实现详解

4.1 新闻数据结构

每条新闻包含以下字段:

代码语言:python
复制
NEWS_ITEMS = [
    {
        "category": "中东局势",           # 分类标签
        "title": "中东多国宣布战备状态...", # 标题(画面大字)
        "bg_file": "Israeli_airstrike_*.png",  # 匹配的背景图文件名
        "content": "据路透社报道...",     # 正文内容(画面滚动显示)
        "tts_text": "据路透社报道..."     # 配音文案(精简版)
    },
    # ... 共7条
]

关键设计content 是完整的新闻正文,用于画面显示;tts_text 是精简的配音版本,控制在 15 秒以内。两者分开是因为观众阅读速度和语速不同。

4.2 视觉规格(v3 标准)

代码语言:python
复制
WIDTH, HEIGHT = 1080, 1920   # 竖屏 9:16
FPS = 30

# 配色方案
SUBTITLE_BG = (120, 27, 57)           # 深红色字幕背景
TITLE_BG_TOP = (216, 188, 197)        # 粉红渐变标题栏
TITLE_BG_BOT = (230, 205, 215)
RED_LABEL_BG = (165, 20, 48)          # 分类标签红底

# 布局分区
TITLE_BAR_H  = int(HEIGHT * 0.07)     # 标题栏高度
CONTENT_H    = int(HEIGHT * 0.76)     # 内容区高度
SUBTITLE_H   = int(HEIGHT * 0.10)     # 底部字幕区

画面从上到下分为四个区域:粉红渐变标题栏配图+内容区(带半透明黑色遮罩)→ 深红底部装饰条深红字幕条

4.3 背景图主题匹配

这是最容易踩坑的地方。我最初用顺序循环分配背景图,结果中东新闻配了个建筑图,完全对不上。

解决方案:给每条新闻手动指定 bg_file 字段。

代码语言:python
复制
# 背景图加载函数:优先使用新闻指定的图片
def load_bg_image(idx, bg_file=""):
    # 1. 优先加载指定的背景图
    if bg_file:
        specified_path = os.path.join(BG_DIR, bg_file)
        if os.path.exists(specified_path):
            return _process_image(specified_path)

    # 2. 兜底:按索引循环
    fallback_idx = idx % len(BG_FILES)
    return _process_image(BG_FILES[fallback_idx])

图片处理流程:居中裁剪 → 缩放到 1080×1920 → 高斯模糊(radius=2,避免文字难以辨认)。

4.4 AI 配音(edge-tts)

代码语言:python
复制
import edge_tts

async def generate_tts(text, output_path, rate="-5%"):
    communicate = edge_tts.Communicate(
        text,
        "zh-CN-YunyangNeural",  # 云扬男声
        rate=rate               # -5% 语速,新闻播报节奏
    )
    await communicate.save(output_path)

踩坑记录

  • edge-tts 依赖微软语音服务,网络不稳定时会连接失败。我的解决方案是加重试逻辑(3 次)+ 静音降级兜底
  • 语速设为 -5%,太慢观众会划走,太快听不清
  • 配音文案控制在 15 秒以内,太长完播率会掉

4.5 逐句字幕同步

字幕需要和配音同步变化。实现思路:将配音文案按标点拆分,根据音频时间戳计算当前应该显示哪句话。

代码语言:python
复制
def split_subtitle_sentences(text):
    """按标点拆分字幕,和配音内容完全一致"""
    parts = re.split(r'[,,。!?;;!?、]', text.strip())
    return [p.strip() for p in parts if p.strip()]

def get_subtitle_for_frame(sentences, timestamps, duration, frame_idx):
    """根据当前帧时间计算应显示的字幕"""
    current_time = frame_idx / FPS
    tts_end = timestamps[-1]["end"] if timestamps else duration

    # 按字符比例分配每句的时间区间
    total_chars = sum(len(s) for s in sentences)
    elapsed = 0
    for s in sentences:
        char_ratio = len(s) / total_chars
        dur = tts_end * char_ratio
        end = elapsed + dur
        if elapsed - 0.3 <= current_time < end + 0.2:
            return s
        elapsed = end
    return sentences[-1]

踩坑记录:最初字幕用的是单独的 subtitle 字段,和配音的 tts_text 内容不一致,导致观众看到字幕和听到的声音对不上。改为直接从 tts_text 拆分后问题解决。

4.6 视频合成

每个新闻片段单独渲染后,用 FFmpeg concat 拼接:

代码语言:python
复制
# 1. 帧序列 → 片段视频
ffmpeg -y -framerate 30 -i f%05d.jpg -i audio.mp3 \
       -c:v libx264 -preset fast -crf 20 -pix_fmt yuv420p \
       -c:a aac -b:a 96k -shortest clip_00.mp4

# 2. 所有片段拼接
ffmpeg -y -f concat -safe 0 -i concat.txt -c copy output.mp4

4.7 转场效果

每条新闻的首尾各 15 帧(0.5 秒)做亮度渐变,模拟淡入淡出:

代码语言:python
复制
TRANSITION_FRAMES = 15

for f in range(total_frames):
    brightness = 1.0
    if f < TRANSITION_FRAMES:
        brightness = 0.15 + (f / TRANSITION_FRAMES) * 0.85  # 淡入
    elif f >= total_frames - TRANSITION_FRAMES:
        remaining = total_frames - f
        brightness = 0.15 + (remaining / TRANSITION_FRAMES) * 0.85  # 淡出

    frame = render_frame(idx, news, subtitle_text, brightness)

五、WorkBuddy 自动化调度

在 WorkBuddy 中设置定时任务,每天早上 8 点自动执行:

  1. WorkBuddy 自动搜索当天全球热点新闻
  2. 筛选 7 条最有价值的新闻,生成新闻数据
  3. 自动运行 Python 视频生成脚本
  4. 视频输出到桌面,等待用户预览确认后发布

关键点是 WorkBuddy 的对话上下文——它会记住之前的技术决策(比如 v3 视觉标准、配色方案),不需要每次重新指定。

六、最终效果

指标

数值

分辨率

1080 × 1920(竖屏)

帧率

30fps

新闻数量

7 条/期

视频时长

1.5 - 2 分钟

文件大小

约 7 MB

配音

云扬男声 -5% 语速

字幕

逐句跟随配音

背景

主题匹配真实图片 + 半透明遮罩

七、踩坑总结

问题

原因

解决方案

背景图和新闻不匹配

按索引顺序分配图片

每条新闻指定 bg_file 字段

字幕和配音不同步

subtitle 和 tts_text 内容不同

字幕直接从 tts_text 拆分

部分段无声音

edge-tts 网络不稳定

3 次重试 + 静音降级兜底

视频文件过大

JPEG quality=95

降到 88,文件减半画质无明显变化

字体在不同机器上缺失

硬编码字体路径

使用 Windows 自带微软雅黑

八、扩展方向

  • 多语言版本:edge-tts 支持英语、日语等多种语言,可扩展为多语种新闻
  • 自动发布:接入剪映/抖音 API 实现端到端自动发布
  • 数据驱动:接入金融数据插件,生成股市/基金类专项视频
  • 互动元素:添加投票、评论引导等互动组件提升互动率

总结

这个项目的核心价值在于:WorkBuddy 不只是一个聊天工具,而是一个可以自主执行复杂任务的 AI 助手。从新闻采集到视频生成,整个流程都是 WorkBuddy 帮我规划和执行的。我只需要在开始时提出需求,中间处理各种技术细节,最后审核成果。

如果你也在做短视频内容,强烈建议试试用 WorkBuddy 自动化那些重复性工作——把时间省下来思考内容创意,而不是把时间花在排版和剪辑上。


本文基于 WorkBuddy 实际项目经验撰写,所有代码均在 Windows 环境实测通过。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 用 WorkBuddy 搭建全自动新闻视频生产线:从采集到成片只需 10 分钟
    • 一、为什么做这个项目?
    • 二、技术栈
    • 三、核心流程设计
    • 四、代码实现详解
      • 4.1 新闻数据结构
      • 4.2 视觉规格(v3 标准)
      • 4.3 背景图主题匹配
      • 4.4 AI 配音(edge-tts)
      • 4.5 逐句字幕同步
      • 4.6 视频合成
      • 4.7 转场效果
    • 五、WorkBuddy 自动化调度
    • 六、最终效果
    • 七、踩坑总结
    • 八、扩展方向
    • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档