Bilibili网站(B站)下载视频

为了能把视频放到不联网的电视中观看,需要先下载视频到电脑,通过U盘连接电脑观看。

下载准备:

  1. 电脑中安装python软件。安装后运行 ‘python –version’ 进行检查安装是否正常

  2. 通过python安装you-get 软件。安装后运行 ‘you-get –version’ 进行检查安装是否正常

    pip3 install you-get
  3. 安装FFMpeg软件。安装后运行 ‘ffmpeg -version’ 进行检查安装是否正常

下载

  1. 在B站找到需要下载的视频连接,如 【500集全】美国中小学精选课程 的连接为 https://www.bilibili.com/video/BV1c7411Z78e

  2. 在批处理窗口运行you-get -i 命令查看所需视频有哪些可以选择的格式(清晰度)

    you-get -i https://www.bilibili.com/video/BV1c7411Z78e

    显示结果如下:

​ 这里可以看到有高清视频源可以下载,对应参数为“dash-flv720”

  1. 创建批处理下载文件并进行下载

    <!–hexoPostRenderEscape:

    @echo off

set KEY=BV1c7411Z78e
set RESOLUTION="–format=dash-flv720"

mkdir %KEY%
pushd %KEY%

you-get -o . https://www.bilibili.com/video/%KEY%?p=1 -l %RESOLUTION%

pause:hexoPostRenderEscape–>

下载后处理

  1. 下载后,每个视频包含3个文件,B站下载的文件中视频和音频被分开。

​ 其中:

​ xml格式为弹幕,可以删除

​ *00*.mp4 为视频文件

​ *01*.mp4 为音频文件

  1. 通过ffmpeg命令合并视频文件:
ffmpeg -i "【500集全】美国中小学精选课程 (P1. 【001】自然科学 Parts of Plants)[01].mp4" -i "【500集全】美国中小学精选课程 (P1. 【001】自然科学 Parts of Plants)[00].mp4" -c copy "【500集全】美国中小学精选课程 (P1. 【001】自然科学 Parts of Plants).mp4"

​ 其语法为:

ffmpeg -i audio.mp4 -i video.mp4 -c copy output.mp4

​ 合并后结果为:

下载后批量处理

下载后,通过下面的python脚本来删除弹幕、合并文件

import os, subprocess
###  bilibili下载的视频会自动分离视频和音频,通过该脚本合并视频及音频,合并后删除原视频、音频

def merge_video_audio(video_path, audio_path, out_path):
    cmd_str = f'ffmpeg -i "{video_path}" -i "{audio_path}" -c copy "{out_path}" -y'
    subprocess.run(cmd_str, encoding="utf-8" , shell=True)
    # print(cmd_str)
    print('视频转化完成!!!')

def handle_bilibili_download_merge(basefloder):
    # 循环遍历文件夹
    listfiles = os.listdir(basefloder)
    for item in listfiles:
        filename = str(item)
        if filename.find("[00].mp4") != -1:
            #print("find :" + filename)
            # 找到[00].mp4 及[01].mp4的项
            corresponding = filename.replace("[00]","[01]")

            if corresponding in listfiles:
                print("find one" + corresponding)
                output = filename.replace("[00]","")
                # 合并
                video_path = os.path.join(basefloder, filename)
                audio_path = os.path.join(basefloder, corresponding)
                out_path = os.path.join(basefloder, output)
                merge_video_audio(video_path, audio_path, out_path)
                os.remove(video_path)
                os.remove(audio_path)
        elif item.find("cmt.xml") != -1:
            #print("------------delete :" +   filename)
            file_path = os.path.join(basefloder, filename)
            os.remove(file_path)

if __name__ == "__main__":
    BASE_FOLDER="C:\\Users\\ZZ\\Desktop\\download"
    handle_bilibili_download_merge(BASE_FOLDER)

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!