如何将b站视频从手机传输到电脑上

本文介绍了一种通过手机哔哩哔哩客户端缓存视频,然后使用ES文件浏览器的FTP功能配合自编写的Python程序,将m4s格式视频传输到电脑并转换为MP4的方法。涉及手机端软件配置、电脑端程序运行及FTP传输、ffmpeg视频转换等步骤。
摘要由CSDN通过智能技术生成

一、前言

有时候,我们想缓存下来b站上的一些视频,做一些剪辑什么的。

但是在电脑端,bilibili的网站没有提供视频缓存功能。而手机端的bilibili客户端可以缓存视频,但格式为m4s。

这就给我们提供一个思路:先在手机上哔哩哔哩客户端缓存好视频,再通过ES文件浏览器的ftp传输功能,将m4s文件传输给电脑,再将m4s转化为mp4格式。

二、实际操作

手机端利用现成的软件进行操作就行,电脑端使用我自己写的程序进行操作。

手机端需要的软件:哔哩哔哩客户端 , ES文件浏览器 

电脑端需要的软件:自写的传输工具

操作流程图:

详细操作流程:

1.打开哔哩哔哩客户端,缓存好视频

2.打开ES文件浏览器,打开“从PC访问”功能,记下这个ftp地址

       

3.手机打开WiFi热点,电脑连接上WiFi热点,以保证处于同一个局域网内

4.从百度云盘下载我写的软件(提取码:y1sv),解压后,打开auto/文件夹,打开ftp_address.txt,输入ftp的地址,保存。

5.双击auto/下的auto.exe,程序会自动传输手机哔哩哔哩客户端的缓存视频,等待传输完成即可。

如果当中程序不动,可以在程序运行界面中按下回车键进行刷新。

6.传输好的视频,会自动保存到auto/video目录下

三、电脑端程序源码

电脑端程序通过python编写,文件传输用ftp,m4s转mp4用ffmpeg.exe(可在我分享的网盘中下载)。

在下载好ffmpeg.exe到这个脚本的同一目录下,然后电脑与手机热点wifi连接后,手机端开启ES文件浏览器的“从PC访问”功能,再运行该python脚本就能进行视频传输了。

不过考虑到有些电脑不一定安装有python环境,我使用pyinstaller将python脚本转化为exe执行文件,使得程序在没有python环境上的windows下也能运行。

import os
import sys
import time
import json 
from ftplib import FTP

video_save_path = './video/' # 视频目录不能是中文
danmu_save_path = './弹幕/'

if not os.path.exists(danmu_save_path):
    os.makedirs(danmu_save_path)
if not os.path.exists(video_save_path):
    os.makedirs(video_save_path)

def FTP_Transport_Video(ftp_address):
    # 登录FTP    
    address = ftp_address.split(':')[1][2:]
    port = int(ftp_address.split(':')[-1][:4])
    
    ftp = FTP()
    ftp.connect(address, port)
    ftp.login(user='', passwd='')
    print(ftp.getwelcome())

    data = []
    ftp.cwd('Android/data/tv.danmaku.bili/download/')
    ftp.dir(data.append)

    print('检测到%d个缓存视频' % (len(data)))
    for idx, line in enumerate(data):
        second_dir = line.split(' ')[-1]
        second_dir = './' + second_dir + '/1'
        ftp.cwd(second_dir)
        
        # 读取视频名称
        file_handle = open('./entry.json', "wb")
        ftp.retrbinary("RETR entry.json", file_handle.write, 1024)
        file_handle.close()
        entry_json = open('entry.json', encoding='utf-8')
        data1 = json.load(entry_json)
        title = data1['title']
        print('正在传输第'+str(idx+1)+'个视频...')
        print('\t视频名称:'+title)
        
        # 保存弹幕
        file_handle = open(danmu_save_path+title+'.xml', "wb")
        ftp.retrbinary("RETR danmaku.xml", file_handle.write, 1024)
        file_handle.close()
        
        # 保存视频
        video_path = video_save_path + title + '.mp4'
        if os.path.exists('./video/temp.mp4'):
            os.remove('./video/temp.mp4')
        if os.path.exists(video_path):
            print('\t视频已存在')
            ftp.cwd('../../')
            continue
        file_handle = open('audio.m4s', "wb")
        ftp.retrbinary("RETR 80/audio.m4s", file_handle.write, 2048)
        file_handle.close()
        file_handle = open('video.m4s', "wb")
        ftp.retrbinary("RETR 80/video.m4s", file_handle.write, 2048)
        file_handle.close()
        command = 'ffmpeg.exe -i video.m4s -i audio.m4s -codec copy ./video/temp.mp4'
        os.system('\t'+command)
        os.rename('./video/temp.mp4', video_path)
        print('第'+str(idx+1)+'个视频传输完成!')
        
        ftp.cwd('../../')
    
    print('所有视频传输完成')
    ftp.quit()
    if os.path.exists('./audio.m4s'):
        os.remove('./audio.m4s')
    if os.path.exists('./video.m4s'):
        os.remove('./video.m4s')
    #if os.path.exists('./entry.json'):
    #    os.remove('./entry.json')

if __name__ == '__main__':
    if os.path.exists('./ftp_address.txt'):
        with open('ftp_address.txt', 'r') as f:
            ftp_address = f.readline()
            print('正在连接:', ftp_address)
            FTP_Transport_Video(ftp_address)
    else:
        print('未检测到ftp_address.txt')

 

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值