python结合阿里通义大模型实现ai写剧本并生成多镜头视频短片代码

代码语言:python

所属分类:人工智能

代码描述:python结合阿里通义大模型实现ai写剧本并生成多镜头视频短片代码,分三步,第一步生成剧本,第二部生成分镜头文本描述,第三部生成所有的分镜头视频,最后一步合并视频。

代码标签: python 结合 阿里 通义 大模型 ai 剧本 生成 多镜头 视频 短片 代码

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

import requests
import json
import time
import os
import concurrent.futures

from moviepy.audio.fx.all import audio_loop

from moviepy.editor import VideoFileClip, concatenate_videoclips, TextClip, CompositeVideoClip, vfx
from moviepy.audio.io.AudioFileClip import AudioFileClip  # 导入 AudioFileClip
from moviepy.audio.AudioClip import concatenate_audioclips  # 导入 concatenate_audioclips
import dashscope

from dashscope.audio.tts import SpeechSynthesizer

# 替换为你的API Key
DASHSCOPE_API_KEY = "sk-"#APIkey申请地址https://bailian.console.aliyun.com/?apiKey=1
PI_KEY = "sk-a81d6343fba847249e189d184b1f858c"


# 调用API生成分镜头数据
def generate_shots(topic):
    url = "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions"
    headers = {
        "Authorization": f"Bearer {DASHSCOPE_API_KEY}",
        "Content-Type": "application/json"
    }
    data = {
        "model": "qwen-plus",
        "messages": [
            {
                "role": "system",
                "content": "你是一个专业的视频分镜头脚本生成助手。请根据用户提供的剧本生成分镜头脚本json数组,每个数组元素包含分镜头画面图像文本描述提示词和文字解说。例如:[{'prompt':'分镜头文本提示词','sayword':'文字解说'}]"
            },
            {
                "role": "user",
                "content": f"请根据以下剧本生成一个短片的分镜头脚本,每个分镜头画面包含画面图像文本描述提示词和30字以内的文字解说,以JSON格式返回:{topic}"
            }
        ],
        "response_format": { "type": "json_object" }
    }
    response = requests.post(url, headers=headers, data=json.dumps(data))
    if response.status_code == 200:
        # 解析API返回的分镜头数据
        content = response.json()['choices'][0]['message']['content']
        try:
            # 假设API返回的是合法的JSON字符串
            shots = json.loads(content)
            return shots
        except json.JSONDecodeError:
            raise Exception("API返回的分镜头数据不是合法的JSON格式")
    else:
        raise Exception(f"Failed to generate shots: {response.text}")
    
# 添加字幕到视频
def add_subtitle_to_video(video_file, subtitle_text, output_file):
    video_clip = VideoFileClip(video_file)
    
    # 创建字幕
    subtitle = TextClip(
        subtitle_text,
        fontsize=34, color='white', font='SimHei', 
        stroke_color='black', stroke_width=1, method='caption', 
        size=(video_clip.size[0], 60), align='center'
        # 字幕高度为60px
    )

    
    
    # 设置字幕位置(底部居中)
    subtitle = subtitle.set_position(('center', video_clip.size[1] - 80)).set_duration(video_clip.duration)
    
    # 合成视频和字幕
    final_clip = CompositeVideoClip([video_clip, subtitle])
    final_clip.write_videofile(output_file, codec="libx264")
    print(f"字幕已添加到视频: {output_file}")

# 调用API生成故事脚本
def generate_story(topic):
    url = "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions"
    headers = {
        "Authorization": f"Bearer {DASHSCOPE_API_KEY}",
        "Content-Type": "application/json"
    }
    data = {
        "model": "qwen-plus",
        "messages": [
            {
                "role": "system",
                "content": "你是一个专业的编剧,请根据用户提供的主题编写剧本,字数300字。"
            },
            {
                "role": "user",
                "content": f"请根据以下主题生成一个短片的剧本,{topic}"
            }
        ]
    }
    response = requests.post(url, headers=headers, data=json.dumps(data))
    if response.status_code == 200:
        # 返回的剧本数据
        content = response.json()['choices'][0]['message']['content']
        return content
    else:
        raise Exception(f"Failed to generate story: {response.text}")

# 生成短视频任务
def generate_video(prompt, size):
    url = "https://dashscope.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis"
    headers = {
        "Authorization": f"Bearer {DASHSCOPE_API_KEY}",
        "Content-Type": "application/json".........完整代码请登录后点击上方下载按钮下载查看

网友评论0