跳到正文
土土金API

营销视频与图片素材

营销视频素材一般由三类模型配合:对话模型按产品卖点写分镜和提示词,图像模型生成每个镜头的关键帧和封面,视频模型以关键帧为首帧生成视频片段(每次提交返回 4 段候选),再由人挑选、剪辑、审核后发布。图像和视频模型按次计费,按每月 200 条素材估算,用各模型最低价分组的实时价格计算,模型费用每月约 ¥1,602,平均每条约 ¥8.01。

价格更新于 2026年11月13日 01:33

月成本估算

假设:每月制作 200 条视频素材;每条写一份分镜(输入约 1,500 tokens、输出约 1,200 tokens),分 2 个镜头,每个镜头生成 2 张候选关键帧、提交 1 次视频任务(返回 4 段候选),另做 2 张不同尺寸的封面。合计 800 次图像生成、400 次视频任务、400 次图像编辑。

¥1,602/ 月

  • 分镜与提示词¥1.95
  • 关键帧生成¥320
  • 视频片段生成¥1,120
  • 封面与多尺寸版本¥160
看用量假设

业务问题

短视频平台和信息流广告要的素材越来越多:同一个产品要做不同卖点、不同人群、不同尺寸的版本,还要不断换新。全靠拍摄和剪辑,成本高、周期长,测试一个新方向往往要等上一两周。

视频和图像模型能根据文字和参考图生成画面和视频片段,适合快速做出多个版本去测试。但生成结果不稳定:同一段提示词每次出来的画面都不一样,产品外观、文字和 logo 可能走样,也可能出现不符合广告规范或侵犯他人权利的内容。

比较稳的做法是把流程拆开:先用模板化的提示词批量生成关键帧,人挑出满意的画面,再以它为首帧生成视频片段;所有成片发布前都要人工审核产品细节、文字和版权,确认符合投放平台和广告相关的规定。

推荐模型组合

推荐模型按实时目录自动选取,价格取各模型最低价分组,更新于 2026年11月13日 01:33。点模型名可查看全部分组价格。

参考架构

  1. 1

    整理素材与规范

    准备产品实拍图、卖点和目标人群,以及品牌规范:主色、字体、logo 用法、不能出现的元素和广告用语的限制。

  2. 2

    写分镜和提示词

    对话模型按模板输出分镜:每个镜头的画面描述、镜头运动和配文,并填好生图和生视频提示词。模板固定下来,批量替换产品和卖点即可。

  3. 3

    生成关键帧

    每个镜头用图像模型生成 2 到 4 张候选画面,人挑出产品外观正确、构图满意的一张;需要和实物一致时,用实拍图做图像编辑,只改背景和氛围。

  4. 4

    生成视频片段

    把选中的关键帧存到自己的存储,生成可访问的图片地址,连同运动描述提交视频任务;轮询任务状态,完成后立即下载视频,不要长期引用接口返回的地址。

  5. 5

    剪辑与封面

    从候选片段里挑出可用的,在剪辑工具里拼接、加字幕和配音;用图像编辑模型在关键帧上加标题,做出不同尺寸的封面。

  6. 6

    审核后发布

    发布前人工检查产品外观、价格和文字、logo、人物肖像和版权,确认符合投放平台的规则和广告相关法规;平台要求标注 AI 生成内容的,按要求标注。

成本估算

假设:每月制作 200 条视频素材;每条写一份分镜(输入约 1,500 tokens、输出约 1,200 tokens),分 2 个镜头,每个镜头生成 2 张候选关键帧、提交 1 次视频任务(返回 4 段候选),另做 2 张不同尺寸的封面。合计 800 次图像生成、400 次视频任务、400 次图像编辑。

项目模型用量假设费用
分镜与提示词qwen3.5-plus200 次 × 输入 1,500 + 输出 1,200 tokens¥1.95
关键帧生成nano-banana-pro800 次¥320
视频片段生成Midjourney Video400 次¥1,120
封面与多尺寸版本nano-banana-pro400 次¥160
合计(每月)¥1,602

按各模型最低价分组的实时价格计算,价格更新于 2026年11月13日 01:33。

只含模型调用费用,不含剪辑、配音、存储和人工审核成本。图像和视频模型按次计费,表中按最低价分组计算;对结果不满意重新生成的次数也要算进去,比如每个镜头多提交一次视频任务,视频这一项就翻倍。平均每条素材的费用等于合计除以 200。

示例代码

按模板生成关键帧并保存;人工选定后把关键帧上传到你自己的存储,提交视频任务并轮询,完成后下载全部候选片段。

示例代码(Python,关键帧 + 视频片段)
import base64
import os
import time

import requests
from openai import OpenAI

API_KEY = os.environ["TUTUJIN_API_KEY"]
SITE = "https://www.tutujin.com"
client = OpenAI(base_url="https://www.tutujin.com/v1", api_key=API_KEY, timeout=300)
HEADERS = {"Authorization": "Bearer " + API_KEY}
UA = {"User-Agent": "Mozilla/5.0"}  # some file hosts reject requests without a browser-like User-Agent

# One template, many products and selling points (the fields can be filled in by qwen3.5-plus).
FRAME = "{product}, {scene}, clean commercial photography, soft daylight, brand colors {colors}, no added text"


def download(url, path):
    r = requests.get(url, headers=UA, timeout=300)
    r.raise_for_status()
    with open(path, "wb") as f:
        f.write(r.content)


def key_frame(path, **fields):
    image = client.images.generate(model="nano-banana-pro", prompt=FRAME.format(**fields)).data[0]
    if image.b64_json:
        with open(path, "wb") as f:
            f.write(base64.b64decode(image.b64_json))
    else:
        download(image.url, path)  # temporary URL: store the file right away


def video_clips(first_frame_url, motion_prompt):
    """Video generation is an async task: submit, poll, download. One task returns 4 clips."""
    submit = requests.post(
        SITE + "/mj/submit/video",
        headers=HEADERS,
        json={"prompt": motion_prompt, "image": first_frame_url, "motion": "low"},
        timeout=60,
    ).json()
    if submit.get("code") != 1:
        raise RuntimeError(submit.get("description"))
    while True:
        time.sleep(10)
        task = requests.get(f"{SITE}/mj/task/{submit['result']}/fetch", headers=HEADERS, timeout=30).json()
        if task.get("status") in ("SUCCESS", "FAILURE"):
            break
    if task["status"] == "FAILURE":
        raise RuntimeError(task.get("failReason"))
    return [v["url"] for v in task.get("videoUrls") or []]


key_frame("mug-shot-1.png", product="A white ceramic mug", scene="on a wooden breakfast table", colors="white and teal")
# after a person picks the frame, upload it to your own storage and pass its URL
for i, url in enumerate(video_clips("https://cdn.example.com/mug-shot-1.png", "slow push-in, steam rising from the mug")):
    download(url, f"mug-shot-1-clip-{i + 1}.mp4")

用一把 Key 试试这个方案

注册后在控制台创建 API Key,把上面代码里的 base_url 和 Key 换成你的就能运行。企业采购、开发票可以加客服微信 JsnonoChat。

土土金客服微信二维码
微信JsnonoChat

扫码或搜索微信号添加客服

常见问题

一条营销视频素材大概多少钱?

按本页的假设,一条素材包括 1 份分镜、4 张关键帧、2 次视频任务(共 8 段候选)和 2 张封面,用最低价分组计算平均每条约 ¥8.01,每月 200 条合计约 ¥1,602。重新生成的次数越多,费用越高。

能直接用一段文字生成整条广告视频吗?

视频模型生成的是一段段片段,不是剪好的成片。常见做法是按镜头分别生成片段,再在剪辑工具里拼接、加字幕和配音。用关键帧作首帧,比纯文字生成更容易控制画面。

为什么要先生成关键帧,再生成视频?

图像模型按张计费,单价一般比视频任务低。先用图片把画面、产品外观和构图挑好,再把选中的画面作为首帧生成视频,可以减少视频任务的重试次数。

视频任务失败或被拒绝怎么办?

提示词触发模型的内容审核时,提交会失败或任务以 FAILURE 结束,修改提示词后再提交。按 Midjourney 接口文档的说明,提交被拒绝不扣费,任务最终失败会退回。

生成的视频和图片可以商用吗?

能否商用、是否涉及他人的商标、肖像或作品,需要结合模型提供方的使用条款和你上传素材的来源自行确认。我们不对生成内容的版权归属做判断,发布前请人工审核。

返回的视频地址能一直用吗?

不建议长期引用。任务完成后立即下载视频,存到你自己的对象存储,再进入剪辑和审核流程。