ai_admin/WebAdmin/create_avatar_video.py

72 lines
2.8 KiB
Python
Raw Permalink Normal View History

2024-09-20 12:29:09 +08:00
from .base import logger, synthesize_speech
import requests
VIDEO_API_KEY = 'c4c0f516-33c0-4f5c-9d29-3b1d4e6a93c3'
VIDEO_API_URL = 'https://www.typeframes.com/api/public/v2/render'
WEBHOOK_URL = 'https://www.typeframes.cc/api/webhook/'
def create_avatar_video_payload(audio_url,generationPreset, media_type, text, ratio, voice_name, user_id, slug,disableCaptions, caption_preset, caption_position, selected_avatar, video_id):
"""
生成视频的函数用于 create-avatar-video
"""
try:
video_headers = {
'Content-Type': 'application/json',
'key': VIDEO_API_KEY
}
hasToGenerateVideos = media_type == "movingImage"
# 配置 webhook URL包含 video_id
webhook_url = f"{WEBHOOK_URL}?userid={user_id}&videoid={video_id}"
# 构建请求体
payload = {
"frameRate": 60,
"resolution": "1080p",
"frameDurationMultiplier": 18,
"webhook": webhook_url,
"creationParams": {
"mediaType": media_type,
"origin": "/create",
"inputText": text,
"flowType": "text-to-video",
"slug": slug,
"hasToGenerateVoice": True,
"hasToTranscript": False,
"hasToSearchMedia": True,
"hasAvatar": True,
"hasWebsiteRecorder": False,
"hasTextSmallAtBottom": False,
"captionPresetName": caption_preset,
"captionPositionName": caption_position,
"disableAudio": True,
"useQualityTranscript":False,
"ratio": ratio,
"selectedAudio": "Bladerunner 2049",
"selectedVoice": voice_name,
"selectedAvatar": selected_avatar,
"selectedAvatarType": "image/png",
"sourceType": "contentScraping",
"disableCaptions": disableCaptions,
"selectedStoryStyle": {
"value": "custom",
"label": "Custom"
},
"hasToGenerateVideos": hasToGenerateVideos,
"selectedRecording": audio_url,
"selectedRecordingType": "audio",
"generationPreset": generationPreset,
"audioUrl": "https://cdn.tfrv.xyz/audio/_bladerunner-2049.mp3"
}
}
logger.info(payload)
response = requests.post(VIDEO_API_URL, headers=video_headers, json=payload)
if response.status_code == 200:
return {"code": 200, "data": response.json()}
else:
return {"code": response.status_code, "message": response.text}
except Exception as e:
return {"code": 500, "message": str(e)}