为了批量下载壁纸,学习了爬虫。
学习之后发现,下载之后,还要手动去筛选。我就想了一下能不能把图片合成视频,一秒一张图,根据秒数,确定图片名。
之前已经尝试过了,感觉看的过程很无聊了。于是,我就想着能不能加个音频在视频上。
于是有了这篇文章。一切都是为了懒!(哈哈哈)
完成之后,发现下载过程如果打印进程的话,很无聊,几乎都是重复的字符串,于是我就想,能不能把代码实现过程,用进度条实现出来。于是发现了tqdm
,超级好用!!!
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
我下载了LiSA - 紅蓮華 (THE FIRST TAKE Studio Ver.).mp3,但为了之后方便写路径,我重命名放在了D盘,路径为'D:/hlh.mp3'。
为了合成的视频能有较好的观感,我选择爬取有固定分辨率的图片网站,找了一下,最后选择了阴阳师官方插画(其实就是想偷个懒,我之前写过一次 )
具体可以参考: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()
(由于时间有点长,就录了一点点,担心图片过大)
程序运行结束页面
视频:
如有不足,还请大佬评论区留言或私信我,我会进行补充。
感谢您的支持,希望可以点赞,关注,收藏,一键三连哟。
作者:远方的星 CSDN:https://blog.csdn.net/qq_44921056
腾讯云:https://cloud.tencent.com/developer/column/91164
本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。