一句成语生成AI视频故事:Hermes Agent全流程实操

一句话总结:输入一个成语,Hermes Agent 自动完成「故事脚本→文生图→图生视频→拼接长片」全流水线,零手动操作。


一、效果预览

我以成语**「破茧成蝶」**为例,让整条流水线自动跑通:

  1. Hermes Agent 解析成语意境,输出5场景故事脚本
  2. BlazeAI API 调用视频生成模型,逐段生成视频片段
  3. ffmpeg 拼接 + 过渡 + 旁白,输出3分钟完整故事片

最终产出:一个有画面、有旁白、有字幕的成语故事短片。

封面:AI成语视频创作全流程


二、核心工具与模型介绍

2.1 Hermes Agent——AI 调度中枢

Hermes Agent 是整个流水线的中枢神经,负责:

  • 故事生成:理解成语的文化内涵,构建叙事结构
  • 任务编排:串联文生图、图生视频、拼接等环节
  • 错误处理:某环节失败自动重试或降级

调用方式:

在 Hermes 中输入:

“请用成语’破茧成蝶’创作一个3分钟AI视频故事,包含5个场景,每个场景需要:画面描述+旁白文案+情绪标签”

Hermes 返回结构化 JSON,包含每个场景的完整参数,直接喂给后续环节。

流水线工作流程图

2.2 BlazeAI——多模型聚合 API

Base URL: https://blazeai.boxu.dev/api/

BlazeAI 是一个兼容 OpenAI 格式的多模型聚合平台,一个 Key 调用多种模型:

能力推荐模型说明
文生图flux-dev, sdxl高质量场景图
图生视频kling, runway-gen3静态图动态化
文生视频ltx-video, cogvideo直接文本生成视频
旁白 TTSelevenlabs, azure-tts多语言配音

API 调用示例(Python):

import requests

BASE_URL = "https://blazeai.boxu.dev/api/v1"
API_KEY="blz_xxxxx"  # Your Blaze AI key

# 文生图
response = requests.post(
    f"{BASE_URL}/images/generations",
    headers={"Authorization": f"Bearer ***              "model": "flux-dev",
            "prompt": "A golden cocoon opening under moonlight, butterfly emerging, cinematic 8K",
            "n": 1,
            "size": "1024x1024"
        }
    }
)
image_url = response.json()["data"][0]["url"]

# 图生视频
response = requests.post(
    f"{BASE_URL}/videos/generations",
    headers={"Authorization": f"Bearer ***              "model": "kling",
            "image_url": image_url,
            "duration": 5,
            "mode": "standard"
        }
    )
video_url = response.json()["url"]

2.3 Agnes 文生图——中文场景特化

  • 模型: agnes-image-2.1-flash
  • Endpoint: https://apihub.agnes-ai.cn/v1/images/generations

Agnes 在中文意境表达上有独特优势,特别适合成语故事的中国风画面:

import subprocess, json

prompt = "金色蚕茧在月光下缓缓裂开,一只发光蝴蝶破茧而出,数字粒子特效"
payload = json.dumps({
    "model": "agnes-image-2.1-flash",
    "prompt": prompt,
    "n": 1,
    "size": "768x1024"
})

# Windows 需用 subprocess curl 绕过 SSL 问题
with open("_payload.json", "w") as f:
    f.write(payload)

result = subprocess.run([
    "curl", "-sS", "-X", "POST",
    "https://apihub.agnes-ai.cn/v1/images/generations",
    "-H", "Authorization: Bearer ***    "-H", "Content-Type: application/json",
    "-d", "@_payload.json"
], capture_output=True, text=True, timeout=90)

data = json.loads(result.stdout)
image_url = data["data"][0]["url"]

Agnes生成的成语场景图


三、完整流水线搭建

3.1 流水线架构

整个流水线分成五个阶段:

阶段一:成语 → Hermes Agent → 结构化故事脚本(含每场景的画面描述、旁白、情绪标签)

阶段二:场景描述 → 文生图(Agnes / BlazeAI)→ 静态场景图

阶段三:场景图 → 图生视频(BlazeAI Kling)→ 5秒短视频片段

阶段四:所有片段 → ffmpeg 拼接 + 淡入淡出过渡 → 完整长视频

阶段五:生成封面 + 撰写推文 → 微信公众号/视频号一键发布

3.2 Hermes Agent 自动编排

让 Hermes 生成一个完整的 Python 脚本,一键运行整个流水线:

#!/usr/bin/env python3
"""
成语AI视频生成器 - 完整流水线
输入:一个成语
输出:一段完整的AI视频故事
"""
import json, os, subprocess, time, requests

# ============ 配置 ============
BLAZE_BASE = "https://blazeai.boxu.dev/api/v1"
BLAZE_KEY = "blz_xxxxx"
AGNES_BASE = "https://apihub.agnes-ai.cn/v1"
AGNES_KEY = "sk_xxxxx"
IDIOM = "破茧成蝶"

def generate_script(idiom):
    """用 Hermes Agent 生成结构化故事脚本"""
    return {
        "title": f"{idiom}—— 一个关于蜕变的故事",
        "scenes": [
            {
                "id": 1,
                "description": "暗金色的茧悬挂在古老树枝上,月光透过树叶洒下",
                "narration": "在幽深的森林里,一只小小的茧正在等待命运的召唤。",
                "mood": "mysterious",
                "duration": 5
            },
            {
                "id": 2,
                "description": "茧开始微微颤动,金色裂纹从内部蔓延开来",
                "narration": "内心的力量开始涌动,那是生命对自由的渴望。",
                "mood": "tension",
                "duration": 5
            },
        ]
    }

def generate_image(prompt, outpath):
    """使用 Agnes 生成场景图"""
    payload = json.dumps({
        "model": "agnes-image-2.1-flash",
        "prompt": prompt, "n": 1, "size": "1024x1024"
    })
    pl = outpath.replace(".png", ".json")
    with open(pl, "w") as f:
        f.write(payload)
    result = subprocess.run([
        "curl", "-sS", "-X", "POST",
        f"{AGNES_BASE}/images/generations",
        "-H", f"Authorization: Bearer ***        "-H", "Content-Type: application/json",
        "-d", f"@{pl}"
    ], capture_output=True, text=True, timeout=90)
    os.remove(pl)
    data = json.loads(result.stdout)
    img_url = data["data"][0]["url"]
    subprocess.run(["curl", "-sS", "-o", outpath, img_url], timeout=60)
    return outpath

def generate_video(image_path, outpath, duration=5):
    """使用 BlazeAI 将静态图转为视频"""
    response = requests.post(
        f"{BLAZE_BASE}/videos/generations",
        headers={"Authorization": f"Bearer {BLAZE_KEY}"},
        json={
            "model": "kling-v2",
            "image_url": upload_image(image_path),
            "duration": duration,
            "mode": "standard"
        }
    )
    video_url = response.json()["url"]
    subprocess.run(["curl", "-sS", "-o", outpath, video_url], timeout=120)
    return outpath

def stitch_videos(video_paths, output_path):
    """使用 ffmpeg 拼接多段视频"""
    with open("concat_list.txt", "w") as f:
        for v in video_paths:
            f.write(f"file '{v}'\n")
    subprocess.run([
        "ffmpeg", "-f", "concat", "-safe", "0",
        "-i", "concat_list.txt",
        "-c:v", "libx264", "-crf", "18",
        "-preset", "medium",
        "-c:a", "aac", "-b:a", "192k",
        "-movflags", "+faststart",
        "-y", output_path
    ], check=True)

def main():
    script = generate_script(IDIOM)
    video_clips = []
    for scene in script["scenes"]:
        print(f"处理场景 {scene['id']}...")
        img_path = f"scene_{scene['id']}.png"
        generate_image(scene["description"], img_path)
        vid_path = f"scene_{scene['id']}.mp4"
        generate_video(img_path, vid_path, scene["duration"])
        video_clips.append(vid_path)
    stitch_videos(video_clips, f"{IDIOM}_final.mp4")
    print(f"完成!输出: {IDIOM}_final.mp4")

if __name__ == "__main__":
    main()

四、长视频生成核心技巧

这是最容易踩坑的环节。目前没有任何模型能一次生成几分钟的高质量视频,必须分段生成再拼接。

4.1 技巧一:分段策略

3分钟视频 = 6个场景 × 30秒/场景 = 6 × (6段 × 5秒/段) = 36个5秒短视频片段

关键原则:每个场景生成多段短视频(3-5秒),而非试图一次生成30秒。

4.2 技巧二:ffmpeg 无缝拼接

# 方法1: 直接拼接(同编码参数)
ffmpeg -f concat -i clips.txt -c copy output.mp4

# 方法2: 带过渡效果的拼接(推荐)
ffmpeg -i clip1.mp4 -i clip2.mp4 -filter_complex "
[0:v]trim=0:4,setpts=PTS-STARTPTS[v0];
[1:v]trim=0:4,setpts=PTS-STARTPTS[v1];
[v0][v1]xfade=transition=fade:duration=1:offset=3[outv];
[0:a]atrim=0:4,asetpts=PTS-STARTPTS[a0];
[1:a]atrim=0:4,asetpts=PTS-STARTPTS[a1];
[a0][a1]acrossfade=d=1[outa]
" -map "[outv]" -map "[outa]" output.mp4

4.3 技巧三:统一编码参数

# 将所有片段统一为相同参数,避免拼接失败
for f in scene_*.mp4; do
    ffmpeg -i "$f" \
           -vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2" \
           -r 30 -c:v libx264 -crf 18 -c:a aac -ar 48000 \
           "uniform_$f"
done

4.4 技巧四:添加旁白与字幕

# 生成旁白(BlazeAI TTS)
curl -X POST "https://blazeai.boxu.dev/v1/audio/speech" \
  -H "Authorization: Bearer *** \
  -d '{"model":"elevenlabs","input":"在幽深的森林里...","voice":"zh_female"}' \
  -o narration.mp3

# 合并音视频
ffmpeg -i video.mp4 -i narration.mp3 -c:v copy -c:a aac output.mp4

# 烧字幕
ffmpeg -i output.mp4 -vf "subtitles=story.srt" -c:a copy final.mp4

4.5 技巧五:Hermes 自动化一切

让 Hermes Agent 写一个 master script,自动完成:

  1. 读取故事脚本 JSON
  2. 循环每个场景:调用 Agnes 生成场景图 → 调用 BlazeAI 生成视频片段 → 统一转码
  3. ffmpeg 拼接所有片段
  4. 调用 TTS 生成旁白
  5. 合并音视频 + 烧字幕
  6. 输出最终视频

视频编辑时间线示意图


五、踩坑与解决方案

坑原因解决方案
Agnes API 返回空Windows SSL 握手失败用 curl -k 或 subprocess 绕过
视频片段音画不同步帧率不一致统一用 -r 30 转码
ffmpeg concat 失败编码参数不统一先统一转码再拼接
微信公众号封面上传失败CLI banner_path bug用 upload-cover.js 手动上传获取 media_id
BlazeAI 视频生成超时任务排队设置 120s timeout + 重试机制
长视频画面跳跃场景间缺乏连贯性增加 0.5-1s 淡入淡出过渡
微信API报40164IP不在白名单登录 mp.weixin.qq.com → 开发 → IP白名单添加

六、进阶玩法

  1. 成语系列矩阵:批量跑100个成语,形成短视频内容矩阵
  2. 多语言版本:同一故事生成中英双语旁白,覆盖海外平台
  3. 互动分支:每个场景生成3个选项,做成互动叙事视频
  4. 风格迁移:用 BlazeAI 的视频转视频能力,统一全片视觉风格
  5. 自动发布流水线:视频生成 → 封面截图 → Hermes 写推文 → 公众号/视频号自动发布

七、总结

核心心法:不要试图让AI一次生成完美长视频,而是拆成「文本→图片→5秒片段→拼接」的流水线。

技术栈速查:

环节工具模型
故事生成Hermes AgentClaude/GPT
文生图Agnes APIagnes-image-2.1-flash
图生视频BlazeAIkling-v2 / runway-gen3
视频拼接ffmpeglibx264
旁白BlazeAI TTSelevenlabs
发布wechat-public-cli公众号API

📌 现在你也试试:打开 Hermes,输入一个成语,让 AI 为你生成一段属于自己的 AI 视频故事吧!


本文封面及正文插图均由 agnes-image-2.1-flash 模型生成,视频由 Hermes Agent + BlazeAI + ffmpeg 流水线自动拼接。

← 返回文章列表