На странице тарифов видеомодели написано «около $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.