如何把B站缓存的视频,下载到电脑上?(moviepy方案)
2020-04-06 本文已影响0人
咦咦咦萨
声明:本文展示的方法,绝对不是最佳方案,仅供参考
我一直把B站当成一座知识的宝库,偶尔也能挖到意想不到的资源。一般这时,我就会小手一抖,缓存这种 限时特供 的资源。那么问题来了,怎么把视频从手机搞到电脑或其他设备上呢?
第一步: 找到缓存的文件
以android手机为例,B站缓存的资源路径为:内部存储设备>Android>data>tv.danmaku.bili>download
image.png第二步: 将文件拷贝到电脑
如上图,将10000XXXX和882XXXXXXX文件夹拷贝到电脑,传输工具可以选择Android传输工具(Mac端)
image.png第三步: 分析缓存结构
882XXXX文件下,按集数序号生成文件夹,文件夹内结构基本固定。
- entry.json: 对本集资源的一些描述
- 64/video.m4s: 视频数据,没有声音
- 64/audio.m4s: 音频数据,没有视频
第四步: 利用moviepy合并视频音频
安装moviepy
sudo pip install --ignore-installed moviepy
编写实现代码
from moviepy.editor import *
import json
import os
def getTitle(entry_json_path):
"""
读取entry.json,获取资源标题
"""
f = open(os.path.join(entry_json_path, "entry.json"), encoding='utf-8')
entry = json.load(f)
return entry['page_data']['download_subtitle']
def mix(video_path, target_dir):
"""
合并video.m4s和audio.m4s,输出mp4文件
"""
video = VideoFileClip(os.path.join(video_path, "video.m4s"))
audio_clip = AudioFileClip(os.path.join(video_path, "audio.m4s"))
movie = video.set_audio(audio_clip)
movie.audio = movie.audio.set_duration(video.duration)
title = getTitle(os.path.dirname(video_path))
print("开始渲染文件:" + title)
movie.write_videofile(os.path.join(target_dir, title) + ".mp4", fps=25)
print("结束渲染文件:" + title)
def getVideoPath(parent_path, dir, video_paths):
"""
递归获取视频文件路径
"""
path = os.path.join(parent_path, dir)
if os.path.isdir(path):
files = os.listdir(path)
for file in files:
if file == '.DS_Store':
continue
if file == 'video.m4s':
video_paths.append(path)
if os.path.isdir(os.path.join(path, file)):
getVideoPath(path, file, video_paths)
elif dir == 'video.m4s':
video_paths.append(parent_path)
if __name__ == '__main__':
# 缓存目录
base_dir = '/Users/admin/Downloads/882576229'
# 合成文件存储路径
target_dir = '/Users/admin/Downloads/882576229'
# 遍历缓存目录,执行合并文件
video_paths = []
filenames = os.listdir(base_dir)
for filename in filenames:
if filename == '.DS_Store':
continue
getVideoPath(base_dir, filename, video_paths)
for video_path in video_paths:
mix(video_path, target_dir)
第五步: 执行合并
python av.py
image.png
总结
- 本方案适合喜欢动手的同学,在资源允许的情况下,执行批量操作。
-
moviepy比较吃资源。
image.png