B站视频转换

1.作为B站资深用户,某一天突然发现一个问题,手机上从B站App缓存下来的视频只能在B站App上看,怎么办?

首先想到的是,直接在电脑上下载,有许多软件可以实现这一功能,或者弄一个爬虫来爬,不过这么爬视频对我没啥用,还是直接下吧。

于是使用IDM这个软件,然而IDM只能一个个下载,而且文件名都要重新弄,下载下来的文件还被弄成了分段式的,或者音视频分开了,批量下载也是不用想了,没办法,还是只能自己想办法。

2.考虑到手机上下载比较方便,于是干脆从手机上批量下载,再搬到电脑上处理

苹果的暂且不说,安卓上,B站的缓存文件一般存放在 \Android\data\tv.danmaku.bili\download 这样的路径下,照着这个路径应该就能找到,然后连跟数据线,直接把download里面所有文件搬到电脑上。

每一个文件夹下面是相应种类视频的分p:

3.但是现有的缓存文件看起来有些混乱,得整理一下:

里面文件存放的方式居然还有两种,一种是比较新的:



还有一种比较老的:


新的把音视频分开了,最里面的video.m4s 和 audio.m4s 两个文件就是我要的 ,看样子要把两个文件混流才行,而老的却是把视频分段了,直接拼起来就行了。

最简单粗暴的操作,考虑到格式工厂之类的音视频编辑软件,但是后缀名不对还识别不了,而且那么多的文件,一个个去操作实在愚蠢,于是考虑写个程序,让它自动去跑。

4.稍微写几行转换代码。(新的和老的所用代码稍微有些区别)

这里使用的环境为windows、python3.7,python请尽量保持一致或更新的版本

要实现这样的功能,python有一个现成的轮子,叫moviepy,不过这个库有许多问题,而且在拼接的时候速度极为缓慢,于是干脆直接用ffmpeg

没有ffmpeg的,直接去官网下载,或者打开 powershell,输入以下命令安装:

choco install ffmpeg

提示没有choco命令的,打开 powershell 复制以下命令安装choco,再安装ffmpeg:

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

上面所说的老视频用这个(修改一下路径就行了):

import os
import json
# from moviepy.editor import *# 待转换文件的路径,请修改为自己的
path = r"C:\待转换2"# 转换完毕后的存放路径,可以修改为需要的
save_path = r"C:\转换完毕"if __name__ == '__main__':# 需要转换的所有目录名与文件名all_title = []all_video = []# a:所在根目录; b:根目录下所有文件夹(以列表形式存在); c:根目录下所有文件(以列表形式存在)for k, (a, b, c) in enumerate(os.walk(path)):# 因为所有操作按顺序进行,所以一一对应e = []for i in c:if i == 'entry.json':title_path = os.path.join(a, i)all_title.append(title_path)elif os.path.splitext(i)[1] == '.blv':video_path = os.path.join(a, i)e.append(video_path)all_video.append(e)# 一个个打开对应路径文件for i, j in enumerate(all_title):with open(j, encoding='utf-8') as data:title_ = json.load(data)# 目录名title1 = title_["title"].replace(" ", "")# 视频名title2 = title_["page_data"]["part"].replace(" ", "")# 需要合成的同一个print(f"输出目录:{title1}")print(f"输出文件:{title2}")_path = f"{save_path}/{title1}"os.makedirs(_path, exist_ok=True)with open(f"{title2}.txt", "w", encoding='utf-8') as w:[w.write(f"file '{i}'\n") for i in all_video[i]]cmd = f'ffmpeg -f concat -safe 0 -i {title2}.txt -c copy {_path}/{title2}.mp4'os.system(cmd)print("\n", "*" * 15, f"已完成{i + 1}个文件", "*" * 15)

新的视频用这个:

import os
import json# 待转换文件的路径,请修改为自己的
path = r"D:\待转换"# 转换完毕后的存放路径,可以修改为需要的
save_path = r"D:\转换完毕"if __name__ == '__main__':# 需要转换的所有目录名与文件名all_title = []all_video = []all_audio = []# a:所在根目录; b:根目录下所有文件夹(以列表形式存在); c:根目录下所有文件(以列表形式存在)for k, (a, b, c) in enumerate(os.walk(path)):# 因为所有操作按顺序进行,所以一一对应for i in c:if i == 'entry.json':title_path = os.path.join(a, i)all_title.append(title_path)elif i == "video.m4s":video_path = os.path.join(a, i)all_video.append(video_path)elif i == "audio.m4s":audio_path = os.path.join(a, i)all_audio.append(audio_path)# 一个个打开对应路径文件for i, j in enumerate(all_title):with open(j, encoding='utf-8') as data:title_ = json.load(data)# 目录名title1 = title_["title"].replace(" ", "")# 视频名title2 = title_["page_data"]["part"].replace(" ", "")print(f"输出目录:{title1}")print(f"输出文件:{title2}")_path = f"{save_path}/{title1}"os.makedirs(_path, exist_ok=True)cmd = f'ffmpeg -i {all_video[i]} -i {all_audio[i]} {_path}/{title2}.mp4'# python调用Shell脚本执行cmd命令os.system(cmd)print("\n", "*" * 15, f"已完成{i + 1}个文件", "*" * 15)

ps:老视频只是拼接一下,速度会非常的快,而新的视频需要音视频混流,所以速度比较慢,视电脑配置而定,像我的辣鸡电脑,40G的视频要跑上十几个钟头,要加快速度的话,可以考虑使用多线程。

把手机上B站App缓存的视频转换为正常的mp4格式视频相关推荐

  1. 怎样将mpg格式的视频文件转换成mp4格式

    在网络上下载一个MPG格式,想要转换成MP4格式,可用什么软件?mpg转mp4格式转换器是一款专门转换各种手机或移动设备的格式转换器,为什么转换MP4格式?因为MP4格式目前除了在网络的一些播放器上应 ...

  2. FFMPEG采集摄像头图像SDL渲染+MP4格式视频编码

    FFMPEG采集摄像头图像SDL渲染+MP4格式视频编码 FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.采用LGPL或GPL许可证.它提供了录制.转换以及流化音 ...

  3. m3u8, flv, mp4格式视频demo源码分享

    <!DOCTYPE html> <html><head><meta charset="utf-8"><title>m3u ...

  4. html嵌入视频mp4视频无法播放,html中嵌入mp4格式视频无法播放

    我们在制作网页的时候经常会在网页中添加mp4格式的视频,但是我们会发现html中嵌入mp4格式视频无法播放,那么要怎么办呢?下面我们就一起去看看解决方法吧. 下面的这段代码是在我的test.html中 ...

  5. 如何快速且不失真剪切与合并视频?如何将视频快速转成MP4格式?无需渲染!视频秒转MP4,剪辑合并!

    视频剪切或合并后变模糊(变不清晰)怎么办?视频剪切或合并速度很慢怎么办?如何快速且不失真剪切与合并视频?如何将视频快速转成MP4格式? 工具下载: 小丸工具箱下载及如何压制视频:https://blo ...

  6. 电脑mp4格式视频打不开怎么解决?

    如今视频在我们的日常生活中随处可见.不少小伙伴越来越喜欢通过视频来分享自己生活中发生的趣事.而使用Mp4视频压缩格式.无疑用于存储音视频文档是一个比较常用的格式,因为这种格式基本可以在任何电子设备上播 ...

  7. flv视频怎么转换成mp4格式的3种方法分享

    flv视频怎么转换成mp4格式?因为flv视频格式我们使用的很少,兼容性也不如mp4.虽然flv视频文件体积小:便于传输.共享:但是flv视频质量不好:不被所有播放器支持.flv视频格式是一种新的视频 ...

  8. 如何在EDUIS中导出ETL字幕模板_教大家Edius如何设置导出mp4格式视频

    近日有关于Edius如何设置导出mp4格式视频的问题受到了很多网友们的关注,大多数网友都想要知道Edius如何设置导出mp4格式视频的具体情况,那么关于到Edius如何设置导出mp4格式视频的相关信息 ...

  9. flv视频怎么转换成mp4格式?

    现在的短视频发展真的是越来越完善,很多人都靠刷视频来打发时间,小编也是这样的,没事刷一刷视频中的影视剧,那些带有讲解的视频,会让我快速看懂内容,比起自己去思考,感觉省了好多事,并且很有深度.这些讲解的 ...

  10. 如何利用QQ影音把视频转码为MP4格式

    利用QQ影音把视频转码为MP4格式 文章目录 利用QQ影音把视频转码为MP4格式 1.电脑端安装QQ影音播放器,打开"QQ影音",点击右下角的"影音工具箱",选 ...

最新文章

  1. 【分块】#6278. 数列分块入门 2 (区间修改、查询权值c在区间中的排名)
  2. Powerdesigner 在线打开 不用安装客户端 访问pdm,ldm文件
  3. 【OSGI】Error osgi xx Invalid value for DynamicImport-Package dynamic.import.pack
  4. multisim安装后无法连接数据库_Kepserver连接Mysql教程(一)MySQL5.5数据库安装
  5. 论文润色软件Stylewriter,whitesmoke,1check使用
  6. vue+elementui 字体改用思源黑体
  7. 解决: 小程序涉及提供天气查询等相关服务,请选择:工具-天气类目。微信小程序修改类目
  8. 计算机二级证能落户嘛,有哪些二级技师证可以办理落户深圳 - 入户吐槽网
  9. 泛微O A系统怎么获取服务器地址,泛微协同商务系统(Ecology)_系统底层包开发指南...
  10. 直播改革:关闭10家平台监管3万主播
  11. css最后一行省略号,CSS怎么实现单行、多行文本溢出显示省略号
  12. 微信小程序数据统计和错误统计的实现
  13. 铱金属配合物Ir(dpbpa)2bphen+PF6-|Ir(dtbpa)3|Ir(dtq)2bpy+PF6-的合成
  14. while循环因为内部使用ssh命令而导致不能循环文件的所有行
  15. Codevs P1814 最长链
  16. html游戏让目标人物移动,如何用html5编写鼠标事件与游戏人物移动
  17. OpenGauss的内存优化表MOT
  18. 1-3分钟教你如何开通微信支付0.2%费率,适用于公众号小程序和收款码
  19. python模糊神经网络预测_MATLAB模糊神经网络的预测算法--预测水质
  20. 现货白银走势图哪里看?

热门文章

  1. python数字字母识别_字符图像识别——数字字母混合
  2. 数据集成-2-xml
  3. python画矢量图_用Python把图做的好看点:用Pyecharts做个交互地图(三)-导出矢量图...
  4. 微信小程序下拉刷新功能
  5. Kafka集群搭建配置
  6. 类型转化异常 Java Object转 int
  7. 正则表达式最好的书籍_正则表达式的最佳做法
  8. 中级网络工程师是什么?主要是考什么,有什么用?
  9. 域名前缀和后缀html,域名常用前缀和后缀
  10. Windows图片查看器不见了注册表可以帮你修复