HiAPI
Блог

Руководство по использованию

Kling 3.0 текст-в-видео: короткие видеоролики с нативной аудиодорожкой

Oct 8, 2026
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.

Похожие статьи

Все статьи →

Начните работать с постоянными артефактами ИИ

Получите API-ключ и вызывайте модели изображений, видео и аудио через один API на основе tasks.

Читать документацию API