Python自动化短视频生成脚本实现热门视频流水线生产

目录
  • 一、核心功能设计
  • 二、实现步骤
    • 1. 图片爬取
    • 2. 图片统一格式大小
    • 3. 视频合成
    • 4. 截取背景音乐
    • 5. 视频和背景音乐合并

一、核心功能设计

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

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

  • 通过关键字进行图片批量爬取
  • 对爬取的图片进行筛选并批量进行大小resize统一
  • 将统一大小的图片进行视频合成
  • 根据选取的歌曲,截取合适的背景音乐
  • 将视频和截取的背景音乐合并

二、实现步骤

1. 图片爬取

当然如果小伙伴已经有视频素材了,只想给视频直接添加背景可以直接跳到第四步;如果已经有图片素材不需要爬取了,可以直接跳到第二步。

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

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. 图片统一格式大小

第二步,我们需要将获取的图片进行大小格式统一,方便后面的视频合成。这里我们可以自己手动筛选部分需要resize统一大小的图片,也可以对爬取的整个文件夹下图片批量统一格式大小。对于图片大小尺寸可以通过代码进行设置,这里我们将所有图片大小统一成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')

视频时长知道了,接下来我们就要进行背景音乐截取了,之前博主有写过一篇文章

关于如何用Python自制一款炫酷音乐播放器,感兴趣的可以去看看是如何制作的。

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

音乐下载完毕,接下来就是音乐截取,这里我们提供了两种方式。一种是截取歌曲高潮部分,另一种是自己选取歌曲截取区间。

歌曲高潮自动截取:

经常刷短视频的小伙伴,可以看到网上很多短视频背景音乐都是歌曲的高潮部分。那么Python能否自动获取歌曲的高潮部分呢?当然!Python已经考虑到了,可以自动截取歌曲高潮部分,这里我们需要用到pychorus模块,具体这个是如何实现,大家可以网上查资料研究研究。

首先我们需要安装下pychorus模块

pip install pychorus

安装完成后,导入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秒开始,时长26s。至此我们就可以把当前歌曲的高潮部分截取出来进行最后的视频和音乐合并了。

自定义截取歌曲区间:

如果本身我们的视频长度较长,截取不到歌曲高潮部分怎么办呢?我们可以进行自己定义歌曲截取区间来获取背景音乐,下面就演示下,截取歌曲从20s开始到90s结束,核心代码如下:

# 截取背景音乐
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')

至此,整个视频就可以自动生成,实现热门视频流水线生产了!下面我们一起运行下看看自动生成的视频效果如何吧。

以上就是Python自动化短视频生成脚本实现热门视频流水线生产的详细内容,更多关于Python自动化生成脚本的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python爬取某平台短视频的方法

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 基本开发环境 Python 3.6 Pycharm 相关模块的使用 import os import requests 安装Python并添加到环境变量,pip安装需要的相关模块即可. 一.确定需求 爬取搞笑趣味栏目的视频内容. 二.网站数据分析 首先需要明确一点,好看视频网站加载方式是懒加载的方式,需要你下滑网页才会加载出新的内容 加载出来的内容里面有音频播放地址以及标题. 内容比较简单

  • Python 利用scrapy爬虫通过短短50行代码下载整站短视频

    近日,有朋友向我求助一件小事儿,他在一个短视频app上看到一个好玩儿的段子,想下载下来,可死活找不到下载的方法.这忙我得帮,少不得就抓包分析了一下这个app,找到了视频的下载链接,帮他解决了这个小问题. 因为这个事儿,勾起了我另一个念头,这不最近一直想把python爬虫方面的知识梳理梳理吗,干脆借机行事,正凑着短视频火热的势头,做一个短视频的爬虫好了,中间用到什么知识就理一理. 我喜欢把事情说得很直白,如果恰好有初入门的朋友想了解爬虫的技术,可以将就看看,或许对你的认识会有提升.如果有高手路过,

  • Python selenium抓取虎牙短视频代码实例

    今天闲着没事,用selenium抓取视频保存到本地,只爬取了第一页,只要小于等于5分钟的视频... 为什么不用requests,没有为什么,就因为有些网站正则和xpath都提取不出来想要的东西,要么就是接口出来的数据加密,要么就因为真正的视频url规律难找! selenium几行代码轻轻松松就搞定! 安装selenium库,设置无界面模式 代码如下: from selenium import webdriver from selenium.webdriver.chrome.options imp

  • Python爬取某拍短视频

    一.抓取目标 目标网址:美拍视频 二.工具使用 开发环境:win10.python3.7 开发工具:pycharm.Chrome 工具包:requests.xpath.base64 三.重点学习内容 爬虫采集数据的解析过程 js代码调试技巧 js逆向解析代码 Python代码的转换 四.项目思路解析 进入到网站的首页 挑选你感兴趣的分类 根据首页地址获取到进入详情页面的超链接的跳转地址 找到对应加密的视频播放地址数据 这个数据是静态的网页数据,通过js代码进行解码的 找到对应的解析代码 先找到视

  • 用Python制作灯光秀短视频的思路详解

    一.引言 2021年4月8日武汉重启一周年,这是个值得庆祝的日子,作为一个武汉人和一个死宅程序员,老猿也想在这个日子留下点什么.想起武汉长江两岸的灯光秀,顿时有了主意,那就用程序实现一个武汉重启庆祝的灯光秀短视频吧,于是在4月7日晚开始构思和着手开发,4月8日晚终于顺利完成,并且通过使用OpenCV.OpenCV+Moviepy两种方式进行了实现. 本文介绍结合Python+OpenCV+Moviepy实现的思路和过程,Python+OpenCV实现的思路和过程将在另外的博文中单独介绍. 二.实

  • Python自动化短视频生成脚本实现热门视频流水线生产

    目录 一.核心功能设计 二.实现步骤 1. 图片爬取 2. 图片统一格式大小 3. 视频合成 4. 截取背景音乐 5. 视频和背景音乐合并 一.核心功能设计 首先我看了网上那些视频营销号的视频,大多数都是围绕一个主题通过几张图片进行视频轮播展示并添加一些热门歌曲作为背景音乐. 知道了大概的思路,接下来我们可以通过以下几步进行实现: 通过关键字进行图片批量爬取 对爬取的图片进行筛选并批量进行大小resize统一 将统一大小的图片进行视频合成 根据选取的歌曲,截取合适的背景音乐 将视频和截取的背景音

  • Python自动化之批量生成含指定数据的word文档

    目录 一.需求说明 二.开始动手动脑 三.总结 一.需求说明 在平时工作当中,经常需要处理文件,特别是Word,处理Word时会遇一类比较常见的场景:文档中大部分文字固定不变,小部分内容需要修改. 这时我们会机械的重复打开.修改.保存文档等一系列操作,内容少还可勉强接受,内容一旦多了,心里难免会心浮气躁. 今天我要给大家介绍一个秘密武器-docxtpl开发包,有了这个只需写一份模板,其他的都交给电脑自己进行. 首先需要你的电脑安装好了Python环境,并且安装好了Python开发工具. 如果你还

  • 五个方便好用的Python自动化办公脚本的实现

    目录 1.自动化阅读网页新闻 2.自动生成素描草图 3.自动发送多封邮件 4.自动化数据探索 5.自动桌面提示 小结 相比大家都听过自动化生产线.自动化办公等词汇,在没有人工干预的情况下,机器可以自己完成各项任务,这大大提升了工作效率. 编程世界里有各种各样的自动化脚本,来完成不同的任务. 尤其Python非常适合编写自动化脚本,因为它语法简洁易懂,而且有丰富的第三方工具库. 这次我们使用Python来实现几个自动化场景,或许可以用到你的工作中. 1.自动化阅读网页新闻 这个脚本能够实现从网页中

  • 分享4个方便且好用的Python自动化脚本

    目录 前言 1.自动化阅读网页新闻 2.自动生成素描草图 3.自动发送多封邮件 4.自动化数据探索 5.给大家分享一下自动化测试工具 总结 前言 相比大家都听过自动化生产线.自动化办公等词汇,在没有人工干预的情况下,机器可以自己完成各项任务,这大大提升了工作效率. 编程世界里有各种各样的自动化脚本,来完成不同的任务. 尤其Python非常适合编写自动化脚本,因为它语法简洁易懂,而且有丰富的第三方工具库. 这次我们使用Python来实现几个自动化场景,或许可以用到你的工作中. 1.自动化阅读网页新

  • 分享5个方便好用的Python自动化脚本

    目录 1.自动化阅读网页新闻 2.自动生成素描草图 3.自动发送多封邮件 4.自动化数据探索 5.自动桌面提示 前言: 相比大家都听过自动化生产线.自动化办公等词汇,在没有人工干预的情况下,机器可以自己完成各项任务,这大大提升了工作效率. 编程世界里有各种各样的自动化脚本,来完成不同的任务.尤其Python非常适合编写自动化脚本,因为它语法简洁易懂,而且有丰富的第三方工具库.这次我们使用Python来实现几个自动化场景,或许可以用到你的工作中. 1.自动化阅读网页新闻 这个脚本能够实现从网页中抓

  • 八个超级好用的Python自动化脚本(小结)

    目录 1.自动化阅读网页新闻 2.自动化数据探索 3.自动发送多封邮件 4.将 PDF 转换为音频文件 5.从列表中播放随机音乐 6.智能天气信息 7.长网址变短网址 8.清理下载文件夹 每天你都可能会执行许多重复的任务,例如阅读新闻.发邮件.查看天气.打开书签.清理文件夹等等,使用自动化脚本,就无需手动一次又一次地完成这些任务,非常方便.而在某种程度上,Python 就是自动化的代名词. 1.自动化阅读网页新闻 这个脚本能够实现从网页中抓取文本,然后自动化语音朗读,当你想听新闻的时候,这是个不

  • python自动化生成IOS的图标

    本文实例为大家分享了python自动化生成IOS的图标,供大家参考,具体内容如下 每次上架之前都要生成十几个图片感觉无聊麻烦,考虑使用脚本处理 脚本使用python 和一部分shell 处理的,python部分主要是使用PIL库处理图片,和调用shell脚本,shell 主要是操作文件 #coding=utf-8 import os ,threading from PIL import Image import subprocess import json class ImgManager(ob

  • Python自动化导出zabbix数据并发邮件脚本

    Zabbix没有报表导出的功能,于是通过编写脚本导出zabbix数据并发邮件.效果如下: 下面是脚本,可根据自己的具体情况修改: #!/usr/bin/python` `#coding:utf-8` `import MySQLdb` `import time,datetime` `import xlsxwriter` `import smtplib` `from` `email.mime.text import MIMEText` `from` `email.mime.multipart imp

  • 使用Python和百度语音识别生成视频字幕的实现

    从视频中提取音频 安装 moviepy pip install moviepy 相关代码: audio_file = work_path + '\\out.wav' video = VideoFileClip(video_file) video.audio.write_audiofile(audio_file,ffmpeg_params=['-ar','16000','-ac','1']) 根据静音对音频分段 使用音频库 pydub,安装: pip install pydub 第一种方法: #

  • 详解基于Android的Appium+Python自动化脚本编写

    1.Appium Appium是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试, 它使用WebDriver协议驱动iOS,Android和Windows应用程序. 通过Appium,我们可以模拟点击和屏幕的滑动,可以获取元素的id和classname,还可以根据操作生成相关的脚本代码. 下面开始Appium的配置. appPackage和APPActivity的获取 任意下载一个app 解压 但是解压出来的xml文件可能是乱码,所以我们需要反编译文件. 逆向AndroidMan

随机推荐