import os import asyncio from typing import Optional, Dict from taskflow import FileIOHandler from api_modules.ark_client_async import AsyncArkClient from api_modules.ark_client import ArkMessage, APIError from taskflow import get_logger io_handler = FileIOHandler() logger = get_logger("examples.refer_video_create.mcps.script_create") system_prompt_develop_script = \ """ ## 角色 - 你兼具专业的视频分析能力与视频脚本创作能力 - 你坚持“先过拟合,再泛化”的创作理念,确保脚本内容与输入视频内容完全一致 ## 任务 - 仔细拆解分析输入视频的完整内容,完全对标视频内容进行视频脚本创作输出,实现对输入视频的完全复刻。 ## 输出格式 - 必须按照以下JSON格式进行输出(必须严格遵守JSON格式,不得有任何其他内容): ```json { "basic_info": { "script_theme": // str;脚本主题,明确整体场景基调, "total_lenses": // int;总镜头数,方便后期拼接核对, "total_duration": // int;总时长:所有lens_details的lens_duration之和, "unified_style": // str;全片统一风格/氛围,保证AI生成一致性 }, "lens_details": [ { "lens_id": // int;镜头编号 "lens_params": // str;核心镜头参数:景别(远景/全景/中景/近景/特写等景别)+ 视角(俯拍/仰拍/过肩/平视/微距/航拍/顶拍/斜拍等视角) + 运镜(推/拉/摇/移/跟随/环绕/跟焦/滑轨/固定镜头等运镜), "core_vision": // str;核心视觉画面:人物信息(如人物神情/姿态/动作,但是避免对人物的样貌和穿着进行描写;如:‘一个女生正在散步,非常开心的神态’,而非‘**黄头发的**美女正在散步,**穿着白色连衣裙**,非常开心的神态’)+ 场景细节(A-Roll);或景物描写(B-Roll), "lens_type": // str;镜头类型:A-Roll或B-Roll;A-Roll为人物镜头,B-Roll为场景镜头, "lines_narration": // str;台词/旁白,可为None, "bgm_style": // str;BGM风格,如:轻柔的小提琴独奏,节奏缓慢,旋律偏温暖,可为None, "sound_effects": // str;音效,如:树叶飘落的轻微沙沙声,可为None "lens_duration": // int;镜头时长,取值范围3-12 }, ... // 更多镜头信息 ] } ``` ## 要求 - 需要对输入视频中的每个镜头片段进行拆解分析,不能遗漏任何一个镜头片段。(输入视频中每一个无转场的镜头片段,都应被视为一个独立的镜头片段,也即对应JSON中的一个lens_details元素) - 请重读一遍任务和所有约束条件后,开始进行脚本创作。 """ async def create_script_refer_video( client: AsyncArkClient, video_url: str, user_prompt: str = "请开始执行你的任务" ) -> str: user_message = ArkMessage(role="user") user_message.add_text(user_prompt) user_message.add_video(video_url) try: response = await client.chat( model="doubao-seed-1-6-251015", messages=[user_message], system_prompt=system_prompt_develop_script, ) logger.info(f"开发脚本成功") return client.get_response_text(response) except APIError as e: logger.error(f"API错误: {e}") raise e if __name__ == "__main__": async def main(): async with AsyncArkClient() as client: script = await create_script_refer_video( client=client, video_url="video.mp4" ) io_handler.write_json(script, "script.json") asyncio.run(main())