Pixelle-Video:AI 全自动短视频引擎
输入主题自动完成文案、画面、配音和剪辑的全自动短视频创作平台。
项目背景
Pixelle-Video 是一个基于 AI 的全自动短视频生成引擎。用户只需输入一个主题,系统就能自动完成文案撰写、素材匹配、语音合成、字幕生成和视频合成的全流程。这个项目基于开源社区的热门项目改造而来,针对中文短视频场景做了大量优化。
为什么需要这样的工具?在短视频时代,内容创作者面临的核心痛点是"生产效率"——一条 1 分钟的短视频,从选题、写稿、找素材、配音、剪辑到发布,可能需要 2-3 小时。而 Pixelle-Video 的目标是把这个过程压缩到 5 分钟以内,让创作者只需要做"选题"这一件事。
技术选型
| 组件 | 选择 | 理由 |
|---|---|---|
| 后端框架 | FastAPI | 异步高性能,支持流式响应 |
| AI 能力 | OpenAI GPT API | 文案生成与润色 |
| 语音合成 | Edge TTS | 免费、高质量的中文语音 |
| 视频处理 | FFmpeg | 老牌视频处理工具 |
| 素材管理 | 本地文件系统 + 素材库 | 可扩展为 OSS |
| 编排引擎 | 内置 Pipeline | 多步骤流水线编排 |
| 部署 | Docker + Docker Compose | 一键部署 |
| 前端 | Vue 3 + Vite | 管理面板与任务监控 |
架构设计
Pixelle-Video 采用流水线架构,每个步骤是一个独立的处理模块:
用户输入主题
→ AI 文案生成 (LLM)
→ 文案分段与素材匹配
→ 语音合成 (TTS)
→ 字幕生成 (SRT)
→ 视频合成 (FFmpeg)
→ 自动发布/保存
模块结构:
- api/ — FastAPI 路由层,包括 content(内容生成)、video(视频合成)、tts(语音)、image(图片)等路由
- pixelle_video/ — 核心引擎,包含各种处理器的实现
- web/ — Vue 3 前端管理界面
- workflows/ — 可配置的工作流定义
- templates/ — 视频模板与样式配置
核心实现
视频生成流水线
# 核心视频生成流程(伪代码结构)
class VideoGenerationPipeline:
def __init__(self, topic: str):
self.topic = topic
self.script = None
self.materials = []
self.audio_path = None
self.subtitle_path = None
async def run(self) -> str:
# Step 1: 生成文案
self.script = await self.generate_script()
# Step 2: 匹配素材
self.materials = await self.match_materials()
# Step 3: TTS 配音
self.audio_path = await self.generate_audio()
# Step 4: 生成字幕
self.subtitle_path = await self.generate_subtitles()
# Step 5: 合成视频
output_path = await self.compose_video()
return output_path
文案生成与分段
AI 文案生成是第一步,也是最关键的一步。好的文案决定了视频的吸引力和完播率:
class ScriptGenerator:
SYSTEM_PROMPT = """你是一个短视频文案专家。请根据主题生成短视频文案。
要求:
1. 开头3秒要有钩子,吸引观众注意力
2. 时长控制在60-90秒
3. 语言口语化,避免书面语
4. 每句话不超过20个字
5. 结尾要有引导互动的话术"""
async def generate(self, topic: str) -> list[dict]:
response = await openai.ChatCompletion.acreate(
model="gpt-4",
messages=[
{"role": "system", "content": self.SYSTEM_PROMPT},
{"role": "user", "content": f"主题:{topic}"}
],
temperature=0.7,
)
script = response.choices[0].message.content
# 按语义分段,每段对应一个镜头
segments = self.split_into_segments(script)
return segments
视频合成核心
使用 FFmpeg 将图片/视频素材、配音、字幕合成最终视频:
async def compose_video(audio_path: str, segments: list,
output_path: str = "output.mp4") -> str:
# 1. 为每段文案匹配素材图片/视频
# 2. 使用 FFmpeg 的 concat 或 filter_complex 合成
cmd = [
"ffmpeg",
"-i", audio_path,
# 素材输入...
"-filter_complex", complex_filter,
"-c:v", "libx264",
"-c:a", "aac",
"-pix_fmt", "yuv420p",
output_path,
]
process = await asyncio.create_subprocess_exec(
*cmd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE
)
await process.communicate()
return output_path
任务管理 API
FastAPI 提供了完整的任务管理接口:
@router.post("/tasks")
async def create_task(request: TaskCreateRequest):
"""创建视频生成任务"""
task_id = str(uuid.uuid4())
background_tasks.add_task(
VideoGenerationPipeline(request.topic).run, task_id
)
return {"task_id": task_id, "status": "queued"}
@router.get("/tasks/{task_id}")
async def get_task_status(task_id: str):
"""查询任务状态"""
task = task_store.get(task_id)
return task
踩坑记录
1. FFmpeg 进程管理
FFmpeg 处理长视频时占用大量内存和 CPU,多个任务并发可能导致 OOM。解决方案:使用进程池限制最大并发数(max_workers=2),并为每个任务设置资源限制。
2. 中文字幕渲染
FFmpeg 默认的字体配置不支持中文,生成的字幕会出现方块。解决方案:安装中文字体(如 Noto Sans CJK),并在 FFmpeg 命令中指定字体路径。
3. 素材版权问题
自动从网络抓取的素材可能存在版权风险。解决方案:内置免费商用素材库(Pexels / Pixabay API)作为默认来源,并提示用户注意版权合规。
4. TTS 语速控制
Edge TTS 的默认语速对短视频来说偏慢(尤其是知识类内容)。解决方案:默认将语速调整为 +20%,并在文案中适当增加节奏感。
总结
Pixelle-Video 是 AI 在内容创作领域的一个典型应用。它解决的问题非常明确——短视频创作的效率瓶颈。通过 LLM 生成文案、TTS 配音、FFmpeg 合成,将传统需要数小时的工作压缩到几分钟。虽然生成的内容质量还无法完全替代专业创作者,但对于批量化的信息类短视频(如知识科普、新闻快讯、产品介绍),已经能达到可用的水平。
项目未来的方向包括:支持更多视频模板、接入动态视频素材、AI 自动选择 BGM、以及多平台一键发布。这个项目让我看到了 AI 在媒体生产领域的巨大潜力。