当前位置: 首页 > news >正文

Python+FFmpeg提取哔哩哔哩安卓缓存

主要参考360个人博物馆的一个文章[1],在评论区看到好像这个头条[2]的才是原出处?

首先说一下注意事项:

  • 手机直接连在电脑上,可以复制文件,但是不能够通过命令行访问。其原因大概是没有挂载盘符,导致其路径一直在/此电脑下面。

  • FFmpeg的安装等不再赘述,我这里已经安装好了。而且这里的FFmpeg已经加入环境变量,即全局可调用。如果没有加入环境变量,则需要通过安装路径/ffmpeg.exe或者进入安装文件夹,通过.\ffmpeg.exe来调用

E:\Android\data\tv.danmaku.bili\download\10590361\c_17482191
|   entry.json
|   danmaku.xml
|
\---64index.jsonaudio.m4svideo.m4s

在上图当中,10590361是缓存视频的文件夹,c_17482191是该分P的文件夹。其中64这个文件夹是该分P的视频video.m4s,音频audio.m4s等信息,而entry.json则是该分P的信息及整个系列的信息。

不同的缓存当中,存储视频和音频的文件夹名不一定相同,这个是64,我也见过16的,一般都是数字

代码如下:

import json
# 用于解析json
import os
# 用于新建文件夹等
import re
# 用于替换字符
import time
# 用于计时At = time.time()
# 记录总耗时def validateTitle(title):rstr = r"[\/\\\:\*\?\"\<\>\|]"# '/ \ : * ? " < > |'new_title = re.sub(rstr, "", title)# 替换为下划线return new_titlepathI = "E:/Android/data/tv.danmaku.bili/download/929386644/"
# 缓存所在的目录listF = os.listdir(pathI)
# 该缓存下有几个视频文件夹pathF = pathI + listF[0] + '/entry.json'
# 该缓存下P1的信息文件路径with open(pathF, encoding='utf-8') as fileI:infoJ = json.load(fileI)
# 读入文件dirT = validateTitle(infoJ['title'])dirN = 'D:/NetVideo/'+dirT + '/'
# 新的文件夹路径,包含中文dirO = 'D:/NetVideo/Tmp/'
# 旧的临时文件夹路径,用于FFmpeg的命令if not(os.path.exists(dirO)):os.mkdir(dirO)# 按照临时文件夹的名字创立文件listFL = len(listF)
handleP = []# 循环该缓存下的每一个分P
for index,itemF in enumerate(listF):print(index+1,'/',listFL,' ','*'*20)trnT = time.time()pathF = pathI + itemF + '/'# 该分P的路径os.chdir(pathF)# 将工作目录改为当前路径with open('entry.json',encoding='utf-8') as fileI:infoJ = json.load(fileI)# 读入该分P的信息fileO = dirO+'O.mp4'# 该分P视频的临时文件名,不含中文fileNC = validateTitle(infoJ['page_data']['part'])# 去除文件名当中不能存在的字符fileN = dirO + fileNC + '.mp4'# 该分P的实际文件名,包含中文print(fileNC)commandS = 'ffmpeg -loglevel quiet -i video.m4s -i audio.m4s -codec copy '+fileO# 拼接命令# print(commandS)# # 查看命令# print(fileN)# # 查看文件名sunDir = [i for i in os.listdir(pathF) if os.path.isdir(i) ]# 找到该文件夹下面的子文件夹os.chdir(pathF+sunDir[0]+'/')# 将工作目录调整到分P文件夹下,包含视频的文件夹# 一般每一份缓存,各分P文件夹的名字不不相同# 但是各分P文件夹下保存视频的文件夹名字一般相同,为数字print(pathF+sunDir[0]+'/')# os.system('echo %cd%')# # 打印当前目录# ffmpeg -f concat -i N.txt -c copy D:/NetVideo/output.mp4# # 判断文件是否存在if not(os.path.exists(fileN)):if (os.path.exists(pathF+sunDir[0]+'/'+'video.m4s')):print("Get video.m4s !!!")os.system(commandS)else:print("No video.m4s !!!")handleP.append(pathF+sunDir[0]+'/')# continuecommandS = 'ffmpeg -loglevel quiet -f concat -i N.txt -c copy'+fileOlistN = os.listdir(pathF+sunDir[0]+'/')listN.remove('index.json')with open("N.txt",'w') as F:for i in listN:F.write('file '+i+'\n')os.system(commandS)os.remove('N.txt')os.rename(fileO, fileN)# 将视频文件重命名回实际文件名,包含中文os.rename(fileO, fileN)# 将视频文件重命名回实际文件名,包含中文print('Iter Cost: {}'.format(time.time() - trnT))os.rename(dirO,dirN)
# 将视频文件夹重命名为实际文件名,包含中文print(handleP)print('\nTotal Cost: {}\n\n\n\n'.format(time.time() - At))# import os
# os.chdir('E:/Android/data/tv.danmaku.bili/download/10590361/c_17482207/lua.flv720.bili2api.64/')
# listN = os.listdir()
# listN.remove('index.json')
# with open('tmp.txt','w') as F:
#     for i in listN:
#         F.write('file '+i+'\n');
# fileO = "D:/NetVideo/O.mp4"
# # -loglevel quiet
# # 13 Unsupervised Learning - Linear Methods
# commandS = "ffmpeg -loglevel quiet -f concat -i tmp.txt -c copy "+fileO
# os.system(commandS)
# os.remove('tmp.txt')

给两个参考文献:

使用 FFmpeg(bilibili视频m4s合成mp4)

使用 FFmpeg(bilibili视频blv合成mp4)

ffmpeg 取消控制台打印信息,不打印log日志


  1. 史上最详细!如何将B站缓存的m4s文件无损转换为mp4格式 ↩︎

  2. 超级详细!如何将B站缓存m4s文件无损转换为mp4格式 ↩︎

http://www.jsqmd.com/news/187772/

相关文章:

  • 2026玉溪婚纱摄影推荐,全玉溪主流商家星级综合排名(多维度权威测评) - 提酒换清欢
  • std::future超时功能落地C++26:3个你不能错过的实战技巧
  • JavaSE——封装
  • SegmentFault提问互动:以答疑形式传播HunyuanOCR价值
  • windows虚拟机宝塔设置网站本地域名
  • HunyuanOCR支持端到端文档问答?实测PDF内容交互能力
  • 揭秘C++负载均衡算法:如何在分布式环境中实现毫秒级响应
  • 轻量化OCR新选择:腾讯HunyuanOCR在Jupyter中的界面推理实践
  • UEVR经典作品 独家模组 (TOP级别)
  • 使用PyCharm开发HunyuanOCR插件时的环境配置建议
  • 【C++26重大更新】:std::future超时支持如何改变异步编程格局?
  • 如何利用单北斗GNSS实现水库变形监测效果提升?
  • Obsidian插件开发设想:本地OCR识别图片内文字
  • Kubernetes集群中部署HunyuanOCR实现高可用OCR服务
  • QSocketNotifier深度技术报告:架构解析、跨平台实现与高级应用范式
  • 腾讯混元OCR模型在复杂票据识别中的应用案例分享
  • 还在为论文查重爆表发愁?这7款AI工具实测,5分钟生成万字低AIGC率论文!
  • Rust能否完全取代C++?三大真实项目对比数据曝光(内存安全领域已悄然变天)
  • CSDN官网技术帖推荐:腾讯混元OCR在实际项目中的落地经验
  • vLLM加速版脚本优势明显:HunyuanOCR推理速度提升分析
  • C++网络编程兼容性难题:如何在Windows和Linux间实现无缝迁移?
  • Dify低代码平台连接HunyuanOCR实现智能文档处理工作流
  • 飞书文档增强功能:粘贴图片自动提取文字并插入正文
  • 夸克网盘直链下载助手与OCR结合?提取链接中的关键信息
  • 深度测评9个论文写作工具,一键生成论文工具助继续教育学生轻松完成毕业论文!
  • 批量图像处理性能测试:HunyuanOCR每秒处理多少张图?
  • 金山文档在线协作时能否实时OCR?技术可行性分析
  • 导师严选10个一键生成论文工具,本科生轻松搞定毕业论文!
  • C++ AIGC模型加载实战(从零到上线的完整路径)
  • 结合Three.js与HunyuanOCR构建三维场景中的文字识别系统?