小言_互联网的博客

python爬取图片并将图片合成视频,加入音频

395人阅读  评论(0)


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

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

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

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

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


一、代码思路

二、准备工作

1、 导入需要用的库

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爬虫,超简单地实现一键提取阴阳师原画
这篇博文我之前也写过如何把图片合成视频。

三、完整代码

# -*- 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()

四、运行效果


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

程序运行结束页面

视频:

我竟然用python合成了一个阴阳师插画合集

五、Blogger’s speech

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

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

作者:远方的星
CSDN:https://blog.csdn.net/qq_44921056
腾讯云:https://cloud.tencent.com/developer/column/91164
本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。


转载:https://blog.csdn.net/qq_44921056/article/details/115861822
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场