文心ERNIE-ViLG是全球最大的跨模态生成模型,它生成图像清晰度高、速度快,针对中文输入和中国元素的理解能力非常强,发布以来吸引了众多开发者和AI绘画用户的关注。
为了展示飞桨开发者开朗向上、共创共享的积极面貌和执桨开源、勇于探索的精神风采,1024程序员节飞桨发布了“飞桨开发者专属主题曲MV”《热AI无限》,我荣幸地受邀参加了MV录制,也体会到了MV制作的不易。我心想,要是有一个“智能MV生成器”,不仅可以让AI成为MV拍摄和剪辑工作的智能助手,还能让每个开发者都生成个性化的MV。
受到启发,我在“使用文心大模型制作MV”和iterhui“中秋款文心带你轻松搞定MV制作”两个项目的基础上做了进一步改进,做出了可以快速生成指定风格的“飞桨开发者专属主题曲MV生成器”。
“飞桨开发者专属主题曲MV生成器”项目
“使用文心大模型制作MV”项目
https://aistudio.baidu.com/aistudio/projectdetail/4452910
“中秋款文心带你轻松搞定MV制作”项目
方案介绍
代码实现
Step1 安装所需Python依赖
pip install pydub moviepy auditok wenxin-api
Step2 读取歌词、分隔时间等信息
# 读取字幕与歌词意象
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服务进行生成图像
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视频。
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( "-------生成完毕-------")
总结
目前项目实现还比较简单,还有很多地方可以调优,如字幕的格式和位置可以调整为更符合一般歌曲MV的排版形式。图片之间的过渡可以更自然,还可以添加一些基础的光效素材等等。欢迎大家访问下方链接或点击阅读原文,在飞桨AI Studio中一键运行项目,生成自己的飞桨开发者主题曲,也欢迎与我进一步交流。
项目链接
https://aistudio.baidu.com/aistudio/projectdetail/4818261
专题介绍
随着人工智能技术飞速发展,大规模预训练模型(以下简称大模型)的出现使零样本建模成为可能。现在,百度飞桨文心大模型为开发者提供多样化的在线API调用、Prompt-tuning、本地API参数调优等服务,助力各位创意大师“花式”完成代码实践、前端页面搭建等任务。现在,已经有飞桨社区开发者基于飞桨框架和文心大模型在零样本或小样本场景下,完成了兼具技术创新与新颖创意的优质项目。为此,飞桨开发者说专栏特别推出文心大模型专题,邀请飞桨社区开发者show出“脑洞”与开发心得,与大家一同探索用文心大模型完成趣味无穷、高实用价值项目的无限可能。
【文心大模型智能创意赛】
拓展阅读