Руководство по использованию
Kling 3.0 текст-в-видео: короткие видеоролики с нативной аудиодорожкой
Большинство демонстраций «текст-в-видео» заканчиваются на беззвучном фрагменте. kling-3.0/text-to-video на hiapi работает иначе — он отрисовывает нативную аудиодорожку с синхронизацией губ прямо в процессе генерации и остаётся единственным уровнем Kling 3.0 с поддержкой вплоть до 4K. Для короткого контента (Reels, TikTok, Shorts) эта комбинация — вертикальная композиция, реальный окружающий звук, без отдельного этапа TTS/озвучки — избавляет от целого шага постпродакшена.
В этой статье мы пройдём реальный рабочий процесс: сначала сгенерируем отдельный фрагмент через API /v1/tasks, затем масштабируем до пакетных фрагментов с помощью асинхронного кода, и в конце — тарифные уровни, по которым нужно рассчитывать бюджет.
Что даёт kling-3.0/text-to-video по сравнению с уровнем turbo
hiapi параллельно запускает две линейки видеомоделей Kling 3.0: kling-3.0-turbo/text-to-video и описанный в этой статье базовый kling-3.0/text-to-video. Уровень turbo быстрее, ограничен 1080p и всегда идёт со звуком — без переключателя, который можно было бы контролировать. Базовый уровень обменивает часть скорости на:
- Нативную синхронизированную аудиодорожку — булево значение
soundв запросе. Когда оно равноtrue, hiapi.ai/ отрисовывает голос и окружающие звуки, соответствующие действиям в кадре, а не накладывает фонограмму поверх. - Верхний предел 4K —
resolutionпринимает720p,1080pили4K, тогда как turbo ограничен 1080p. - Тот же диапазон длительности — у обоих
3–15секунд, а это как раз то окно, которое поощряют короткие видеоплатформы.
Если вам нужен беззвучный фоновый цикл, используйте этот уровень и выключите sound: $0.10/сек при 720p — дешевле, чем $0.13/сек у Turbo. Если фрагмент должен звучать так, будто кто-то говорит в камеру — а для большинства коротких видео это так — этот уровень справляется за один запрос.
Генерация отдельного фрагмента
Модель доступна на асинхронной конечной точке hiapi /v1/tasks: отправьте задачу, опрашивайте статус завершения, затем получите URL вывода (он истекает, поэтому скачивайте сразу).
import os
import time
import requests
API_BASE = "https://api.hiapi.ai/v1/tasks"
TOKEN = os.environ["HIAPI_API_KEY"]
HEADERS = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"}
def create_clip(prompt: str, duration: int, resolution: str, aspect_ratio: str, sound: bool) -> str:
body = {
"model": "kling-3.0/text-to-video",
"input": {
"prompt": prompt,
"duration": duration,
"resolution": resolution,
"aspect_ratio": aspect_ratio,
"sound": sound,
},
}
resp = requests.post(API_BASE, headers=HEADERS, json=body, timeout=30)
resp.raise_for_status()
return resp.json()["data"]["taskId"]
def wait_for_clip(task_id: str, poll_every: int = 5, timeout: int = 600) -> str:
deadline = time.time() + timeout
while time.time() < deadline:
resp = requests.get(f"{API_BASE}/{task_id}", headers=HEADERS, timeout=30)
resp.raise_for_status()
data = resp.json()["data"]
if data["status"] == "success":
return data["output"][0]["url"]
if data["status"] == "fail":
raise RuntimeError(data.get("error"))
time.sleep(poll_every)
raise TimeoutError(f"task {task_id} did not finish in {timeout}s")
task_id = create_clip(
prompt="Vertical 9:16 short-form video clip: a creator filming a quick "
"product-review style take with a smartphone, energetic hand gestures, "
"natural indoor lighting, casual talking-to-camera framing, realistic "
"motion and lip movement, ambient room tone and speech audio synced to "
"the action",
duration=6,
resolution="720p",
aspect_ratio="9:16",
sound=True,
)
video_url = wait_for_clip(task_id)
Это в точности тот промпт и настройки, которые стоят за фрагментом ниже — вертикальный, 6 секунд, 720p, звук включён ($0.86).
Промпт: «Вертикальный 9:16 короткий видеоклип: автор снимает на смартфон быстрый дубль в стиле обзора продукта, энергичные жесты рук, естественное внутреннее освещение, непринуждённая композиция с разговором в камеру, реалистичное движение и движение губ, фоновый тон комнаты и голосовая аудиодорожка, синхронизированная с действием»
Масштабирование до пакета: асинхронным кодом, а не последовательным циклом
Отдельный фрагмент — это один запрос. Неделя короткого контента — это десять или двадцать фрагментов. Опрашивать каждую задачу по очереди в цикле for работает, но это сериализует ожидание, которое вовсе не обязательно делать последовательным — API охотно принимает параллельные отправки. Переключитесь на asyncio и aiohttp, чтобы отправлять всё сразу:
import asyncio
import os
import aiohttp
API_BASE = "https://api.hiapi.ai/v1/tasks"
TOKEN = os.environ["HIAPI_API_KEY"]
HEADERS = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"}
async def create_task(session, prompt, duration=6, resolution="1080p",
aspect_ratio="9:16", sound=True):
body = {
"model": "kling-3.0/text-to-video",
"input": {"prompt": prompt, "duration": duration, "resolution": resolution,
"aspect_ratio": aspect_ratio, "sound": sound},
}
async with session.post(API_BASE, json=body) as resp:
resp.raise_for_status()
data = await resp.json()
return data["data"]["taskId"]
async def poll_task(session, task_id, poll_every=5, timeout=600):
loop = asyncio.get_event_loop()
deadline = loop.time() + timeout
while loop.time() < deadline:
async with session.get(f"{API_BASE}/{task_id}") as resp:
resp.raise_for_status()
data = (await resp.json())["data"]
if data["status"] == "success":
return data["output"][0]["url"]
if data["status"] == "fail":
raise RuntimeError(data.get("error"))
await asyncio.sleep(poll_every)
raise TimeoutError(f"task {task_id} timed out")
async def produce_batch(prompts: list[str]) -> list[str]:
async with aiohttp.ClientSession(headers=HEADERS) as session:
task_ids = await asyncio.gather(*(create_task(session, p) for p in prompts))
return await asyncio.gather(*(poll_task(session, tid) for tid in task_ids))
prompts = [
"Vertical 9:16 clip: creator unboxing a package on camera, excited reaction, "
"soft window light, speech synced to lip movement",
"Vertical 9:16 clip: creator walking through a city street talking to camera, "
"b-roll style framing, ambient street audio",
"Vertical 9:16 clip: creator demoing a skincare routine close-up, calm "
"narration audio, natural bathroom lighting",
]
urls = asyncio.run(produce_batch(prompts))
Каждая задача выполняется на сервере независимо, поэтому реальное время трёх фрагментов близко к времени одного фрагмента, а не втрое больше. Для бо́льших пакетов ограничьте параллелизм через asyncio.Semaphore, чтобы не превысить собственные лимиты частоты запросов.
Сколько это стоит
Цена kling-3.0/text-to-video разбита по разрешению и переключателю sound, а не представляет собой единый фиксированный тариф — не переносите фиксированную цену за секунду с уровня turbo, эти маршруты тарифицируются отдельно:
720p, без аудио: $0.10/сек720p+sound:true: $0.143/сек1080p, без аудио: $0.129/сек1080p+sound:true: $0.193/сек4K: $0.479/сек
Шестисекундный фрагмент 1080p со звуком обойдётся примерно в $1.16; фрагмент 720p со звуком выше — в $0.86. Пакет из 10 фрагментов с теми же настройками — около $11.60; перед запуском массовой генерации стоит сверить это с собственной панелью тарифов, поскольку каждое поле (разрешение, длительность, аудио) независимо влияет на итоговую цену. Если вы сравниваете с другими уровнями Kling, полный расклад смотрите на странице тарифов Kling 3.0.
Замечания по созданию коротких видео
Помимо «включите звук», есть несколько вещей, которые действительно влияют на удержание:
- Держите
durationв диапазоне 6–10 секунд. Модель поддерживает до 15 секунд, но большинство коротких видео-хуков либо захватывают, либо теряют зрителя в первые несколько секунд — более компактный фрагмент заставляет вас писать более компактные промпты. - Прописывайте аудио в промпте, а не полагайтесь на авось. Фразы вроде «голосовая аудиодорожка, синхронизированная с действием» или «фоновый уличный шум» в тексте промпта направляют то, что фактически отрисовывает
sound:true— промпт без аудиоподсказок всё равно может вернуть на удивление тихий фрагмент. - Используйте
aspect_ratio: "9:16"сквозным образом. Не генерируйте 16:9 и не обрезайте потом; когда вы напрямую запрашиваете вертикаль, модель иначе выстраивает кадр под вертикальную композицию (положение рук, пространство над головой, глубина фона). - Генерируйте пакетно вариации одного и того же хука, а не несвязанные фрагменты. Асинхронная генерация делает дешёвой попытку 3–4 вариантов формулировки одной концепции хука с выбором лучшего, а не одну подачу промпта на каждую идею.
Частые вопросы
Поддерживает ли kling-3.0/text-to-video нативно 9:16, или мне нужно обрезать рендер 16:9?
Нативно — aspect_ratio прямо принимает 9:16 в запросе, и модель с самого начала строит кадр под вертикальную композицию.
Аудио — это настоящая речь/окружающие звуки или общая фоновая дорожка? Оно генерируется по сцене: когда промпт описывает кого-то говорящего, голос синхронизируется с движением губ; окружающие звуки (комната, улица и т. п.) следуют за сценой, описанной в промпте. Это не готовая фоновая музыка.
Чем это отличается от kling-3.0-turbo для коротких видео?
Turbo быстрее и ограничен 1080p. У него нет поля sound, но фрагменты всегда идут со звуком. Используйте turbo, когда нужен быстрый b-roll и его встроенный звук достаточно хорош; используйте этот уровень, когда нужен беззвучный вывод или когда фрагмент должен звучать как что-то конкретное (особенно речь в камеру).
Могу ли я сгенерировать неделю фрагментов, не ожидая каждый по очереди? Да — отправьте все запросы на создание задач параллельно (см. пример асинхронного пакета выше), затем так же параллельно опрашивайте их. API не требует отправлять по одной за раз.
Что если я не скачаю URL вывода сразу?
URL вывода имеет ограничение по времени (expireAt). Как только задача сообщает success, сразу скачайте байты и сохраните их у себя — не размещайте горячие ссылки на URL в каком-либо постоянном месте.
Полный справочник полей и актуальные цены смотрите на странице модели kling-3.0/text-to-video.
Похожие статьи
Все статьи →-
Руководство по использованию
Руководство по началу работы с seedream-5.0-pro/image-to-image: возможности, цены и ключевые моменты интеграции
Границы возможностей модели редактирования изображений ByteDance, принципы тарификации и практика инженерной интеграции
-
Руководство по использованию
Руководство по использованию seedream-5.0-pro text-to-image: границы возможностей, интеграция API и контроль затрат
Практический взгляд для разработчиков: от ключевых параметров до оценки стоимости $0.05 за изображение
-
Руководство по использованию
Руководство по началу работы с Hailuo 2.3 Fast для генерации видео из изображений: границы возможностей, цены и практика интеграции
Ключевые моменты выбора и интеграции модели MiniMax для генерации видео из изображений для разработчиков