目录

AutoClips - 自动化宣传视频生成系统

基于AI的自动化宣传视频生成服务,根据用户的自然语言描述和提供的视频/音频素材,自动生成专业的宣传视频。

功能特性

  • 🤖 AI智能分析:使用DeepSeek大模型分析用户需求,智能选择素材和生成文案
  • 🎙️ AI配音生成:基于edge-tts生成高质量的中文配音和精确的字幕
  • 🎬 视频自动剪辑:集成Creatomate API,自动完成视频剪辑和渲染
  • ☁️ 云端存储:支持多种存储服务(阿里云OSS、AWS S3、本地存储)
  • 🚀 异步处理:支持异步任务处理,提供任务状态查询
  • 📊 进度追踪:实时追踪视频生成进度

系统架构

用户请求 → FastAPI接口 → AI分析 → TTS生成 → 文件上传 → Creatomate渲染 → 返回视频

技术栈

  • Web框架:FastAPI
  • AI模型:DeepSeek
  • TTS服务:edge-tts
  • 视频渲染:Creatomate API
  • 存储服务:阿里云OSS / AWS S3 / 本地存储
  • 任务队列:Celery + Redis(可选)
  • 日志系统:Loguru

安装步骤

1. 克隆项目

git clone <repository-url>
cd autoclips

2. 创建虚拟环境

python -m venv venv
source venv/bin/activate  # Linux/Mac
# 或
venv\Scripts\activate  # Windows

3. 安装依赖

pip install -r requirements.txt

4. 安装系统依赖

需要安装FFmpeg(用于获取视频/音频信息):

# macOS
brew install ffmpeg

# Ubuntu/Debian
sudo apt-get install ffmpeg

# Windows
# 从 https://ffmpeg.org/download.html 下载并安装

5. 配置环境变量

复制示例配置文件并填写你的API密钥:

cp .env.example .env

编辑 .env 文件,配置以下参数:

# DeepSeek API配置
DEEPSEEK_API_KEY=your_deepseek_api_key_here
DEEPSEEK_BASE_URL=https://api.deepseek.com/v1
DEEPSEEK_MODEL=deepseek-chat

# Creatomate API配置
CREATOMATE_API_KEY=your_creatomate_api_key_here

# 存储服务配置(选择一种)
STORAGE_TYPE=oss  # oss, s3, 或 local

# 阿里云OSS配置
OSS_ACCESS_KEY_ID=your_oss_access_key
OSS_ACCESS_KEY_SECRET=your_oss_secret
OSS_BUCKET_NAME=your_bucket_name
OSS_ENDPOINT=oss-cn-hangzhou.aliyuncs.com

# 或 AWS S3配置
# AWS_ACCESS_KEY_ID=your_aws_access_key
# AWS_SECRET_ACCESS_KEY=your_aws_secret
# AWS_BUCKET_NAME=your_bucket_name
# AWS_REGION=us-east-1

# 其他配置...

6. 创建必要的目录

mkdir -p temp output logs

运行服务

启动API服务

python main.py

或使用uvicorn:

uvicorn main:app --host 0.0.0.0 --port 8000 --reload

服务将在 http://localhost:8000 启动。

访问API文档

启动服务后,访问以下地址查看API文档:

API使用示例

1. 生成宣传视频(文件上传)

curl -X POST "http://localhost:8000/api/v1/videos/generate" \
  -F "description=帮我制作一个产品宣传视频,要突出产品的创新性和高品质" \
  -F "video_files=@video1.mp4" \
  -F "video_files=@video2.mp4" \
  -F "audio_files=@bgm.mp3" \
  -F "voice_preference=zh-CN-XiaoxiaoNeural" \
  -F "output_format=mp4" \
  -F "wait_for_completion=true"

2. 生成宣传视频(URL方式)⭐ 新功能

curl -X POST "http://localhost:8000/api/v1/videos/generate-from-urls" \
  -H "Content-Type: application/json" \
  -d '{
    "description": "帮我制作一个产品宣传视频,要突出产品的创新性和高品质",
    "video_urls": [
      "https://example.com/video1.mp4",
      "https://example.com/video2.mp4"
    ],
    "audio_urls": [
      "https://example.com/bgm.mp3"
    ],
    "voice_preference": "zh-CN-XiaoxiaoNeural",
    "output_format": "mp4",
    "wait_for_completion": true
  }'

3. 查询任务状态

curl -X GET "http://localhost:8000/api/v1/tasks/{task_id}"

4. 取消任务

curl -X DELETE "http://localhost:8000/api/v1/tasks/{task_id}"

5. 获取可用语音列表

curl -X GET "http://localhost:8000/api/v1/voices"

Python客户端示例

import requests
from pathlib import Path

API_BASE_URL = "http://localhost:8000"

def generate_video(
    description: str,
    video_files: list,
    audio_files: list = None,
    voice_preference: str = "zh-CN-XiaoxiaoNeural"
):
    files = {
        "description": (None, description),
        "voice_preference": (None, voice_preference),
        "output_format": (None, "mp4"),
        "wait_for_completion": (None, "true")
    }
    
    for idx, video_file in enumerate(video_files):
        files[f"video_files"] = (Path(video_file).name, open(video_file, "rb"))
    
    if audio_files:
        for idx, audio_file in enumerate(audio_files):
            files[f"audio_files"] = (Path(audio_file).name, open(audio_file, "rb"))
    
    response = requests.post(
        f"{API_BASE_URL}/api/v1/videos/generate",
        files=files
    )
    
    return response.json()

# 使用示例
result = generate_video(
    description="制作一个科技感十足的产品宣传视频,强调创新和未来感",
    video_files=["product_video.mp4"],
    audio_files=["background_music.mp3"]
)

print(result)

使用URL生成视频(推荐)⭐

from example import AutoClipsClient

client = AutoClipsClient()

# 从URL生成视频
result = client.generate_video_from_urls(
    description="制作一个科技感十足的产品宣传视频,强调创新和未来感",
    video_urls=[
        "https://example.com/product_video.mp4",
        "https://example.com/usage_scenario.mp4"
    ],
    audio_urls=["https://example.com/background_music.mp3"],
    wait_for_completion=True
)

print(f"视频URL: {result.get('video_url')}")

优势:

  • ✅ 无需下载文件到本地
  • ✅ 支持任意公开可访问的URL
  • ✅ 自动下载并处理素材
  • ✅ 适合云存储和CDN场景

项目结构

autoclips/
├── main.py                 # FastAPI主应用
├── config.py              # 配置管理
├── logger.py              # 日志配置
├── models.py              # 数据模型
├── ai_analyzer.py         # AI分析引擎
├── tts_service.py         # TTS服务
├── storage_service.py     # 存储服务
├── creatomate_service.py  # Creatomate集成
├── video_generator.py     # 视频生成器
├── utils.py               # 工具函数
├── requirements.txt       # 依赖列表
├── .env.example          # 环境变量示例
├── .gitignore            # Git忽略文件
├── temp/                 # 临时文件目录
├── output/               # 输出文件目录
└── logs/                 # 日志文件目录

核心流程

  1. 接收请求:用户上传视频/音频文件和描述
  2. AI分析:DeepSeek分析用户需求,选择素材和生成文案
  3. TTS生成:使用edge-tts生成配音和字幕
  4. 文件上传:将音频和字幕上传到存储服务
  5. 视频渲染:调用Creatomate API渲染视频
  6. 返回结果:返回视频URL或任务ID

配置说明

DeepSeek配置

  • DEEPSEEK_API_KEY: DeepSeek API密钥
  • DEEPSEEK_BASE_URL: API基础URL
  • DEEPSEEK_MODEL: 使用的模型名称

Creatomate配置

  • CREATOMATE_API_KEY: Creatomate API密钥
  • CREATOMATE_BASE_URL: API基础URL

存储配置

支持三种存储类型:

  1. 阿里云OSS

    • OSS_ACCESS_KEY_ID
    • OSS_ACCESS_KEY_SECRET
    • OSS_BUCKET_NAME
    • OSS_ENDPOINT
  2. AWS S3

    • AWS_ACCESS_KEY_ID
    • AWS_SECRET_ACCESS_KEY
    • AWS_BUCKET_NAME
    • AWS_REGION
  3. 本地存储

    • 无需额外配置

TTS配置

  • DEFAULT_VOICE: 默认语音(如 zh-CN-XiaoxiaoNeural
  • DEFAULT_RATE: 默认语速(如 +0%
  • DEFAULT_VOLUME: 默认音量(如 +0%

常见问题

1. FFmpeg未找到

确保FFmpeg已安装并添加到系统PATH中。

2. API调用失败

检查API密钥是否正确配置,网络连接是否正常。

3. 文件上传失败

检查存储服务配置是否正确,权限是否足够。

4. 视频渲染超时

可以增加超时时间或使用异步模式(wait_for_completion=false)。

性能优化

  1. 使用异步处理:对于长时间任务,设置 wait_for_completion=false
  2. 启用缓存:缓存AI分析结果和TTS音频
  3. 优化存储:使用CDN加速文件访问
  4. 并发处理:使用Celery处理多个任务

安全建议

  1. 不要将 .env 文件提交到版本控制
  2. 使用HTTPS保护API通信
  3. 实施请求频率限制
  4. 验证上传文件的类型和大小
  5. 定期清理临时文件

许可证

MIT License

贡献

欢迎提交Issue和Pull Request!

联系方式

如有问题,请提交Issue或联系开发者。

邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802032778号