将哔哩哔哩手机端缓存视频导出为正常mp4视频.

因为偶然间发现之前关注的视频被下架了. 不过幸好手机端有缓存. 但是手机看视频哪有电脑看着舒服呢? 所以想把视频导出到电脑上观看, 结果发现哔哩哔哩对视频进行了处理. 将视频,弹幕,音轨分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()
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值