本帖最后由 苏紫方璇 于 2023-9-17 20:49 编辑
20230915 更新
写在前面,用PC下载视频的方法很多,我这个只是因为手机缓存了两百多集的课程,临时用了一下。如果电脑需要建议还是直接用网上的插件、下载器等等下载
1. 此程序只测试了一个视频有多集的缓存视频。2. 用的是python+ffmpeg
3. 本次用的视频缓存文件目录结构如下
+---entry.json
+-----32
| +-------audio.m4s
| +-------video.m4s
已经发现存放音视频的 文件夹名称会变,我用的时候是32 截图时用的新视频这里变成了 80 所以代码也需要跟着改变一下这个数字
entry.json 文件中 - page_data - part 这一级里存放了视频的名称
去哔哩哔哩客户端 检测缓存 可以拿到id
安卓B站缓存目录 Android/data/com.bilibli.app.in/download/找到的id
安卓端操作
1. 缓存你要的视频
截图1
截图2
2. 确定视频id(如果你只缓存了一个视频、或者一个视频下面的多集 可以跳过,因为只会有一个文件夹)
进入我的 —— 离线缓存 — 右上角设置(下图)
点击 离线诊断
然后随便点个视频 等待结果。 这里可以看到视频id 及目录结构(音视频存储的文件夹目录为80)
2. 在手机文件夹中找到这个视频的缓存文件
XXXX手机/Android/data/com.bilibili.app.in/download/你的视频id
把这整个id文件夹都拿到电脑上
PC端操作
1. 下载FFmpeg 根据你的系统下载
https://github.com/BtbN/FFmpeg-Builds/releases
Windows可以选择 [color=var(--fgColor-accent, var(--color-accent-fg))]ffmpeg-master-latest-win64-gpl.zip
2. python安装ffmpeg-python库
pip install ffmpeg-python
3. 改下代码中的下面几个位置
folder_path = '视频id目录路径'
output_folder = '导出路径'
sub_folder = os.path.join(root, '音视频存储的文件夹名称')
4. 运行代码等结果
______________________代码不变__________________________
下面是代码
[Python] 纯文本查看 复制代码 import os
import json
import ffmpeg
def merge_audio_video(folder_path, output_folder):
for root, dirs, files in os.walk(folder_path):
if 'entry.json' in files:
entry_file = os.path.join(root, 'entry.json')
with open(entry_file, 'r', encoding='utf8') as f:
entry_data = json.load(f)
part_name = entry_data.get('page_data').get('part')
if part_name:
sub_folder = os.path.join(root, '32')
# 每个视频的这个文件夹不一样 需要修改数字
print(sub_folder)
audio_file = os.path.join(sub_folder, 'audio.m4s')
video_file = os.path.join(sub_folder, 'video.m4s')
output_file = os.path.join(output_folder, f'{part_name}.mp4')
merge_files(audio_file, video_file, output_file)
print(f'Merged video: {output_file}')
def merge_files(audio_file, video_file, output_file):
audio_stream = ffmpeg.input(audio_file)
video_stream = ffmpeg.input(video_file)
ffmpeg.output(audio_stream, video_stream, output_file, vcodec='copy', acodec='copy').run()
# 指定文件夹路径和合并后的文件存放路径
folder_path = '视频id目录路径'
output_folder = '导出路径'
merge_audio_video(folder_path, output_folder)
|