Как посчитать реальную цену секунды AI-видео: оплаченная и принятая секунда, лог дублей на Python
На странице тарифов видеомодели написано «около $0,10 за секунду». Ролик на 30 секунд, значит три доллара. Потом приходит счёт в два-три раза больше, и дело не в скрытых комиссиях. Прайс считает каждую секунду, которую модель сгенерировала. В ролик попадает только та, что пережила отбор и монтаж.
Я генерирую короткие ролики и рекламу через Gemini API и OpenRouter и по каждой генерации веду лог. В статье покажу, из чего складывается цена одного дубля, как вести лог дублей в CSV и как за минуту получить по нему цену принятой секунды по сценам. В конце мои цифры по трём проектам, из реальных счетов.
Три цены одной секунды
У одной секунды видео три цены, и путать их дорого.
Цена из прайса. То, что написано на странице тарифов: у Gemini Omni Flash это около $0,10 за секунду 720p. У Seedance 2.0 через OpenRouter по моим счетам выходит около $0,15 за секунду со звуком.
Оплаченная. Сколько реально списали за секунду сгенерированного видео. Она выше цены из прайса: кроме видео ты платишь за вход (картинки и промпт), а у Omni ещё и за размышления модели.
Принятая. Всё, что ушло на видеодубли, делённое на секунды, которые вошли в готовый ролик. Это единственная цена, по которой стоит считать смету.
Связывает их коэффициент расхода:
коэффициент = оплаченные секунды / принятые секунды
цена принятой секунды = сумма за все дубли сцены / принятые секунды
Коэффициент растёт от двух вещей: от брака (дубль целиком в корзину) и от обрезки (дубль принят, но из 5 секунд в монтаж ушли 3). Обрезку часто забывают, а на длинных клипах она съедает больше, чем брак.
Шаг 1. Цена одного дубля по полю usage
Omni тарифицируется по токенам, и у каждого вида токенов своя ставка. На октябрь 2026 по тарифу Gemini API без налогов:
Что | $ за миллион токенов |
|---|---|
Вход: текст и картинки | 1,50 |
Видео на выходе | 17,50 |
Текст на выходе, включая размышления модели | 9,00 |
Секунда видео 720p - 5792 токена, то есть $0,101. Клип на 4 секунды по прайсу стоит $0,405. По счёту у меня такие клипы с картинкой на входе стоили $0,42-0,43: разницу дают вход и примерно 1700 токенов размышлений.
Счётчики токенов приходят в ответе Interactions API в поле usage. Функция, которая превращает их в деньги:
# Ставки Gemini Omni Flash, $ за миллион токенов (октябрь 2026)
PRICE = {"input": 1.50, "video": 17.50, "text": 9.00}
def take_cost(input_tokens, video_tokens, text_tokens):
"""Цена одного дубля по счётчикам токенов из поля usage ответа."""
return (input_tokens * PRICE["input"]
+ video_tokens * PRICE["video"]
+ text_tokens * PRICE["text"]) / 1e6
# 4 секунды 720p: 3000 токенов входа (для примера), 4 x 5792 токена видео, около 1700 токенов размышлений
print(f"${take_cost(3000, 4 * 5792, 1700):.3f}") # $0.425
Имена полей внутри usage у разных версий API отличаются, поэтому один раз сохрани сырой ответ без самого видео и посмотри, как они называются у тебя. И не считай все выходные токены по ставке видео: размышления стоят вдвое дешевле, и цена выйдет завышенной.
С OpenRouter проще: видео там генерируется задачей, и при опросе статуса (GET /api/v1/videos/{id}) готовая задача приходит с полем usage.cost, уже в долларах. Так я получаю цену дублей Seedance.
Шаг 2. Лог дублей
Цена дубля сама по себе ничего не говорит. Нужно знать, сколько из него вошло в ролик. Для этого после монтажа я заполняю простую таблицу, одна строка на дубль:
scene,model,seconds,cost,accepted,reason
1-hands,omni-flash,4,0.42,0,рука поплыла
1-hands,omni-flash,4,0.42,0,камера уехала
1-hands,omni-flash,4,0.43,4,
2-face,omni-flash,5,0.52,3,обрезал хвост на монтаже
3-duo,omni-flash,6,0.63,6,
seconds- фактическая длина файла, а не заказанная. Omni не принимает параметр длительности, длину задаёт промпт, и модель может выдать от 3 до 10 секунд.cost- цена из шага 1 илиusage.costот OpenRouter.accepted- сколько секунд этого дубля ушло в монтаж. Брак - 0.reason- почему не принял или обрезал. Через месяц по этой колонке видно, какой брак у тебя самый дорогой.
Это учебный пример: три сцены небольшого ролика, цены взяты из моих настоящих счетов за клипы такой длины.
Шаг 3. Отчёт по сценам
Скрипт читает лог и считает по каждой сцене коэффициент и цену принятой секунды:
import csv, sys
from collections import defaultdict
scenes = defaultdict(lambda: {"paid_s": 0, "accepted_s": 0, "cost": 0.0, "takes": 0})
for row in csv.DictReader(open(sys.argv[1], encoding="utf-8")):
s = scenes[row["scene"]]
s["takes"] += 1
s["paid_s"] += float(row["seconds"])
s["accepted_s"] += float(row["accepted"])
s["cost"] += float(row["cost"])
print(f"{'сцена':<10}{'дублей':>7}{'оплачено':>10}{'принято':>9}{'коэф.':>7}{'$/принятую с':>14}")
total = {"paid_s": 0, "accepted_s": 0, "cost": 0.0}
for name, s in scenes.items():
for k in total:
total[k] += s[k]
if not s["accepted_s"]:
print(f"{name:<10}{s['takes']:>7}{s['paid_s']:>9.0f}с{'0':>9}{'-':>7}{'не принята':>14}")
continue
k = s["paid_s"] / s["accepted_s"]
print(f"{name:<10}{s['takes']:>7}{s['paid_s']:>9.0f}с{s['accepted_s']:>8.0f}с{k:>7.2f}{s['cost'] / s['accepted_s']:>14.3f}")
if not total["accepted_s"]:
sys.exit("ни одна сцена не принята")
k = total["paid_s"] / total["accepted_s"]
print(f"{'итого':<10}{'':>7}{total['paid_s']:>9.0f}с{total['accepted_s']:>8.0f}с{k:>7.2f}{total['cost'] / total['accepted_s']:>14.3f}")
Вывод на логе из шага 2:
сцена дублей оплачено принято коэф. $/принятую с
1-hands 3 12с 4с 3.00 0.318
2-face 1 5с 3с 1.67 0.173
3-duo 1 6с 6с 1.00 0.105
итого 23с 13с 1.77 0.186
Что тут видно. Сцена с руками стоит втрое дороже прайса: два дубля из трёх ушли в корзину. Сцена с лицом прошла с первого раза, но всё равно в 1,7 раза дороже, потому что две секунды я отрезал. Сцена с двумя героями по цене почти совпала с прайсом. В среднем по ролику принятая секунда стоит $0,186, почти вдвое дороже обещанных $0,10.

Мои цифры по трём проектам
Это уже не учебный лог, а счета. Цены на октябрь 2026, тарифы Google API и OpenRouter, без налогов и комиссий.
Проект | Модель | Оплачено | Принято | Коэффициент | $ за принятую секунду |
|---|---|---|---|---|---|
Ролик за вечер: реклама копчёной рыбы, 6 планов | Veo 3.1 Fast | 24 с | 24 с | 1 | 0,10 |
8 движений камеры, по клипу на движение | Veo 3.1 Fast | 40 с | 32 с | 1,25 | 0,125 |
Реклама товара из одного фото | Seedance 2.0 | 27 с | 15 с | 1,8 | 0,27 |
Пояснения к строкам.
Ролик за вечер прошёл без единого второго дубля. Все сервисы вместе (кадры, видео, голос, музыка) по сегодняшним ценам около $2,86 на 26,5 секунды готового ролика, то есть примерно 11 центов за секунду. Это везение, а не норма. Помогли две вещи: стартовые кадры я утверждал до видео, а движение камеры в каждом клипе было одно и простое.
Движения камеры: два клипа из восьми пришлось переснять с другого стартового кадра.
Реклама товара: первый дубль на 15 секунд со звуком стоил $2,27, три пересъёмки плана по 4 секунды без звука ещё $1,83. Первый дубль вместе с кадрами и промптом стоил $2,42, исправления почти столько же. На товаре это типично: клиент простит скучный план, но не поплывшую этикетку, поэтому план с браком упаковки переснимается без вариантов.
Veo 3.1 с 22 октября для разработчиков отключён, эти проекты я снимал до этой даты. Omni Flash по прайсу стоит примерно столько же, около $0,10 за секунду 720p, так что и цена принятой секунды на Omni получится почти той же.
Что сбивает коэффициент
Утверждай стартовый кадр до видео. Картинка 1K в Gemini 3.1 Flash Image стоит около 7 центов, клип на 4 секунды около 42. Проверять лицо, руки и одежду дешевле на картинке.
Одно движение на клип. Каждое лишнее действие в промпте - лишний шанс на брак. «Поднимает чашку, пьёт и смотрит в окно» ломается чаще, чем «поднимает чашку».
Заказывай длину по монтажу. Если в ролик пойдут 3 секунды, не генерируй 6. Обрезка - такой же расход, как брак, просто незаметный.
Стоп после трёх одинаковых дублей. Не вышло за три - меняй одну переменную: промпт, стартовый кадр или модель. Четвёртый дубль с тем же промптом обычно просто сжигает деньги.
Черновик движения на дешёвой модели. Композицию и темп можно проверить на модели подешевле, а финальный дубль снять на той, которой доверяешь. Только проверь финал отдельно: удачный промпт не всегда переносится между моделями.
Выбирай модель по цене принятой секунды, а не по прайсу. На сложном кадре сделай по дублю на двух моделях и сравни не цену, а коэффициент. Модель вдвое дороже, которая принимается с первого раза, выходит дешевле той, что берёт три дубля.
Если у тебя подписка, а не API
В подписке цена секунды спрятана в кредитах, но считается так же, в два шага:
номинальная цена кредита = цена подписки / выданные кредиты
фактическая цена кредита = всё, что заплатил за месяц / реально потраченные кредиты
Подписка $20, выдано 1000 кредитов, потрачено 500: номинально 2 цента за кредит, фактически 4. Цена дубля - его кредиты, умноженные на фактическую цену. Дальше тот же лог и тот же отчёт: в колонку cost пишешь цену дубля в долларах.
Итог
Цена из прайса - нижняя граница: столько ты заплатишь, только если каждый дубль войдёт в ролик целиком. Для сметы нужны две колонки после монтажа: сколько секунд оплатил и сколько принял. На простых сценах у меня коэффициент 1-1,3, на рекламе товара около 2. Руки, вода и мелкие предметы ломаются на любой модели, там закладывай около 3. Поэтому в смете клиенту я закладываю на переделки столько же, сколько на первый дубль, а после первого теста пересчитываю по логу.
Лог дублей заполняется за пять минут после монтажа, а через пару проектов показывает, какие сцены у тебя дорогие и на чём экономить.
Разборы роликов с промптами, браком и счётом за каждую секунду выкладываю в Telegram-канале @tairantino.
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.