前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >爬虫实例十五:python爬取图片并合成视频,加入音频

爬虫实例十五:python爬取图片并合成视频,加入音频

原创
作者头像
远方的星
修改2021-08-04 10:05:27
1.8K0
修改2021-08-04 10:05:27
举报

为了批量下载壁纸,学习了爬虫。

学习之后发现,下载之后,还要手动去筛选。我就想了一下能不能把图片合成视频,一秒一张图,根据秒数,确定图片名。

之前已经尝试过了,感觉看的过程很无聊了。于是,我就想着能不能加个音频在视频上。

于是有了这篇文章。一切都是为了懒!(哈哈哈)

完成之后,发现下载过程如果打印进程的话,很无聊,几乎都是重复的字符串,于是我就想,能不能把代码实现过程,用进度条实现出来。于是发现了tqdm,超级好用!!!


二、准备工作

1、 导入需要用的库
代码语言:txt
复制
import os
import cv2
import requests
from tqdm import tqdm
from lxml import etree
from mutagen.mp3 import MP3
from moviepy.editor import VideoFileClip, AudioFileClip
2、准备音频

我下载了LiSA - 紅蓮華 (THE FIRST TAKE Studio Ver.).mp3,但为了之后方便写路径,我重命名放在了D盘,路径为'D:/hlh.mp3'。

3、爬取图片

为了合成的视频能有较好的观感,我选择爬取有固定分辨率的图片网站,找了一下,最后选择了阴阳师官方插画其实就是想偷个懒,我之前写过一次

具体可以参考:Python爬虫,超简单地实现一键提取阴阳师原画

这篇博文我之前也写过如何把图片合成视频。

三、完整代码

代码语言:txt
复制
# -*- coding: UTF-8 -*-
"""
@Author  :远方的星
@Time   : 2021/4/18 21:26
@CSDN    :https://blog.csdn.net/qq_44921056
@腾讯云   : https://cloud.tencent.com/developer/column/91164
"""

import os
import cv2
import requests
from tqdm import tqdm
from lxml import etree
from mutagen.mp3 import MP3
from moviepy.editor import VideoFileClip, AudioFileClip


headers = {
    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
}
path = 'D:/test/tupian'
if not os.path.exists(path):
    os.mkdir(path)


#  爬取阴阳师图片
def get_picture(url, num_1, num_2):
    response = requests.get(url=url, headers=headers).text
    html = etree.HTML(response)
    lists = html.xpath('/html/body/div[2]/div[3]/div[1]/div[3]/div[2]/div')
    num = 0
    for i in tqdm(range(num_1, num_2)):  # tqdm的作用是加上进程进度条
        a = lists[i].xpath('./div/div/a[contains(text(), "1920x1080")]')  # 根据文本内容锁定节点a
        if a == []:  # 有些图片的分辨率较少,需要加上条件筛选
            num += 1
        else:
            image_url = a[0].xpath('./@href')[0]  # 获取原画壁纸链接
            image_data = requests.get(url=image_url).content
            image_name = '{}.jpg'.format(num)  # 给每张图片命名
            save_path = path + '/' + image_name  # 图片的保存地址
            with open(save_path, 'wb') as f:
                f.write(image_data)
                f.close()
                num += 1


# 合成视频
def get_video(num_1, num_2):
    video_dir = 'D:/test/result.mp4'      # 输出视频的保存路径
    fps = 1      # 帧率
    img_size = (1920, 1080)      # 图片尺寸
    fourcc = cv2.VideoWriter_fourcc(*"mp4v")
    videoWriter = cv2.VideoWriter(video_dir, fourcc, fps, img_size)
    for i in tqdm(range(num_1, num_2)):
        img_path = 'D:/test/tupian/' + '{}.jpg'.format(i)
        frame = cv2.imread(img_path)
        frame = cv2.resize(frame, img_size)  # 生成视频   图片尺寸和设定尺寸相同
        videoWriter.write(frame)  # 将图片写进视频里
    videoWriter.release()  # 释放资源


# 加入音频
def get_audio():
    videoFile = 'D:/test/result.mp4'  # 视频文件
    video = VideoFileClip(videoFile)
    videos = video.set_audio(AudioFileClip('D:/hlh.mp3'))  # 音频文件
    videos.write_videofile('D:/test/sound.mp4', audio_codec='aac')  # 保存合成视频,注意加上参数audio_codec='aac',否则音频无声音


# 计算每个音频的时间(秒)
def get_time_count():
    audio = MP3("D:/hlh.mp3")
    time_count = int(audio.info.length)
    return time_count


def main():
    base_url = 'https://yys.163.com/media/picture.html'
    num_1 = 0
    num_2 = get_time_count()
    print('开始爬取阴阳师插画,请稍等片刻')
    get_picture(base_url, num_1, num_2)
    print('图片正在整和成视频,请稍后片刻')
    get_video(num_1, num_2)
    print('正在给视频加入音频')
    get_audio()
    print('恭喜你,完整的视频已经生成了!!!')


if __name__ == '__main__':
    main()

四、运行效果

在这里插入图片描述
在这里插入图片描述

(由于时间有点长,就录了一点点,担心图片过大)

程序运行结束页面

在这里插入图片描述
在这里插入图片描述

视频:

五、Blogger's speech

如有不足,还请大佬评论区留言或私信我,我会进行补充。

感谢您的支持,希望可以点赞,关注,收藏,一键三连哟。

作者:远方的星 CSDN:https://blog.csdn.net/qq_44921056

腾讯云:https://cloud.tencent.com/developer/column/91164

本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二、准备工作
    • 1、 导入需要用的库
      • 2、准备音频
        • 3、爬取图片
        • 三、完整代码
        • 四、运行效果
        • 五、Blogger's speech
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档