python下载单个B站视频

下载B站单个视频

准备工作:

1.下载ffmpeg,pycharm自带的ffmpeg好像不能用,下载地址:https://github.com/BtbN/FFmpeg-Builds/releases
2.安装ffmpeg,解压即可
3.添加环境变量,将ffmpeg.exe所在路径添加到环境变量

win10安装HEVC补丁

参考:https://www.zhihu.com/tardis/zm/art/427863173?source_id=1005

1.获取audio和video地址

def get_url():
    url = 'https://www.bilibili.com/video/BV1zm4y1t7P7/'
    resp = requests.get(url)
    resp.close()
    # print(resp.text)
    title_obj = re.compile(r'<title data-vue-meta="true">(.*?)_哔哩哔哩_bilibili</title>')
    title = title_obj.search(resp.text).group(1)
    obj = re.compile(r'<script>window.__playinfo__=(.*?)</script>')
    data = obj.search(resp.text).group(1)
    data_json = json.loads(data)
    # pprint(data_json)
    audio_url = data_json['data']['dash']['audio'][0]['backupUrl'][0]
    video_url = data_json['data']['dash']['video'][0]['backupUrl'][0]
    return audio_url, video_url, title

2.下载audio和video

def download(audio_url, video_url):
    resp1 = requests.get(url=audio_url, headers=headers)
    resp1.close()
    with open('video/1', 'wb') as f1:
        f1.write(resp1.content)
    print('audio下载完成')
    resp2 = requests.get(url=video_url, headers=headers)
    resp2.close()
    with open('video/2', 'wb') as f2:
        f2.write(resp2.content)
    print('video下载完成')

3.合并audio和video

def merge(title):
    com = f'E:\\ffmpeg-master-latest-win64-gpl\\bin\\ffmpeg.exe -i "video/1" -i "video/2" -acodec copy -vcodec copy "video/{title}.mp4"'
    # print(com)
    os.system(com)
    os.remove('video/1')
    os.remove('video/2')

完整代码

import re
import requests
import json
from pprint import pprint
import os


headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                  'Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.43',
    'Referer': 'https://www.bilibili.com/video/BV1zm4y1t7P7/?vd_source=6ebafa29b438a17b55f878b8d296faea'
}


def merge(title):
    com = f'E:\\ffmpeg-master-latest-win64-gpl\\bin\\ffmpeg.exe -i "video/1" -i "video/2" -acodec copy -vcodec copy "video/{title}.mp4"'
    # print(com)
    os.system(com)
    os.remove('video/1')
    os.remove('video/2')



def download(audio_url, video_url):
    resp1 = requests.get(url=audio_url, headers=headers)
    resp1.close()
    with open('video/1', 'wb') as f1:
        f1.write(resp1.content)
    print('audio下载完成')
    resp2 = requests.get(url=video_url, headers=headers)
    resp2.close()
    with open('video/2', 'wb') as f2:
        f2.write(resp2.content)
    print('video下载完成')


def get_url():
    url = 'https://www.bilibili.com/video/BV1zm4y1t7P7/'
    resp = requests.get(url)
    resp.close()
    # print(resp.text)
    title_obj = re.compile(r'<title data-vue-meta="true">(.*?)_哔哩哔哩_bilibili</title>')
    title = title_obj.search(resp.text).group(1)
    obj = re.compile(r'<script>window.__playinfo__=(.*?)</script>')
    data = obj.search(resp.text).group(1)
    data_json = json.loads(data)
    # pprint(data_json)
    audio_url = data_json['data']['dash']['audio'][0]['backupUrl'][0]
    video_url = data_json['data']['dash']['video'][0]['backupUrl'][0]
    return audio_url, video_url, title


def main():
    au_url, vi_url, title = get_url()
    download(au_url, vi_url)
    merge(title)


if __name__ == '__main__':
    main()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值