你多久没有看过一次烟花了呢? ERNIE-ViLG 文生图制作一场属于你的烟花

ERNIE-ViLG 文生图开放调用啦~能够根据描述生成对应的图片,只要给定的描述不是非常奇怪(比如长得潦草的狗),基本上都能生成符合描述的图片。

今天突然觉得文心生成的烟花很漂亮,觉得如果配上音乐,生成视频,应该可以看的很开心,于是就有了这个项目~

爱心烟花python代码 爱心烟花的视频_人工智能

本项目只实现了最基础的拉取图片+拼合视频+拼合音频

  1. 音频需要自行寻找下载(本项目使用的音频信息为白日烟花 许可:CC-BY 作者:ouning 来源:耳聆网 https://www.ear0.com/sound/36554)
  2. 欢迎大佬们在本项目基础上扩展,比如拼接一个AI音乐生成器呀,实现全局自动挡~
  3. 本项目没有进行一些图片剪辑的操作,纯粹是把很多图片拼合在一起,如果有自动化剪辑的api欢迎评论推荐~

展示结果

首先,展示一下效果~

代码实现

准备工作

爱心烟花python代码 爱心烟花的视频_paddlepaddle_02

  1. 进入网址
  2. 点击右上角头像
  3. 点击查看AK/SK,如果没有可以点击创建(创建不要钱,直接调用api也不要钱,暂时没找到啥收费项目,只有一天调用api超过200次不能再调用这一条限制)
  4. 如果懒得复制,可以点击查看代码,里面会展示如何使用api可以一键复制
  5. 替换下面代码块里的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

爱心烟花python代码 爱心烟花的视频_爱心烟花python代码_03

# 解压压缩包
! 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 ~

参考

特别感谢以下内容,部分资源/代码和操作有复制、粘贴和参考以下网站内容,或从以下网站下载。

  1. 使用文心大模型制作MV
  2. https://www.runoob.com/
  3. 在 python 中进行视频 - 音频处理及合并
  4. http://ffmpeg.org/download.html#build-linux
  5. https://www.ear0.com/