Bilibili网站(B站)下载视频
为了能把视频放到不联网的电视中观看,需要先下载视频到电脑,通过U盘连接电脑观看。
下载准备:
电脑中安装python软件。安装后运行 ‘python –version’ 进行检查安装是否正常
通过python安装you-get 软件。安装后运行 ‘you-get –version’ 进行检查安装是否正常
pip3 install you-get
安装FFMpeg软件。安装后运行 ‘ffmpeg -version’ 进行检查安装是否正常
下载
在B站找到需要下载的视频连接,如 【500集全】美国中小学精选课程 的连接为 https://www.bilibili.com/video/BV1c7411Z78e
在批处理窗口运行you-get -i 命令查看所需视频有哪些可以选择的格式(清晰度)
you-get -i https://www.bilibili.com/video/BV1c7411Z78e
显示结果如下:
这里可以看到有高清视频源可以下载,对应参数为“dash-flv720”
创建批处理下载文件并进行下载
<!–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–>
下载后处理
下载后,每个视频包含3个文件,B站下载的文件中视频和音频被分开。
其中:
xml格式为弹幕,可以删除
*00*.mp4 为视频文件
*01*.mp4 为音频文件
- 通过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 协议 ,转载请注明出处!