Python+edge-tts实现YouTube视频自动化流水线

折腾党阿凯 中级 6小时前 更新于 2026年7月27日 28 浏览 1 点赞 约 1 分钟

用代码跑YouTube频道其实没那么复杂,只要不执着于真人出镜。我给自己的SaaS搞了一套全自动视频生成流,不用剪辑软件,纯靠Python和几个库就把活儿干了。

核心逻辑就是: Puppeteer 截网页图 → edge-tts 合成语音 → MoviePy 拼成视频。

具体实现分这几步:

一、自动化截取素材
为了省事,直接用 Puppeteer 截取实时网页,比做 Mockup 快得多。

const puppeteer = require('puppeteer');
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.setViewport({ width: 1920, height: 1080 });
await page.goto('https://whaletrack.app');
await page.screenshot({ path: 'screenshots/home.png' });
踩坑点: 如果你的 package.json 里设置了 "type": "module",用 require 会报错,记得把文件后缀改成 .cjs

二、白嫖高质量配音
没必要花钱买 API,edge-tts 调用微软的神经语音效果极好,尤其是 en-US-AndrewNeural 这个音色,听起来不像机器人。

import edge_tts
comm = edge_tts.Communicate(script, voice='en-US-AndrewNeural', rate='+8%')
await comm.save('audio.mp3')

三、解决静态图太枯燥的问题
直接放截图太死板,我写了个简单的 Ken Burns 效果(缓慢缩放+平移),让画面动起来。

def apply_ken_burns(img, progress, zoom_from, zoom_to, pan_from, pan_to):
    zoom = zoom_from + (zoom_to - zoom_from) * progress
    iw, ih = img.size
    crop_w, crop_h = int(iw / zoom), int(ih / zoom)
    ox = int(pan_from[0] + (pan_to[0] - pan_from[0]) * progress) * (iw - crop_w)
    oy = int(pan_from[1] + (pan_to[1] - pan_from[1]) * progress) * (ih - crop_h)
    return img.crop((ox, oy, ox + crop_w, oy + crop_h)).resize((1920, 1080), Image.LANCZOS)

四、最后用 MoviePy 组装
把动态图像帧和音频对齐,直接导出。

from moviepy.editor import VideoClip, AudioFileClip
import numpy as np

def make_frame(t):
    progress = t / duration
    frame = apply_ken_burns(bg_image, progress, 1.0, 1.12, (0,0), (0.03,0.02))
    return np.array(frame)

clip = VideoClip(make_frame, duration=duration)
clip = clip.set_audio(AudioFileClip('audio.mp3'))
clip.write_videofile("output.mp4", fps=24)

这套实操下来,成本几乎为 0。虽然不是什么顶级的电影级剪辑,但对于做 SaaS 推广的自动化工作流来说,效率足够高。

AI编程AI编程实战webdevbuildinpublicpython

全部回复 (4)

小柯爱学习 专家 11小时前
记得把edge-tts的语速调慢点,不然听起来太赶了。
0 回复
小Kevin在路上 中级 11小时前
调到-10%左右刚好,你一般设置多少?
0 回复
前端大鹏 初级 11小时前
这方案靠谱,我之前就踩过坑,每次部署完发现录屏里的按钮位移了1px,直接导致自动化测试全挂,简直崩溃。
0 回复
脚本小子阿强 初级 11小时前
MoviePy渲染太慢了,有没有什么更快的替代方案?
0 回复

发表回复

支持 Markdown 格式