ListenHubDocs
API 参考解说视频与幻灯片

解说视频与幻灯片

一组接口,把文本或 URL 变成带旁白的分页内容——解说、故事或演示幻灯片——并渲染成视频。

解说视频、故事视频和演示幻灯片是同一组接口的三种模式。你提交一个内容来源和一个音色,ListenHub 撰写旁白并为每一页生成画面,你可以把这些页面当作素材使用,也可以把它们渲染成带旁白的视频。

三个接口在所有模式下共用:

接口用途
POST /v1/storybook/episodes创建单集。mode 选择解说、故事或幻灯片
GET /v1/storybook/episodes/{episodeId}轮询进度,然后读取各页与资源 URL
POST /v1/storybook/episodes/{episodeId}/video把已完成的各页渲染成视频

本页所有接口都使用 OpenAPI Base URL https://api.marswave.ai/openapi,并通过 Authorization: Bearer $LISTENHUB_API_KEY 请求头用 API Key 鉴权。在 listenhub.ai/settings/api-keys 创建密钥。

选择模式

mode 可选,默认为 info。它是三种模式之间唯一不同的字段——本页其余内容对三者都适用。

mode产出第 1 页适用场景
info (默认)信息图、插画、数据可视化杂志式封面知识讲解、产品介绍
story故事场景插画故事封面故事分享、案例研究
slidesPPT 布局(网格、流程图、大数字展示)演讲标题页会议演示、商业汇报、大会演讲

工作流

创建单集

调用 POST /v1/storybook/episodes,传入内容来源、音色和需要的 mode。保存返回的 episodeId。

轮询等待完成

初始等待 60 秒后,每 10 秒轮询一次 GET /v1/storybook/episodes/{episodeId},直到 processStatus 为 success。

使用素材(可选)

pages[] 中是生成的图片和旁白文稿。如果你只需要这些,到此为止即可。

渲染视频

调用 POST /v1/storybook/episodes/{episodeId}/video,把各页合成为带旁白的视频。

轮询视频状态

轮询直到 videoStatus 为 success,然后下载 videoUrl。

创建单集

POST /v1/storybook/episodes

curl -X POST "https://api.marswave.ai/openapi/v1/storybook/episodes" \
  -H "Authorization: Bearer $LISTENHUB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "sources": [
      {"type": "url", "content": "https://example.com/article"}
    ],
    "speakers": [
      {"speakerId": "<SPEAKER_ID>"}
    ],
    "language": "en",
    "mode": "info"
  }'
const response = await fetch(
  'https://api.marswave.ai/openapi/v1/storybook/episodes',
  {
    method: 'POST',
    headers: {
      Authorization: `Bearer ${process.env.LISTENHUB_API_KEY}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      sources: [{ type: 'url', content: 'https://example.com/article' }],
      speakers: [{ speakerId: '<SPEAKER_ID>' }],
      language: 'en',
      mode: 'info',
    }),
  },
)
const { data } = await response.json()
const episodeId = data.episodeId
import os
import requests

response = requests.post(
    'https://api.marswave.ai/openapi/v1/storybook/episodes',
    headers={'Authorization': f'Bearer {os.environ["LISTENHUB_API_KEY"]}'},
    json={
        'sources': [{'type': 'url', 'content': 'https://example.com/article'}],
        'speakers': [{'speakerId': '<SPEAKER_ID>'}],
        'language': 'en',
        'mode': 'info',
    },
)
episode_id = response.json()['data']['episodeId']

响应:

{
  "code": 0,
  "message": "",
  "data": { "episodeId": "665f1d4e8b3a3f001234abcd" }
}

请求参数

参数类型必填说明
sourcesarray(1)是内容来源。正好 1 项
sources[].typestring是"text" 或 "url"
sources[].contentstring是文本内容;type 为 "url" 时则是 URL 本身
sources[].uristring否接受但会被忽略——对 url 类型的来源,服务端从 content 推导 uri
sources[].metadataobject否来源元数据
speakersarray(1)是¹语音配置。最多 1 项
speakers[].speakerIdstring是说话人 ID(参见音色列表)
skipAudioboolean否默认为 false。为 true 时只产出图片和文本——不生成旁白音频
languagestring否语言代码,如 "en"、"zh"。默认为 en——不会从来源内容推断
modestring否"info"(默认)、"story" 或 "slides"
stylestring否视觉风格 ID。省略即使用该模式的默认风格;可接受的 ID 不属于公开契约

¹ 除非 skipAudio 为 true,否则 speakers 必填;为 true 时可以省略。

language 不会从你的内容中检测。不传时,无论来源是什么语言都会生成英文单集,因此任何非英文 来源都要显式传入。

只需要画面和文稿时,把 skipAudio: true 传上——单集上依然会返回每页图片和旁白文本, 只是不做音频渲染。

轮询单集状态

GET /v1/storybook/episodes/{episodeId}

用返回的 episodeId 轮询查询,直到 processStatus 为 success。

curl "https://api.marswave.ai/openapi/v1/storybook/episodes/{episodeId}" \
  -H "Authorization: Bearer $LISTENHUB_API_KEY"

响应(processStatus 为 success 时):

{
  "code": 0,
  "message": "",
  "data": {
    "episodeId": "{episodeId}",
    "createdAt": 1700000000,
    "mode": "info",
    "processStatus": "success",
    "credits": 30,
    "title": "How AI Is Changing the World",
    "cover": "https://assets.listenhub.app/covers/{episodeId}.png",
    "audioUrl": "https://assets.listenhub.app/storybook/{episodeId}.mp3",
    "audioDuration": 180,
    "videoUrl": "",
    "videoStatus": "not_generated",
    "pages": [
      {
        "text": "Artificial intelligence has transformed industries worldwide...",
        "pageNumber": 1,
        "imageUrl": "https://assets.listenhub.app/pages/{episodeId}-1.png",
        "audioTimestamp": 0
      },
      {
        "text": "From healthcare to finance, AI applications continue to expand...",
        "pageNumber": 2,
        "imageUrl": "https://assets.listenhub.app/pages/{episodeId}-2.png",
        "audioTimestamp": 25.3
      }
    ]
  }
}

素材:pages[] 中的每一项都带有 imageUrl(生成的画面)、text(旁白文稿)和 audioTimestamp(该页在 audioUrl 中的起始位置)。下载这些素材,自己组装分页内容或二次 编辑,完全不必渲染视频。

响应字段

字段类型说明
episodeIdstring你用于轮询的单集标识
modestring该单集创建时使用的模式
processStatusstring见下表
videoStatusstring见下表
creditsnumber该单集到目前为止已消耗的积分
failCodenumber失败码,processStatus 为 fail 时出现
messagestring关于当前状态的可读说明
title / coverstring生成的标题与封面图
audioUrl / audioDurationstring / number旁白音频及其时长(秒)
videoUrlstring渲染完成的视频,videoStatus 为 success 后可用
pages[]array每页的 text、pageNumber、imageUrl、audioTimestamp

积分按单集事后报告,而不是事先报价——平台如何对生成计费,见 积分与定价。

processStatus

值含义
pending处理中
success已完成
fail失败——查看 failCode 和 message,并参见错误处理

videoStatus

值含义
not_generated未触发视频生成
pending视频生成中
success视频就绪(videoUrl 可用)
fail视频生成失败

生成通常需要 2–5 分钟。推荐轮询策略:等待 60 秒后开始,每 10 秒查询一次。

渲染视频

POST /v1/storybook/episodes/{episodeId}/video

为已完成的单集触发视频生成。processStatus 必须先为 success。

curl -X POST "https://api.marswave.ai/openapi/v1/storybook/episodes/{episodeId}/video" \
  -H "Authorization: Bearer $LISTENHUB_API_KEY"

响应:

{
  "code": 0,
  "message": "",
  "data": { "success": true }
}

触发后,轮询 GET /v1/storybook/episodes/{episodeId},直到 videoStatus 为 success,然后读取 videoUrl。

相关

本页内容