사용 가이드
Kling 3.0 텍스트 투 비디오: 네이티브 오디오가 포함된 숏폼 클립
대부분의 '텍스트 투 비디오' 데모는 무음 클립에서 끝납니다. hiapi의 kling-3.0/text-to-video는 다릅니다. 생성 과정에서 네이티브 립싱크 오디오를 직접 렌더링하며, 최대 4K를 지원하는 유일한 Kling 3.0 티어입니다. 숏폼 콘텐츠(Reels, TikTok, Shorts)의 경우 이 조합(세로 구도, 실제 환경음, 별도 TTS/더빙 단계 불필요)은 후반 작업 단계 하나를 통째로 없애줍니다.
이 글에서는 실제 워크플로를 살펴봅니다. 먼저 /v1/tasks API로 단일 클립을 생성하고, 이어서 비동기 코드로 배치 클립으로 확장한 다음, 마지막으로 예산을 책정할 때 기준이 되는 가격 티어를 다룹니다.
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를 끄세요. 720p에서 $0.10/초로 Turbo의 $0.13/초보다 저렴합니다. 클립이 누군가 카메라를 향해 말하는 것처럼 들려야 한다면(대부분의 숏폼 콘텐츠가 그렇습니다) 이 티어가 한 번의 요청으로 해결합니다.
단일 클립 생성
이 모델은 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/초
6초 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 필드가 없지만 클립에는 항상 사운드가 포함됩니다. 빠른 b-roll이 필요하고 내장 사운드가 충분히 좋을 때는 turbo를 사용하고, 무음 출력이 필요하거나 클립이 특정 내용처럼 들려야 할 때(특히 카메라를 향해 말하는 콘텐츠)는 이 티어를 사용하세요.
일주일치 클립을 하나씩 순차적으로 기다리지 않고 생성할 수 있나요? 가능합니다. 모든 생성 작업 요청을 동시에 제출하고(위의 비동기 배치 예제 참조) 폴링도 동시에 하세요. API는 한 번에 하나씩만 제출하도록 요구하지 않습니다.
출력 URL을 즉시 다운로드하지 않으면 어떻게 되나요?
출력 URL에는 시간 제한이 있습니다(expireAt). 작업이 success를 보고하면 즉시 바이트를 다운로드해 자체 저장하세요. 핫링크 URL을 영구적인 위치에 두지 마세요.
전체 필드 참조와 실시간 가격은 kling-3.0/text-to-video 모델 페이지에서 확인하세요.
관련 글
모든 아티클 보기 →-
사용 가이드
seedream-5.0-pro/image-to-image 시작 가이드: 기능, 가격 및 연동 핵심 포인트
ByteDance 이미지 편집 모델의 기능 경계, 과금 방식 및 엔지니어링 연동 실무
-
사용 가이드
seedream-5.0-pro 텍스트-이미지 생성 입문 가이드: 능력 경계, API 연동 및 비용 관리
개발자를 위한 실무 관점: 파라미터 핵심부터 장당 $0.05 비용 추정까지
-
사용 가이드
Hailuo 2.3 Fast 이미지-투-비디오 입문 가이드: 성능 범위, 가격 및 연동 실무
개발자를 위한 MiniMax 이미지-투-비디오 모델 선택과 연동 핵심 포인트