欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

用工具批量下载哔哩哔哩视频并且将内容转换成pdf

发布时间:2025/4/16 50 豆豆
生活随笔 收集整理的这篇文章主要介绍了 用工具批量下载哔哩哔哩视频并且将内容转换成pdf 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

网上的b站视频下载工具其实已经是一箩筐了,但是大部分有个问题,就是不支持批量下载。

不废话,直接说搜索的结果,目前发现的两个可用的:

b站下载姬:https://github.com/FlySelfLog/downkyi 最好用的就是这个了,我也是用这个。

自己号称东半球第二快的用go语言实现的程序:https://github.com/sodaling/FastestBilibiliDownloader 这个东西,首先因为作者太懒,没有打包成exe,所以导致配置起来相当麻烦,你直接下载下来跑的话会各种报错,需要下载很多go的库,同时,需要你有一点go语言基础。然后是,这个东西本身是有问题的,下载一个up主的视频会少了最后一页,大概是他的代码的for循环少了个+1吧。因为代码很凌乱很绕,感觉像在炫技一样,我对go语言的研究也不深,所以就不改他的代码了,直接pass。

用b站下载姬批量下载完某up主的视频之后就是转换问题了。为什么要转换呢,这是因为我在b站上面看up主兔肉菌的绘画类视频觉得很有意思,很有学习价值,所以想要弄成pdf来临摹,这样也方便我打印嘛。

于是想到了python是可以用opencv库来截图的。那就好办了:)

上代码,第一个是单个的版本,第二个是批量转换:

import os import time import cv2 import shutil from fpdf import FPDFfilename = input("请输入下载的文件名(注意不要添加文件名后缀):")try:cap = cv2.VideoCapture(os.path.dirname(os.path.abspath(__file__)) + '\\' + filename + '.flv')print("读取视频成功...") except:print("读取视频失败,请检查文件名或文件路径是否正确...")outputpath = os.path.dirname(os.path.abspath(__file__)) + '\\output' if not os.path.exists(outputpath):print("创建临时文件夹output...")os.makedirs(outputpath) else:print("检测到临时文件夹output...")count = 0 num = 1 print("开始截屏...") while cap.isOpened():ret, frame = cap.read()if ret:cv2.imwrite(os.path.dirname(os.path.abspath(__file__)) + '\\output\\frame{:d}.jpg'.format(count), frame)count += 100 # i.e. at 300 fps, this advances one secondprint("正在截取第"+str(num)+"张")num += 1cap.set(1, count)else:cap.release()print("截屏完成,共计"+str(num)+"张~")breakimagelist = os.listdir(outputpath) print("开始将图片合并后pdf,请耐心等待几秒钟...") #format 后面的是尺寸,我们的视频默认就是这个尺寸,所以不用改了 pdf = FPDF(unit = "pt", format = [1920, 1080]) # imagelist is the list with all image filenames for image in imagelist:pdf.add_page()pdf.image(outputpath + "\\" + image,0,0) pdf.output(os.path.dirname(os.path.abspath(__file__)) + '\\'+ filename +'.pdf', "F") print("pdf合成完成!")filelist=os.listdir(outputpath) #列出该目录下的所有文件名 for f in filelist:filepath = os.path.join(outputpath,f) #将文件名映射成绝对路劲if os.path.isfile(filepath): #判断该文件是否为文件或者文件夹os.remove(filepath) #若为文件,则直接删除elif os.path.isdir(filepath):shutil.rmtree(filepath,True) #若为文件夹,则删除该文件夹及文件夹内所有文件 shutil.rmtree(outputpath,True) print("清空并删除临时文件夹output...")t = 5 while t:print(str(t) + "秒后关闭...")t -= 1time.sleep(1) print("关闭,下次见~") import os import datetime import cv2 import shutil from fpdf import FPDFrootdir = os.getcwd() + '\\全部'li = os.listdir(rootdir)if not os.path.exists(os.getcwd() + '\\output'):os.makedirs(os.getcwd() + '\\output')def mprint(s):print(str(datetime.datetime.now())+" " + s)def convert(index,whole,lii,f):mprint('处理第'+str(index)+'个视频,共'+str(whole)+'个')temp = os.getcwd() + '\\output\\'+liitry:cap = cv2.VideoCapture(rootdir + "\\" + lii + "\\" + f)count = 0num = 1if not os.path.exists(temp):os.makedirs(temp)while cap.isOpened():ret, frame = cap.read()if ret:cv2.imencode('.jpg',frame)[1].tofile(temp+'\\frame{:d}.jpg'.format(count))count += 100 # i.e. at 300 fps, this advances one secondmprint("正在截取第"+str(index)+"个视频第"+str(num)+"张")num += 1cap.set(1, count)else:cap.release()mprint("截屏完成,共计"+str(num)+"张~")breakexcept:mprint("读取视频失败,请检查文件名或文件路径是否正确...")imagelist = os.listdir(temp)mprint("开始制作第"+str(index)+"个pdf,请耐心等待几秒钟...")#format 后面的是尺寸,我们的视频默认就是这个尺寸,所以不用改了pdf = FPDF(unit = "pt", format = [1920, 1080])# imagelist is the list with all image filenamesfor image in imagelist:pdf.add_page()pdf.image(temp + "\\" + image,0,0)pdf.output(temp +'.pdf', "F")mprint("第"+str(index)+"个pdf合成完成!")filelist=os.listdir(temp) #列出该目录下的所有文件名for f in filelist:filepath = os.path.join(temp,f) #将文件名映射成绝对路劲if os.path.isfile(filepath): #判断该文件是否为文件或者文件夹os.remove(filepath) #若为文件,则直接删除elif os.path.isdir(filepath):shutil.rmtree(filepath,True) #若为文件夹,则删除该文件夹及文件夹内所有文件shutil.rmtree(temp,True)for i in range(0,len(li)):for root,dirs,files in os.walk(os.path.join(rootdir,li[i])):for f in files:if f.endswith(".mp4"):convert(i+1,len(li),li[i],f)break

 第二个脚本需要放在下载姬下载的视频的那个download文件夹里面才能跑。

 

总结

以上是生活随笔为你收集整理的用工具批量下载哔哩哔哩视频并且将内容转换成pdf的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。