python + ffmpeg 将某站的缓存视频文件批量转换为MP4格式
这是一篇很无聊的文章,之所以写它是因为这周还没写博客,但是好像没啥可写的,刚好今天突发奇想,想要把某站的APP缓存视频文件转化为mp4 格式,方便在电脑上看,方法很简答,很快就做完了,所以,又一篇水文诞生了,罪过,罪过。
水文警告!水文警告!这是一篇毫无营养的水文!
一、题外话
话说某站可真是个好地方,原本我只是在上面看看动漫,看看别人做的鬼畜视频而已。但最近我发现上面有好多学习的课程,全部免费无广告,真心不错,对于热爱学习的我来说,这里简直就是天堂。
二、准备工作
1. 安装 ffmpeg
请参考本人另外一篇文章:https://blog.csdn.net/qq_38863413/article/details/105017775
2. 安装ffmpy
pip install ffmpy
三、分析缓存视频的目录结构
首先查看目录的结构:
这里我多说几句,某站的缓存视频的文件根目录可以在app中查看你的缓存目录信息,我用的是android 机器,我的位置是:/Android/data/tv.danmaku.bili/download ,我选取了我缓存的一个视频根目录: 76426972 。 目录的结构如上图所示:
首先第一层子目录是章节号,然后每一章节目录里面有一个文件夹,我们暂时称它为 av_path 吧,因为有audio.m4s 和 video.m4s 。通过分析之后我得知 danmaku.xml 貌似是弹幕文件,entry.json 中存储了视频的章节信息,名称等信息。这可以为转化后的视频命名,不错不错,省事了。
看一下 entry.json 都保存了什么,将其内容复制到 浏览器控制台查看一下。
信息很全面,可以使用 entry.page_data.part 为输出视频命名。
编写代码
from ffmpy import FFmpeg
import os
import json
# 缓存视频的根目录
root_path="/home/qianqianjun/视频/78693479"
av_path="64"
# 视频输出的目录
output_path="/home/qianqianjun/视频/Tensorflow2.0教程"
os.makedirs(output_path,exist_ok=True)
chapters=os.listdir(root_path)
for chapter in chapters:
# 获取缓存视频文件目录
audio_path=os.path.join(root_path, chapter, av_path, "audio.m4s")
video_path=os.path.join(root_path, chapter, av_path, "video.m4s")
# 获取输出视频名称
entry_path=os.path.join(root_path, chapter, "entry.json")
with open(entry_path, encoding="utf-8") as f:
entry=json.load(f)
name=entry['page_data']['part']
output=os.path.join(output_path,"{}.mp4".format(name))
if os.path.exists(output):
continue
# 使用ffmpeg 合并视频和音频
translator=FFmpeg(
inputs={
video_path:None,
audio_path:None
},
outputs={
output:'-c:v copy -strict experimental'
}
)
translator.run()
print("视频 {}.mp4 转换成功".format(name))
# 这里仅演示转换一个视频,批量转换需要删除下面的一行。
exit(0)
转换成功了,视频可播放:
代码没啥可说的,就这样吧,都说了这是一篇水文了嘛……
上一篇: 基于FFmpeg的封装格式MP4(TS)
下一篇: Appium自动化测试踩坑记录