因为偶然间发现之前关注的视频被下架了. 不过幸好手机端有缓存. 但是手机看视频哪有电脑看着舒服呢? 所以想把视频导出到电脑上观看, 结果发现哔哩哔哩对视频进行了处理. 将视频,弹幕,音轨分3个文件储存,一直打开文件夹最后会看到video(视频),audio(音频)两个m4s文件,以视频方式打开video只会有视频,没有声音,打开audio只有声音没有视频(T_T).
所以, 制作了这个小工具. 将视频音频合二为一. 仅供参考.
更新: 添加exe程序, 方便不会代码的小伙伴们使用.
百度网盘链接:https://pan.baidu.com/s/1pGZ99b_SHz25C35iMfdzpQ
提取码:17wm
使用方法:
1. 请将手机中bilibili缓存文件夹拷贝到folder文件夹. 方法如下:
(1).打开手机“文件管理”
(2).在目录中找到Android文件夹(一般打开文件管理后就看得到这个文件夹,部分机型位于“0”文件夹中)
(3).打开data文件夹
(4).找到“tv.danmaku.bili”
(5).里面的download中可以找到下载视频的av号.
(6).将这个文件夹拷贝到folder文件夹.
2. 运行export_video.exe (源码在export_video.py 中)
3. 等待程序执行结束.
源码如下:
#!usr/bin/env python3
# -*- encoding:utf-8 -*-
import os
import json
import subprocess
# 读取文件夹内的json文件, 获取文件名称,当前章节
def get_video_information(json_path):
data1 = json.load(open(json_path, 'r', encoding='utf-8'))
# print('title: ', data1['title'])
title = data1['title']
# print("page_data: ", data1['page_data']['part'])
page_data = data1['page_data']['part']
return title, page_data
def get_file_path(file_path='folder'):
"""
需要的文件类型: entry.json
:return:
"""
file_list = []
if os.path.exists(file_path):
for root, dirs, files in os.walk(file_path):
if 'index.json' in files:
file_list.append(root) # root为需要转换的地址
# print(file_list)
return file_list
else:
print('请检查“folder”文件夹是否存在。并确保要转换的文件夹放置在 folder 文件夹下。')
return False
def video_add_mp3(file_name, mp3_file, report_name="1"):
"""
视频添加音频
:param file_name: 传入视频文件的路径
:param mp3_file: 传入音频文件的路径
:param report_name: 导出视频文件名/路径
:return: True / False
"""
report_name = report_name if '.' in report_name else report_name + '.mp4'
try:
subprocess.call('ffmpeg -i ' + file_name
+ ' -i ' + mp3_file + ' -strict -2 -f mp4 '
+ report_name, shell=True)
return True
except:
return False
def create_video():
file_list = get_file_path()
if file_list:
# 获取文件夹正确名称, 名称在上级目录的entry.json中
for f in file_list:
f_path = ''
a = f.split('\\')[:-1]
for _path in a:
f_path = os.path.join(f_path, _path)
f_path = os.path.join(f_path, "entry.json")
title, page_data = get_video_information(f_path)
# 创建文件夹
title = os.path.join('export', title)
os.makedirs(title, exist_ok=True)
# 拼接视频文件
video_add_mp3(os.path.join(f, 'video.m4s'), os.path.join(f, 'audio.m4s'),
os.path.join(title, page_data + '.mp4'))
if __name__ == '__main__':
create_video()