script_create.py 3.7 KB

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