一起用Python做个自动化短视频生成脚本,实现热门视频流水线生产!

前言

前几天,有粉丝告诉我抖音短视频批量下载,最近看到网上一些视频营销账号一天能发布上百条短视频,感觉都是批量生成的。 可以作为自动短视频生成脚本吗?

今天我就带大家使用一个自动化视频生成脚本,实现热门视频的批量制作。 我们来看看吧~

获得源代码的好处。

1、核心功能设计

首先,我在网上观看了那些视频营销账号的视频。 大多数都是围绕一个主题,通过几张图片进行视频轮播展示,并添加一些流行歌曲作为背景音乐。

知道了大概的思路,我们可以通过以下步骤来实现:

二、实现步骤一、图像爬取

当然,如果你已经有视频素材,如果只是想给视频添加背景,可以跳到步骤4; 如果你已经有图片素材,不需要爬取,可以直接跳到步骤2。

第一步,我们可以根据想要的视频主题搜索关键词和图片,批量抓取图片。 例如,我们以日本动画《你的名字》为主题,通过输入关键词抓取动画相关图片。 核心代码如下:

def dowmloadimg(html, keyword, startNum):
    headers = {'user-agent': 'Mozilla/5.0'}  # 请求头
    pic_url = re.findall('"objURL":"(.*?)",', html, re.S)  # 找到符合正则规则的网址
    num = len(pic_url)
    i = startNum
    subroot = root
    txtpath = subroot + '/download_img.txt'
    print('找到关键词:' + keyword + '的图片,开始下载图片...')
    for each in pic_url:
        a = '第' + str(i + 1) + '张图片,图片地址:' + str(each) + 'n'
        b = '正在下载' + a
        print(b)
        path = subroot + '/' + str(i + 1)
        try:
            if not os.path.exists(subroot):
                os.makedirs(subroot)
            if not os.path.exists(path):
                pic = requests.get(each, headers=headers, timeout=10)
                with open(path + '.jpg', 'wb') as f:
                    f.write(pic.content)
                    f.close()
                with open(txtpath, 'a') as f:
                    f.write(a)
                    f.close()
        except:
            traceback.print_exc()
            print('ERROR!!!当前图片无法下载!!!')
            continue
        i += 1
    return i

words = input("请输入关键字: ")
root = './' + words
if not os.path.exists(root):
    os.makedirs(root)
# 参数为需爬取的页数
for i in range(2):
    url = 'http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=' + words + "&pn=" + str(
        pageId) + "&gsm=?&ct=&ic=0&lm=-1&width=0&height=0"
    pageId += 20
    html = requests.get(url, headers=headers)
    lastNum = dowmloadimg(html.text, words, lastNum, )  # 执行一次获取60张图

此时,我们就可以根据关键词抓取图片,并按照数字顺序对图片进行命名,如下图所示。

2. 统一图像格式和尺寸

第二步,我们需要统一获取到的图片的大小和格式,以方便后续的视频合成。 这里我们可以手动过滤一些需要统一大小的图片,也可以批量统一爬取的整个文件夹中的图片大小。 图片的大小可以通过代码设置。 这里我们将所有图片的尺寸统一为600*800。 核心代码如下:

# 将所有图像resize成600*800,并保存
def resize_image(image_name):
    # 获取输入文件夹中的所有文件
    files = os.listdir('./' + image_name)
    output_dir = './resize/'
    # 判断输出文件夹是否存在,不存在则创建
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    for file in files:
        if file[-4:] == ".jpg":
            img = Image.open('./' + image_name + '/' + file)
            # 将所有图片均转成RGB,防止图片格式异常
            img = img.convert('RGB')
            # resize图片大小设置成600*800
            img = img.resize((600, 800), Image.ANTIALIAS)
            img.save(os.path.join(output_dir, file))

3.视频合成

第三步,我们可以将这些格式和大小统一的图片合成为视频。 这里我们可以合成整个文件夹中的所有图片,也可以手动选择其中的部分图片。 合成时,我们按照图片的数字命名顺序进行合并。 核心代码如下:

def charts2video(img_path, video_path):
    """将给定目录下的图片转成视频
        img_path: 图片路径
        video_path: 输出视频的路径名称
    返回: 图片转成的视频
    """
    images = os.listdir(img_path)
    images.sort(key=lambda x: int(x[:-4]))  # 以名称字符串的数字从小到大排序  
    fps = 1.5  # 帧数
    fourcc = cv2.VideoWriter_fourcc('D', 'I', 'V', 'X')
    im = Image.open(img_path + images[0])
    video_writer = cv2.VideoWriter(video_path, fourcc, fps, im.size)
    for img_i in images:
        frame = cv2.imread(img_path + img_i)
        print('开始将 ' + img_i + ' 加入视频n')
        video_writer.write(frame)  # 图片尺寸必须和视频尺寸一样,不然不会被加入视频中!!!
    video_writer.release()

这里,如果我们想要控制视频每秒播放的图片数量抖音短视频批量下载,我们可以根据fps代表的每秒播放图片数量来设置帧数,从而完成图片的视频合成。

4. 捕捉背景音乐

第四步,在拦截背景音乐之前,我们首先需要确认视频的长度,这样才能及时拦截背景音乐。 所以我们可以先获取视频的长度,然后以s为单位返回视频时长。 核心代码如下:

def get_video_time(filename):
  cap = cv2.VideoCapture(filename)
  if cap.isOpened():
    rate = cap.get(5)
    frame_num =cap.get(7)
    duration = frame_num/rate
    return duration
  return -1
t = get_video_duration('./你的名字.mp4')

现在视频的时长已知,我们接下来要截取背景音乐。 博主写了一篇关于如何自己制作一个很酷的音乐播放器的文章。 如果你有兴趣,可以去看看它是如何制作的。 音乐播放器博主已经开放源码,可以通过文末公众号获取。

今天我们使用这款自制的音乐播放器来下载我们需要的音乐。 比如我们使用《错位的时空》作为背景音乐,我们可以先通过这个音乐播放器将这首歌曲下载到本地。 如下所示。

音乐下载完成后,下一步就是截取音乐。 这里我们提供两种方法。 一是截取歌曲的高潮,二是自己选择歌曲的音程。

歌曲高潮自动截取:

经常看短视频的朋友可以看到,网上很多短视频的背景音乐都是歌曲的高潮部分。 那么你能自动获得歌曲的高潮吗? 当然! 已经考虑到可以自动截取歌曲的高潮部分。 这里我们需要使用该模块。 具体如何实现,大家可以上网查资料研究一下。

首先我们需要安装模块

pip install pychorus

安装完成后,导入模块,一行代码调用。 这里传入的参数t就是我们上面获取到的视频的时长,这样可以保证截取的背景音乐的时长与视频的时长一致,方便视频和音乐的合成。

同时我们还需要注意,一首歌曲的时长一般在3-4分钟左右,所以我们传入的t不要超过1分钟,否则高潮拦截可能会失败。 核心代码如下:

from pychorus import find_and_output_chorus
chorus_start_sec = find_and_output_chorus("./错位时空 - 艾辰.mp3", "./错位时空_high.wav", t)

如下图所示,我们知道视频时长为26s,然后截取背景音乐。 自动获取的高潮部分从2分32秒开始,持续26秒。 此时,我们可以截取当前歌曲的高潮部分,进行最终的视频和音乐合并。

自定义截取歌曲间隔:

如果我们的视频本身长度太长,无法捕捉到歌曲的高潮怎么办? 我们可以定义歌曲截取间隔来获取背景音乐。 下面是一个演示。 截取的歌曲从20年代到90年代开始。 核心代码如下:

# 截取背景音乐
audio_background = mpy.AudioFileClip('./错位时空 - 艾辰.mp3').subclip(20, 90)
audio_background.write_audiofile('bk.mp3')

5.结合视频和背景音乐

第五步,我们需要将视频与我们刚刚捕捉到的背景音乐结合起来,合成一个新的视频。 核心代码如下:

def add_music():
    # 读取代码视频
    my_clip = mpy.VideoFileClip('你的名字.mp4')
    # 截取背景音乐
    audio_background = mpy.AudioFileClip('错位时空_high.wav')
    # 视频中插入音频
    final_clip = my_clip.set_audio(audio_background)
    # 保存最终视频
    final_clip.write_videofile('result.mp4')

至此,整个视频就可以自动生成了,实现了现在流行的视频流水线制作! 让我们一起运行一下,看看自动生成的视频是如何工作的。

版权声明:本站部分文章来源互联网用户自发投稿,主要目的在于分享信息,版权归原作者所有,不承担相关法律责任。如有侵权请联系我们反馈邮箱 2873138863@qq.com,我们将在7个工作日内进行处理,如若转载,请注明本文地址:https://www.xdyy.xyz/689.html
THE END
分享
二维码
< <上一篇
下一篇>>