python调用阿里通义大模型api和文生图api实现有声故事漫画视频制作代码

代码语言:python

所属分类:人工智能

代码描述:python调用阿里通义大模型api和文生图api实现有声故事漫画视频制作代码,通过ai生成视频分镜头,然后结合ai文生图api生成漫画画面,结合tts将故事旁白字幕生成有声音字幕的视频片段,最后合并起来成一个视频。

代码标签: python 调用 阿里 通义 大模型 api 文生图 api 有声 故事 漫画 视频 制作 代码

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

import requests
import json
import time
import os
import random
from moviepy.editor import ImageClip, concatenate_videoclips, AudioFileClip, CompositeAudioClip, TextClip, CompositeVideoClip, vfx
from moviepy.video.fx.all import fadein, fadeout
from moviepy.audio.fx.all import audio_fadein, audio_fadeout
import dashscope
from dashscope.audio.tts import SpeechSynthesizer

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


# 调用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}")


# 调用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 generate_sound(text, output_dir, index):
    dashscope
.api_key = DASHSCOPE_API_KEY
    result
= SpeechSynthesizer.call(model='sambert-zhina-v1',
                                    text
=text,
                                    sample_rate
=48000,
                                    format
='wav')
   
if result.get_audio_data() is not None:
        audio_file
= os.path.join(output_dir, f"audio_{index}.wav")
       
with open(audio_file, 'wb') as f:
            f
.write(result.get_audio_data())
       
print(f'SUCCESS: audio data is saved to {audio_file}')
       
return audio_file
   
else:
       
print('ERROR: response is %s' % (result.get_response()))
       
return None

# 生成图像任务
def generate_image(prompt, size="1024*1024", n=1):
    url
= "https://dashscope.aliyuncs.com/api/v1/services/aigc/text2image/image-synthesis"
    headers
= {
       
"Authorization": f"Bearer {DASHSCOPE_API_KEY}",
       
"Content-Type": "application/json",
       
"X-DashScope-Async": "enable"  # 启用异步处理
   
}
    data
= {
       
"model": "wanx2.1-t2i-turbo",  # 模型名称
       
"input": {
           
"prompt&q.........完整代码请登录后点击上方下载按钮下载查看

网友评论0