你多久没有看过一次烟花了呢? ERNIE-ViLG 文生图制作一场属于你的烟花
ERNIE-ViLG 文生图开放调用啦~能够根据描述生成对应的图片,只要给定的描述不是非常奇怪(比如长得潦草的狗),基本上都能生成符合描述的图片。
今天突然觉得文心生成的烟花很漂亮,觉得如果配上音乐,生成视频,应该可以看的很开心,于是就有了这个项目~
本项目只实现了最基础的拉取图片+拼合视频+拼合音频
- 音频需要自行寻找下载(本项目使用的音频信息为白日烟花 许可:CC-BY 作者:ouning 来源:耳聆网 https://www.ear0.com/sound/36554)
- 欢迎大佬们在本项目基础上扩展,比如拼接一个AI音乐生成器呀,实现全局自动挡~
- 本项目没有进行一些图片剪辑的操作,纯粹是把很多图片拼合在一起,如果有自动化剪辑的api欢迎评论推荐~
展示结果
首先,展示一下效果~
代码实现
准备工作
- 进入网址
- 点击右上角头像
- 点击查看AK/SK,如果没有可以点击创建(创建不要钱,直接调用api也不要钱,暂时没找到啥收费项目,只有一天调用api超过200次不能再调用这一条限制)
- 如果懒得复制,可以点击查看代码,里面会展示如何使用api可以一键复制
- 替换下面代码块里的ak和sk就可以啦
拉取图片
! pip install wenxin-api
# -*- coding: utf-8 -*
import random
! mkdir Image
count = 0
# 因为设定的是1s一张图片展示,bgm一共66s所以拉取66张就行
max_count = 66
# 生成的图片列表
text_list = [
'烟花',
'星形的烟花',
'老鼠形状的烟花',
'小狗形状的烟花',
'猫咪形状的烟花',
'爱心形状的烟花',
'星星形状的烟花',
'烟花',
'满屏的烟花'
]
while(1):
import wenxin_api # 可以通过"pip install wenxin-api"命令安装
from wenxin_api.tasks.text_to_image import TextToImage
wenxin_api.ak = "**************************"
wenxin_api.sk = "**************************"
input_dict = {
"text": random.choice(text_list),
"style": "水彩"
}
rst = TextToImage.create(**input_dict)
# print(rst)
# thanks to https://aistudio.baidu.com/aistudio/projectdetail/4468263
import requests
import os
from PIL import Image
import matplotlib.pyplot as plt
%matplotlib inline
for i in rst['imgUrls']:
#使用requests直接get 下载图片使用
r = requests.get(i)
ii = i.split('/')[-1]+'.png'
out_ii = 'Image/' + ii
with open(out_ii, 'wb') as f:
f.write(r.content)
f.close()
count = count+1
if count>=66:
break
print(count)
# 把这些图片都记录在train.txt中
import os
with open('train.txt','w') as f:
for item in os.listdir('Image'):
if 'check' not in item:
f.write('Image/'+item+'\n')
图片转视频
# thanks to
import cv2
img_txt = 'train.txt'
with open(img_txt) as f:
img_list = f.readlines()
# 可以随意调整视频的帧速率
# 每秒fps张图片
fps = 20
#可以用(*'DVIX')或(*'X264'),如果都不行先装ffmepg
fourcc = cv2.VideoWriter_fourcc(*'XVID')
# 保存在TestVideo.avi
videoWriter = cv2.VideoWriter('TestVideo.avi',fourcc,fps,(1024,1024),True)#最后一个是保存图片的尺寸
for img_dir in img_list:
frame = cv2.imread(img_dir[:-1])
# 多插入fps帧,从而达到1s一张图片的效果
for i in range(fps):
videoWriter.write(frame)
videoWriter.release()
cv2.destroyAllWindows()
拼合音频和视频
需要下载ffmpeg:
官网下载:http://ffmpeg.org/download.html
# 解压压缩包
! tar -jxvf ffmpeg-snapshot.tar.bz2
# 查看版本号
%cd ~/ffmpeg
! ffmpeg -version
# 拼接音频和视频
# thanks to https://jqiange.github.io/%E5%9C%A8python%E4%B8%AD%E8%BF%9B%E8%A1%8C%E8%A7%86%E9%A2%91-%E9%9F%B3%E9%A2%91%E5%A4%84%E7%90%86%E5%8F%8A%E5%90%88%E5%B9%B6/
import subprocess # 这个不用 pip 安装,自带的
%cd ~/ffmpeg
video_file = '~/TestVideo.avi'
audio_file = '~/白日烟花_耳聆网_[声音ID:36554].wav'
outfile_name = '~/result.avi'
subprocess.call('ffmpeg -i ' + video_file
+ ' -i ' + audio_file + ' -strict -2 -f mp4 '
+ outfile_name, shell=True)
%cd ~
参考
特别感谢以下内容,部分资源/代码和操作有复制、粘贴和参考以下网站内容,或从以下网站下载。
- 使用文心大模型制作MV
- https://www.runoob.com/
- 在 python 中进行视频 - 音频处理及合并
- http://ffmpeg.org/download.html#build-linux
- https://www.ear0.com/