主要参考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格式 ↩︎

Python+FFmpeg提取哔哩哔哩安卓缓存相关推荐

  1. 哔哩哔哩视频合并 B站缓存视频合并 安卓版 音视频合并 基于ffmpeg

    说明 此软件是为了帮助网友合并哔哩哔哩缓存视频,Android上将bilibili缓存视频合并导出为mp4,你可以将它理解为一个专用的格式工厂,并不涉及破解相关内容,仅仅用于学习技术交流,严禁用于商业 ...

  2. python爬取哔哩哔哩视频_荐爬取哔哩哔哩中的cosplay小视频

    爬取哔哩哔哩小视频 前言:想必大家都对小视频感兴趣吧,今天的爬虫的内容为将哔哩哔哩中的视频下载到本地,今天爬取的网站为 URL : https://vc.bilibili.com/p/eden/all ...

  3. Python爬取哔哩哔哩实时直播弹幕

    用Python爬取哔哩哔哩直播弹幕,关键在于找到哔哩哔哩网站的一个POST网址,和应该POST的数据.代码不长,十分简单.关键在于浏览器开发者工具的使用.希望对于新入门的萌新有一定的借鉴意义. 1.找 ...

  4. 【爬虫+数据清洗+可视化分析】用Python分析哔哩哔哩“阳了“的评论数据

    目录 一.背景介绍 二.爬虫代码 爬虫部分不作讲解. 三.可视化代码 3.1 读取数据 3.2 数据清洗 3.3 可视化 3.3.1 IP属地分析-柱形图 3.3.2 评论时间分析-折线图 3.3.3 ...

  5. 安卓上哔哩哔哩视频的导出

    哔哩哔哩安卓app版本:6.50.0(release-b7000181) 步骤: 1.将手机和电脑用数据线连接,文件传输模式. 2.打开手机文件系统. 3.点击"Android文件夹&quo ...

  6. 菜鸟弟弟从零开始的爬取Bilibili弹幕的Python爬虫教程-哔哩哔哩 - ( ゜- ゜)つロ 干杯~

    从零开始的爬取Bilibili弹幕的Python爬虫教程 或许可以作为一个爬虫小白的练手的demo? 还是先看看什么是爬虫吧!(还有Bilibili! ) 网络爬虫: 网络爬虫(又称为网页蜘蛛,网络机 ...

  7. 利用python批量合并手机哔哩哔哩下载的视频各分段

    从手机哔哩哔哩上下载的一个电视剧,分为很多P,每一P里面又被分成了如下几个段的blv文件(本质上是flv格式),利用Python+ffmpeg,将这个系列的视频每一P都合并成单个的文件,只要输入这个视 ...

  8. Python爬取哔哩哔哩(bilibili)视频

    本篇文章主要给大家讲解下如实使用python 爬取哔哩哔哩中的视频,首先我是一名大数据开发工程师,爬虫只是我的一个业余爱好,喜欢爬虫的小伙伴可以一起交流.好了多了就不多说了喜欢的朋有可以收藏,转发请复 ...

  9. 【Python】通过哔哩哔哩弹幕获取发送者id

    哔哩哔哩弹幕逆向 用途 查找bilibili.com中弹幕的发送者 如何使用 终端中输入: python bili_reverse.py 然后会提示让你输入BV号,你输入弹幕所在的BV号,开头带不带B ...

  10. python百度云链接哔哩哔哩弹幕网_Python爬取哔哩哔哩实时直播弹幕

    Python爬取哔哩哔哩实时直播弹幕 Python爬取哔哩哔哩实时直播弹幕 用Python爬取哔哩哔哩直播弹幕,关键在于找到哔哩哔哩网站的一个POST网址,和应该POST的数据.代码不长,十分简单.关 ...

最新文章

  1. PLM的关键点—实施篇
  2. 用原生 js jquery 实现知乎收起答案功能
  3. python开发需要掌握哪些知识-学习Python应该掌握哪些知识点?
  4. 全球与中国光电通信芯片市场数据专项调研及竞争格局分析报告2022-2028年版
  5. lua的面向对象编程,封装,继承,多态的实现
  6. 测试用例设计方法_黑盒测试——测试用例设计方法
  7. 石头剪刀布 -2013编程之美全国测试赛 每日一练
  8. linux安装tomcat后启动报错Cannot find ./catalina.sh的解决方法
  9. Linux开发_最全在Ubnutu环境下为你的程序设置快捷启动项和启动时管理员权限
  10. Unity第一人称可视化传送门制作
  11. 股票交易软件接口编程语言
  12. 最全可编辑世界地图中国地图素材
  13. CardView-卡片布局
  14. gitlab推送企业微信几种方式汇总
  15. 用友ERP-供应链1-模块及价值
  16. python中keys是什么意思_python中的key是什么意思
  17. 计算机按键去抖动的方式,机械按键如何去处理按键抖动的问题
  18. 小新pro13睡眠后无法唤醒_东芝笔记本睡眠后无法唤醒怎么办
  19. 微信:签名不对,请检查签名是否与开放平台上填写的一致
  20. surface pro3 禁用触屏方法

热门文章

  1. android xutils 教程,Android xUtils更新到3.0后的基本使用规则详解
  2. 蓝海灵豚医疗器械信息管理系统B/S
  3. android 投影pc,手机高清投影到PC方案
  4. MFC新建Access数据库和表(vs2015+Access2016)
  5. 行为树 --- [3] BehaviorTree.CPP在Windows下的使用(基于VSCode)
  6. 低代码平台上的出入库管理
  7. jlink 与 swd 接口定义
  8. 斐讯K2刷华硕固件+全套工具
  9. inSSIDer使用方法
  10. 十进制进制法_进制转换方法(进制转换方法的口诀)