本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理
B站是国内知名的视频弹幕网站,有最及时的动漫新番,ACG氛围,最有创意的Up主。站点中的视频数据分成了视频画面和音频数据。
今天带大家下载以及合并B站的视频。
import requests
import re # 正则表达式
import pprint
import json
import subprocess
python 3.6
pycharm
requests
re
json
subprocess
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'}
def send_request(url):
"""请求数据"""
response = requests.get(url=url, headers=headers)
return response
def get_video_data(html_data):
"""解析视频数据"""
# 提取视频的标题
title = re.findall('(.*?)', html_data)[0]
# print(title)
# 提取视频对应的json数据
json_data = re.findall('', html_data)[0]
# print(json_data) # json_data 字符串
json_data = json.loads(json_data)
pprint.pprint(json_data)
# 提取音频的url地址
audio_url = json_data['data']['dash']['audio'][0]['backupUrl'][0]
print('解析到的音频地址:', audio_url)
# 提取视频画面的url地址
video_url = json_data['data']['dash']['video'][0]['backupUrl'][0]
print('解析到的视频地址:', video_url)
video_data = [title, audio_url, video_url]
return video_data
def save_data(file_name, audio_url, video_url):
# 请求数据
print('正在请求音频数据')
audio_data = send_request(audio_url).content
print('正在请求视频数据')
video_data = send_request(video_url).content
with open(file_name + '.mp3', mode='wb') as f:
f.write(audio_data)
print('正在保存音频数据')
with open(file_name + '.mp4', mode='wb') as f:
f.write(video_data)
print('正在保存视频数据')
def merge_data(video_name):
"""数据的合并"""
print('视频合成开始:', video_name)
# ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac -strict experimental output.mp4
COMMAND = f'ffmpeg -i {video_name}.mp4 -i {video_name}.mp3 -c:v copy -c:a aac -strict experimental output.mp4'
subprocess.Popen(COMMAND, shell=True)
print('视频合成结束:', video_name)
html_data = send_request('https://www.bilibili.com/video/BV1Sa4y1H7cy').text
# print(html_data)
video_data = get_video_data(html_data)
save_data(video_data[0], video_data[1], video_data[2])
merge_data(video_data[0])