首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >90+行代码写“智能MV生成器”,基于文心大模型API的项目代码开源

90+行代码写“智能MV生成器”,基于文心大模型API的项目代码开源

作者头像
用户1386409
发布2022-11-29 10:36:50
发布2022-11-29 10:36:50
1.1K0
举报
文章被收录于专栏:PaddlePaddlePaddlePaddle

作者简介:GT,飞桨开发者技术专家(PPDE)、QPT开源项目发起者、AgentMaker开源项目核心成员。

文心ERNIE-ViLG是全球最大的跨模态生成模型,它生成图像清晰度高、速度快,针对中文输入和中国元素的理解能力非常强,发布以来吸引了众多开发者和AI绘画用户的关注。

项目背景

为了展示飞桨开发者开朗向上、共创共享的积极面貌和执桨开源、勇于探索的精神风采,1024程序员节飞桨发布了“飞桨开发者专属主题曲MV”《热AI无限》,我荣幸地受邀参加了MV录制,也体会到了MV制作的不易。我心想,要是有一个“智能MV生成器”,不仅可以让AI成为MV拍摄和剪辑工作的智能助手,还能让每个开发者都生成个性化的MV。

我的AI Studio社区开发者伙伴“ninetailskim”制作出了可通过音频与歌词文件生成歌曲MV的“使用文心大模型制作MV”项目。

http://mpvideo.qpic.cn/0bc3naajsaaazyaltd226zrva2gdtfuabgia.f10002.mp4?dis_k=f3e6a2f462ff0502c80e8e514ce64ae1&dis_t=1669689344&vid=wxv_2638363362597011458&format_id=10002&support_redirect=0&mmversion=false

受到启发,我在“使用文心大模型制作MV”和iterhui“中秋款文心带你轻松搞定MV制作”两个项目的基础上做了进一步改进,做出了可以快速生成指定风格的“飞桨开发者专属主题曲MV生成器”。

以下项目已开源,欢迎大家围观交流。

“飞桨开发者专属主题曲MV生成器”项目

https://aistudio.baidu.com/aistudio/projectdetail/4818261

“使用文心大模型制作MV”项目

https://aistudio.baidu.com/aistudio/projectdetail/4452910

“中秋款文心带你轻松搞定MV制作”项目

https://aistudio.baidu.com/aistudio/projectdetail/4506607

方案介绍

制作简易的歌曲MV,离不开音乐、歌词和画面三要素,因此我们需要三组基础数据做支撑:音频文件视频文件歌词信息

由于我们已经获得了主题曲的音频文件与歌词信息,所以只需要生成一段能够对的上歌词的视频,即可完成初阶MV的制作。

通过理解中文文本来生成图像,正是文心ERNIE-ViLG的强项。那么我们只需要将每段歌词进行简单的处理,接着调用文心ERNIE-ViLG API生成歌词文意所对应的图片,然后根据生成图片的数量与歌词的时间间隔来决定图片出现顺序,最后拼接所有图像即可生成我们需要的MV视频文件。

代码实现

Step1 安装所需Python依赖

在终端中输入pip install wenxin-api pydub moviepy auditok即可安装文心大模型SDK以及音视频处理依赖。

代码语言:javascript
复制
 pip install pydub moviepy auditok wenxin-api 

Step2 读取歌词、分隔时间等信息

代码语言:javascript
复制
# 读取字幕与歌词意象
times = list()
words = list()
prompts = list()
with open("PPDE.txt", "r") as f:
    lines = f.readlines()
    for line in lines:
        m, s = line[: 4].split(":")
        time = int(m) * 60 + int(s)
        word, prompt = line[4: ].replace("\n", "").split("|")
        times.append(time)
        words.append(word)
        prompts.append(prompt)

Step3 定义想要的风格,并使用文心ERNIE-ViLG API服务进行生成图像

文心ERNIE-ViLG支持多种稳定艺术风格的图像生成,包括但不限于古风、油画、水彩画、蒸汽波艺术、像素风格、概念艺术、未来主义、赛博朋克等。你可以结合自己对歌曲“画风”的判断,生成不同风格的歌词图片,甚至可以自己定义艺术风格修饰词,实现更独一无二的生成效果。

代码语言:javascript
复制
import os
import time
import requests

import wenxin_api
from tqdm import tqdm
from wenxin_api.tasks.text_to_image import TextToImage

# 在此处填写自己想要的风格,建议在5字以内,不限于像素风、赛博朋克、二次元、未来主义、梵高、中国画等修饰词,可以在https://wenxin.baidu.com/moduleApi/ernieVilg查看支持的风格。
STYLE = "赛博朋克"

wenxin_api.ak = "请在https://wenxin.baidu.com/moduleApi/key 中申请AK与SK"
wenxin_api.sk = "请在https://wenxin.baidu.com/moduleApi/key 中申请AK与SK"

file_dir = "temp_img"
os.makedirs(file_dir, exist_ok=True)

img_paths = dict()
for prompt_id in tqdm(range(len(prompts))):
text_prompt = prompts[prompt_id] + ',' + STYLE
# 探索无限风格需要申请
    input_dict = {"text": text_prompt, "style": "探索无限", "resolution": "1024*1024"}
    while True:
        try:
            urls = TextToImage.create(**input_dict)['imgUrls']
            for url_id, url in enumerate(urls):
                img = requests.get(url).content
                path = os.path.join(file_dir, f"{prompt_id}_{url_id}.jpg")
                with open(path, 'wb') as f:
                    f.write(img)
                if prompt_id in img_paths:
                    img_paths[prompt_id].append(path)
                else:
                    img_paths[prompt_id] = [path]
            break
        except:
            print("发生异常")
            time.sleep(1)

Step4 合成视频

图片生成完毕后,我们需要让图片按照歌词演唱的时间间隔顺序出现,并合成为一个简单的图片轮播歌曲MV视频。

代码语言:javascript
复制
import cv2

from PIL import ImageFont
from PIL import Image
from PIL import ImageDraw
from moviepy import *
from moviepy.editor import *

font = ImageFont.truetype("siyuanheiti.otf", 50)

final_img_paths = dict()
for step_id in img_paths:
    for img_path in img_paths[step_id]:
        im = Image.open(img_path)
        # 在图片上添加文字
        draw = ImageDraw.Draw(im)
        draw.text((100, 900), words[step_id] ,(255, 180, 0), font=font)
        path = img_path.replace("temp_img", "img")
        im.save(path)
        if step_id in final_img_paths:
            final_img_paths[step_id].append(path)
        else:
            final_img_paths[step_id] = [path]

video = cv2.VideoWriter('test.mp4',cv2.VideoWriter_fourcc(*'mp4v'), 1, (1024, 1024))

end_time = times[-1]
step = 0
for t in range(end_time):
    if step + 1 == len(times) and t == end_time:
        break
    img_id = t % 12
    if times[step] < t <= times[step + 1]:
        img = cv2.imread(final_img_paths[step][img_id // 2]) 
        video.write(img)
    if t == times[step + 1]:


        step += 1

video.release()
video_path = 'test.mp4'
audio_path = 'PPDE.mp3'
audio = AudioFileClip(audio_path)
video = VideoFileClip(video_path)
video = video.set_audio(audio)
video.write_videofile("output.mp4", audio_codec="aac")
print("-------生成完毕-------")

在完成以上步骤后,我们即可获得使用文心ERNIE-ViLG所创作的飞桨开发者专属主题曲MV,效果如下。

http://mpvideo.qpic.cn/0bc3ymakcaaaaeaial22o5rvbq6duhbqbiia.f10002.mp4?dis_k=7df3aacc6b654884a91efa5c02de1fe4&dis_t=1669689344&vid=wxv_2638368128181993473&format_id=10002&support_redirect=0&mmversion=false

赛博朋克风格MV生成效果

总结

目前项目实现还比较简单,还有很多地方可以调优,如字幕的格式和位置可以调整为更符合一般歌曲MV的排版形式。图片之间的过渡可以更自然,还可以添加一些基础的光效素材等等。欢迎大家访问下方链接点击阅读原文,在飞桨AI Studio中一键运行项目,生成自己的飞桨开发者主题曲,也欢迎与我进一步交流。

项目链接

https://aistudio.baidu.com/aistudio/projectdetail/4818261

专题介绍

随着人工智能技术飞速发展,大规模预训练模型(以下简称大模型)的出现使零样本建模成为可能。现在,百度飞桨文心大模型为开发者提供多样化的在线API调用、Prompt-tuning、本地API参数调优等服务,助力各位创意大师“花式”完成代码实践、前端页面搭建等任务。现在,已经有飞桨社区开发者基于飞桨框架和文心大模型在零样本或小样本场景下,完成了兼具技术创新与新颖创意的优质项目。为此,飞桨开发者说专栏特别推出文心大模型专题,邀请飞桨社区开发者show出“脑洞”与开发心得,与大家一同探索用文心大模型完成趣味无穷、高实用价值项目的无限可能。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PaddlePaddle 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档