Cristy 发表于 2023-9-13 18:34

安卓BiliBili新版缓存文件转mp4

本帖最后由 苏紫方璇 于 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. 缓存你要的视频

   

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可以选择 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. 运行代码等结果

______________________代码不变__________________________

下面是代码
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)



icie 发表于 2023-9-13 20:02

命令找了下
-i /storage/emulated/0/bili/video.m4s -i /storage/emulated/0/bili/audio.m4s -vcodec copy -acodec copy /storage/emulated/0/bili/video1.mp4

hrpzcf 发表于 2023-9-13 18:55

代码是在手机端运行还是PC端运行?

yzw001506 发表于 2023-9-13 19:32

可以可以,我建一个脚本试试。

无闻无问 发表于 2023-9-13 19:34

b站视频好像要修复文件头,不用修复吗?

无闻无问 发表于 2023-9-13 19:36

想起了,手机上不用,pc端才需要……

文西思密达 发表于 2023-9-13 19:48


可以可以,我建一个脚本试试。

bling 发表于 2023-9-13 19:58

感谢分享,正好需要

icie 发表于 2023-9-13 20:01

timbre有安卓端的,一个命令搞定

w220913 发表于 2023-9-13 20:04

这个和bilibili缓存音视频合并软件(含弹幕转码) v1.6这个有什么区别吗?
页: [1] 2 3 4 5
查看完整版本: 安卓BiliBili新版缓存文件转mp4