除了《依巴拉度~时间篇》,也推荐游戏《GRIS》,画面非常美,可以找视频录播下载下来做壁纸。
如果只是自己用的话,代码会简单非常多,只需要提取图片和更换壁纸的两个函数就行,但是总想把它完善,就有了现在这个更友好的工具。
脚本的作用:从网上,或者本地获取到视频,然后每隔一段时间提取出一张图片,并随机选取一张作为桌面壁纸,每隔一段时间壁纸可以自动更换,当手动结束程序的时候,壁纸才会停止更换。
注意事项:
请安装相关的库文件
脚本可以直接运行,无需做修改
脚本使用了you-get来下载网络视频,其支持的站点参见完整列表
支持同时下载多个视频
考虑到you-get下载速度,以及其他情况,脚本也支持本地视频
提取出来的图片会进行分类,方便管理使用
import sys
import os
import cv2
import random
import ctypes
import time
from you_get import common as you_get # 导入you-get库
# video_path = r'C:\Users\asuka\Desktop\test' # 存储视频的文件夹
# video_url = 'https://www.bilibili.com/video/BV1ox411V7Gu' # 需要下载的视频地址
# cut_time = 10 # 修改为每隔10秒截取一张图片
# 下载视频
def download_video():
sys.argv = ['you-get', '-o', video_path, video_url] # sys传递参数执行下载,就像在命令行一样;‘-o’后面跟保存目录。
you_get.main()
# 从视频中截图图片
def get_img():
video_type = [".avi", ".flv", ".wmv", ".mov", ".mp4", ".webm", ".vob", ".mng", ".qt", ".mpg", ".mpeg", ".3gp",
".mkv"]
for current_folder, list_folders, files in os.walk(video_path):
for f in files: # 用来遍历所有的文件,只取文件名,不取路径名
if os.path.splitext(f)[-1] in video_type: # 检查出视频文件
copy_f = current_folder + '\\' + f # 给出视频文件的绝对路径
print('检查到视频文件:' + f)
print('开始提取图片')
picture_path = os.path.join(video_path, os.path.splitext(f)[0])
os.makedirs(picture_path)
os.chdir(picture_path)
video_cap = cv2.VideoCapture(copy_f) # 读取视频文件
success, image = video_cap.read()
fps = int(video_cap.get(cv2.CAP_PROP_FPS)) * cut_time
count = 0
while success:
if count % fps == 0:
cv2.imwrite("./%d.jpg" % int(count / fps), image) # 指明存储图片的位置
# print('Process %dth seconds: ' % int(count / fps), success)
success, image = video_cap.read()
count += 1
print('提取完毕:' + f)
# 设置桌面壁纸
def set_wallpaper():
all_picture_path = [] # 用来存储所有图片的绝对路径
for current_folder, list_folders, files in os.walk(video_path):
for f in files: # 用来遍历所有的文件,只取文件名,不取路径名
if f.endswith('.jpg'): # 检查出所有的图片
picture_path = current_folder + '\\' + f # 给出图片的绝对路径
all_picture_path.append(picture_path)
while True:
filepath = random.choice(all_picture_path) # 随机选取某张图片,建立绝对地址
print(filepath)
ctypes.windll.user32.SystemParametersInfoW(20, 0, filepath, 0) # 设置桌面壁纸
time.sleep(replace_wallpaper) # 睡眠半个小时
print('''脚本的功能:
1:从你指定的url地址中下载视频(可选功能)
2:指明存储视频的文件夹
3:脚本会从视频中每隔数秒提取出一张图片
4:脚本会每隔一定时间,随机选取一张图片作为桌面壁纸''')
print()
choice = input('我希望使用本地视频(请按 1),我希望使用网络视频(请按 2):')
if choice == '2':
print("请输入网址,每行输入一个。输入’quit‘结束输入")
url_list = [] # 存储用户输入的内容
while True:
char = input()
char = char.strip()
if char == '':
continue
if 'quit' in char:
break
url_list.append(char)
video_path = input('请输入用来存储视频的文件夹地址:')
cut_time = int(input('每隔几秒截取图片:'))
replace_wallpaper = int(input('每隔几秒更换壁纸:'))
for video_url in url_list:
download_video()
get_img()
set_wallpaper()
elif choice == '1':
video_path = input('请输入用来存储视频的文件夹地址:')
cut_time = int(input('每隔几秒截取图片:'))
replace_wallpaper = int(input('每隔几秒更换壁纸:'))
get_img()
set_wallpaper()
由于需要提取图片,所以GIF时间较长
使用网络视频
使用本地视频
@一行玩python: 五行Python自动换你的电脑桌面壁纸(内附源码和exe)
@zhimahuuu:视频切割:python将视频文件按秒存储成图片
@Mr.史:python you-get ffmpeg 下载哔哩哔哩视频