为了批量下载壁纸,学习了爬虫。
学习之后发现,下载之后,还要手动去筛选。我就想了一下能不能把图片合成视频,一秒一张图,根据秒数,确定图片名。
之前已经尝试过了,感觉看的过程很无聊了。于是,我就想着能不能加个音频在视频上。
于是有了这篇文章。一切都是为了懒!(哈哈哈)
完成之后,发现下载过程如果打印进程的话,很无聊,几乎都是重复的字符串,于是我就想,能不能把代码实现过程,用进度条实现出来。于是发现了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
本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。