红茶的个人站点

  • 首页
  • 专栏
  • 开发工具
  • 其它
  • 隐私政策
Awalon
Talk is cheap,show me the code.
  1. 首页
  2. 其它
  3. 正文

关于动态壁纸

2022年1月6日 1325点热度 0人点赞 0条评论

最近翻b站翻到一个有意思的视频『教程』动态壁纸 原理揭秘哔哩哔哩bilibili,动态壁纸的原理的确挺简单的,用几行代码就可以实现,感兴趣的可以自行尝试。

当然,这篇文章不是介绍动态壁纸原理的,而是介绍如何使用动态壁纸。

目前动态壁纸比较火的有两个产品:

  • 元气桌面壁纸官网——动态壁纸桌面—高清壁纸下载 (duba.com)

  • Wallpaper Engine

后者可以通过Steam购买和下载使用。

动态壁纸分为以下几种:

  • 图片

  • 在图片基础上加上动效,比如下雨、下雪、水波纹等

  • 从电影、动画等处截取的视频

  • 在静态图基础上,抠图后用类似Live2D的技术做出的动图,然后压制成视频格式

事实上创意工坊中大多数都是前两种,但显然效果并不好。第三种虽然乍一看很花里胡哨,但并不适合作为桌面壁纸长时间使用,会分散注意力,有种喧宾夺主的感觉。

最后一种是效果最好的,但抠图和制作动图是个体力活,非常麻烦,有的甚至还要考虑版权要先联系原画师,总之质量上乘的动图依然是个稀缺资源。

当然,还有一种特殊的WE创意工坊中勾上R18之后会找到的透视图,就不需要多介绍了,懂的都懂。

具体壁纸这里就不介绍了,在B站可以搜到一堆介绍视频,这里介绍我关注的WE创意工坊中几个不错的动图作者:

image-20220106134710463

按ID查找就能找到,其中不乏一些量大管饱的优秀动图作者。

最后说说元气壁纸这个后起之秀,不同于买断的WE,元气壁纸采用免费+会员+壁纸收费的策略。和WE创意工坊都靠为爱发电不同,元气一开始就是冲着用收费吸引动图作者,再用优秀的动图吸引用户这个商业模式去的。当然不能说有问题,毕竟只要版权没有什么毛病,收费是合理的。但是,这个软件有流氓软件的嫌疑,虽然我没有安装,但是知乎上有一大堆“如何彻底删除元气壁纸”之类的问题。

但是,如果你关注B站一些动图作者和原画师,就能发现,很多都已经开始被元气壁纸拉拢,从发表各平台动态壁纸变成了元气壁纸独占。对于这种情况,我只能选择尝试合理(bai)获取(piao)。

一开始我是打算在虚拟机装一个元气壁纸,然后尝试下载视频文件到本地解析的,但似乎新版元气壁纸已经对视频文件进行了加密,这条路不通。

后来我在CSDN上看到了一个元气壁纸的爬虫代码,可以从元气壁纸的一个“半公开”的Web站点爬视频,当然内容可能没有正式壁纸分辨率那么高,但至少解决了有无问题。我爬了几条后发现完全不用那么麻烦,该站点还提供了检索功能,完全可以直接搜索想要的动态壁纸,然后通过浏览器抓包media文件来获取视频。如果你安装了IDM之类的嗅探工具其实更简单。

提供一个该站点的网址,请谨慎使用:

  • 动态壁纸桌面壁纸图片电脑桌面壁纸图片_4K高清壁纸-元气壁纸 (cheetahfun.com)

再提供一个该站点的爬虫程序:

import requests
from lxml import etree
import threading
from queue import Queue
import os
import time
 
pageUrlQueue = Queue()
downloadQueue = Queue()
 
def parsePageUrl(pages):
    for page in range(1,pages+1):
        url = "https://bizhi.ijinshan.com/dtag_109/index_"+str(page)+".shtml"
        print(url)
        headers = {
            "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36 Edg/92.0.902.55",
            "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
        }
        res = requests.get(url=url,headers=headers)
        res.encoding = res.apparent_encoding
        html = etree.HTML(res.text)
        time.sleep(1)
        divs = html.xpath("//div[@class='wallpaper-wrapper']/div")
        for div in divs:
            try:
                i = div.xpath("./a/@data-image-id")[0]
                d = div.xpath("./a/@data-classify-id")[0]
                u = "https://bizhi.ijinshan.com/d_" + d+"/"+i+".shtml"
                pageUrlQueue.put(u)
                print("url parse worker:{} is build.".format(u))
            except:
                pass
 
def getDownloadUrl():
    headers = {
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36 Edg/92.0.902.55" ,
    }
    while True:
        if not pageUrlQueue.empty():
            try:
                url = pageUrlQueue.get()
                res = requests.get(url= url,headers=headers)
                res.encoding = "utf-8"
                html = etree.HTML(res.text)
                src = html.xpath("/html/body/div[1]/section[1]/div[2]/div[1]/video/@src")[0]
                title = html.xpath("/html/body/div[1]/section[1]/div[1]/div/h1/text()")[0]
                downloadQueue.put((title,src))
                print("download worker {},{} is build".format(title, src))
            except :
                pass
 
def downloadDynamicWallPictrue():
    while True:
        if not downloadQueue.empty():
            title ,src = downloadQueue.get()
            file_name = "./动态壁纸/{}.mp4".format(title)
            if os.path.exists(file_name):
                print("file {} already download, skip.".format(file_name))
                continue
            headers = {
                "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36 Edg/92.0.902.55" ,
            }
            time.sleep(1)
            res = requests.get(url=src,headers=headers).content
            if not os.path.exists("./动态壁纸"):
                os.mkdir("./动态壁纸")
            with open(file_name,mode="wb") as f:
                f.write(res)
            f.close()
            print(title,"下载成功")
            if downloadQueue.empty():
                break
 
def newThread(func,count):
    for _ in range(count):
        threading.Thread(target=func,).start()
 
if __name__ == '__main__':
    pages = input("请输入爬取页数: ")
    pages = int(pages)
    parsePageUrl(pages)
 
    newThread(getDownloadUrl,5)
    newThread(downloadDynamicWallPictrue,5)

我在原程序基础上改了改,但依然有点问题,程序无法正常退出,不过就像我前边说的,这个爬虫的必要性存疑,所以就没继续改了。

原始代码发表页面:

  • https://blog.csdn.net/weixin_46277390/article/details/119275058

原始代码存在bug。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2022年1月6日

魔芋红茶

加一点PHP,加一点Go,加一点Python......

点赞
< 上一篇
下一篇 >

文章评论

取消回复

*

code

COPYRIGHT © 2021 icexmoon.cn. ALL RIGHTS RESERVED.
本网站由提供CDN加速/云存储服务

Theme Kratos Made By Seaton Jiang

宁ICP备2021001508号

宁公网安备64040202000141号