python 下载 b站视频 和音频

video_bvid:在这里插入图片描述

import os
import requests
import json
import re
from bs4 import BeautifulSoup
import subprocess
# from detail_video import video_bvid# video_bvid 是一个从外部得到的单个视频ID
video_bvid = 'BV1cx421Q7ve'class BilibiliVideoAudio:def __init__(self, bvid):"""初始化方法,接收一个bvid作为视频的唯一标识符。"""self.bvid = bvid# 设置请求头,用于模拟浏览器访问Bilibili网站self.headers = {"referer": "https://search.bilibili.com/all?keyword=%E4%B8%BB%E6%92%AD%E8%AF%B4%E8%81%94%E6%92%AD&from_source=webtop_search&spm_id_from=333.1007&search_source=5&page=4&o=90","origin": "https://search.bilibili.com",'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0','Accept-Encoding': 'gzip, deflate, br'}def get_video_audio(self):"""获取视频和音频的链接以及视频标题。"""# 构造视频链接并发送请求获取页面内容url = f'https://www.bilibili.com/video/{self.bvid}/?spm_id_from=333.337.search-card.all.click&vd_source=14378ecd144bed421affe1fe0ddd8981'content = requests.get(url, headers=self.headers).content.decode('utf-8')# 使用BeautifulSoup解析HTML内容soup = BeautifulSoup(content, 'html.parser')# 获取视频标题meta_tag = soup.head.find('meta', attrs={'name': 'title'})title = meta_tag['content']# 获取视频和音频链接的正则表达式pattern = r'window\.__playinfo__=({.*?})\s*</script>'# 提取并解析JSON数据json_data = re.findall(pattern, content)[0]data = json.loads(json_data)# 提取视频和音频的基础URLvideo_url = data['data']['dash']['video'][0]['base_url']audio_url = data['data']['dash']['audio'][0]['base_url']# 返回包含标题、视频URL和音频URL的字典return {'title': title,'video_url': video_url,'audio_url': audio_url}def download_video_audio(self, url, filename):"""下载视频或音频文件。"""# 对文件名进行清理,去除不合规字符filename = self.sanitize_filename(filename)try:# 发送请求下载文件内容resp = requests.get(url, headers=self.headers).content# 构造下载路径download_path = os.path.join('D:\\video', filename)# 将文件内容写入到指定路径with open(download_path, mode='wb') as file:file.write(resp)# 打印下载完成信息print("{:*^30}".format(f"下载完成:{filename}"))except Exception as e:# 打印异常信息print(e)def sanitize_filename(self, filename):"""清理文件名中的不合规字符。"""# 定义不合规字符的正则表达式invalid_chars_regex = r'[\"*<>?\\|/:,]'# 替换不合规字符为空格sanitized_filename = re.sub(invalid_chars_regex, ' ', filename)return sanitized_filenamedef merge_video_audio(self, video_path, audio_path, output_path):"""使用ffmpeg来合并视频和音频。"""try:# 构造ffmpeg命令行参数command = ['ffmpeg','-y',  # 覆盖输出文件如果它已经存在'-i', video_path,  # 输入视频路径'-i', audio_path,  # 输入音频路径'-c', 'copy',  # 复制原始数据,不进行转码output_path  # 输出视频路径]# 执行ffmpeg命令subprocess.run(command, check=True)# 打印合并完成信息print(f"视频和音频合并完成:{output_path}")except subprocess.CalledProcessError as e:# 打印合并失败信息print(f"合并失败: {e}")def main():try:# 只处理一个 bvid(Bilibili 视频的唯一标识符)bilibili = BilibiliVideoAudio(video_bvid)  # 创建一个Bilibili视频音频处理对象,传入视频bvidvideo_audio_info = bilibili.get_video_audio()  # 获取视频和音频的信息# 从返回的信息中提取标题、视频URL和音频URLtitle = video_audio_info['title']video_url = video_audio_info['video_url']audio_url = video_audio_info['audio_url']# 定义处理后的视频存放路径processed_videos_path = 'D:\\processed_videos'# 如果该路径不存在,则创建该路径if not os.path.exists(processed_videos_path):os.makedirs(processed_videos_path)# 构造视频文件名、音频文件名和输出文件名video_filename = f"{title}.mp4"audio_filename = f"{title}.mp3"output_filename = f"{title} - combined.mp4"# 构造视频文件、音频文件和输出文件的完整路径video_file_path = os.path.join('D:\\video', video_filename)audio_file_path = os.path.join('D:\\video', audio_filename)output_file_path = os.path.join(processed_videos_path, output_filename)# 下载视频和音频到指定位置bilibili.download_video_audio(video_url, video_filename)  # 下载视频bilibili.download_video_audio(audio_url, audio_filename)  # 下载音频# 合并下载的视频和音频文件到指定输出路径bilibili.merge_video_audio(video_file_path, audio_file_path, output_file_path)# 可选:合并后删除单独的视频和音频文件# os.remove(video_file_path)# os.remove(audio_file_path)except Exception as ex:# 捕获并打印处理视频/音频时发生的异常print(f"处理视频/音频 {video_bvid} 失败: {ex}")main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/62703.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

以太网链路详情

文章目录 1、交换机1、常见的概念1、冲突域2、广播域3、以太网卡1、以太网卡帧 4、mac地址1、mac地址表示2、mac地址分类3、mac地址转换为二进制 2、交换机的工作原理1、mac地址表2、交换机三种数据帧处理行为3、为什么会泛洪4、转发5、丢弃 3、mac表怎么获得4、同网段数据通信…

Shell编程 脚本的运行方式与注释

目录 shell脚本的运行方式 1. 路径运行 2.bash或sh加脚本运行 ​编辑 3.source在加脚本路径运行 shell脚本注释 单行注释 多行注释 shell脚本的运行方式 我们在/usr/etc/demo01目录下新建了一个脚本 a.sh &#xff0c;脚本内容是要求输出数字1&#xff0c;怎么运行呢 1…

智算网络中Scale-out和Scale-up网络的技术原理

智算网络中Scale-out网络和Scale-up网络的本质区别是什么&#xff1f; 一、什么是智算中心的Scale-out网络和Scale-up网络 数据中心网络总体上可分为两大类&#xff1a;通算网络和智算网络。通算网络主要用于支持传统的计算任务和应用&#xff0c;如企业的IT系统、网站托管、电…

HCIA笔记7--OSPF协议入门

文章目录 0. 路由分类1. OSPF介绍1.1 概念1.2 报文类型 2. 邻接关系的建立2.1 邻居关系的建立2.2 邻接关系的形成2.3 ospf状态机 3. DR与BDR3.1 为什么要有DR和BDR&#xff1f;3.2 DR和BDR的选举原则 4. ospf的配置4.1 内部优先级 5. 问题5.1 三层环路如何解决&#xff1f; Ref…

mysql排序问题

mysql 建数据库时&#xff0c;需要指定 字符集 和 排序规则 建表时&#xff0c;也可以指定 也可以指定具体的字段 安照下面的sql顺序执行插入&#xff0c;它们的排序是什么样的&#xff1f; INSERT into test_sort (uid,create_time) VALUE (d,now()) INSERT into test_sort (u…

vulhub复现CVE-2021-44228log4j漏洞

目录 一&#xff1a;漏洞概述 二&#xff1a;漏洞原理 三&#xff1a;漏洞利用 lookup功能&#xff1a; JNDI解析器&#xff1a; ldap服务&#xff1a; RMI&#xff1a; 四&#xff1a;漏洞复现 4.1靶场 4.2dnslog测试 4.3部署jndi-injection-exploit 4.4打开监听端口 4.5触发请…

ip地址获取失败啥意思?ip地址获取失败怎么回事

在日常的网络使用中&#xff0c;我们时常依赖于稳定的IP地址来确保数据的顺畅传输和设备的正常识别。然而&#xff0c;有时我们会遇到“IP地址获取失败”的困扰&#xff0c;这不仅阻碍了我们的网络访问&#xff0c;还可能带来一系列的网络连接问题。那么&#xff0c;IP地址获取…

OpenGL ES详解——多个纹理实现混叠显示

目录 一、获取图片纹理数据 二、着色器编写 1. 顶点着色器 2. 片元着色器 三、绑定和绘制纹理 1. 绑定纹理 2. 绘制纹理 四、源码下载 一、获取图片纹理数据 获取图片纹理数据代码如下&#xff1a; //获取图片1纹理数据 mTextureId loadTexture(mContext, R.mipmap.…

十一、容器化 vs 虚拟化-Docker

文章目录 前言一、Docker 介绍1. 简介2. 应用场景3. 特点4. Docker和虚拟机之间的区别5. 解决痛点1. 解决依赖兼容2. 解决操作系统环境差异3. 小结 二、Docker 架构三、工作流程五、Docker 核心组件及其工作机制1. Docker 客户端&#xff08;Docker Client&#xff09;2. Docke…

linux学习笔记01 基础命令

目录 创建 touch 创建文件 &#xff08;创建但是不打开&#xff09; vi / vim 创建文件 (创建一个文件并打开) mkdir 创建文件夹 切换目录 cd 查看 pwd 查看当前目录完整路径 ls 查看目录信息 dir 查看目录信息 ll 表示查看目标目录下的信息 ls -a 查看当前目录下的…

【深度学习】深刻理解多模态模型CLIP

CLIP&#xff08;Contrastive Language-Image Pretraining&#xff09; 是由 OpenAI 提出的一个多模态模型&#xff0c;旨在学习视觉和语言的联合表示&#xff0c;能够通过图像和文本之间的对比学习来实现图像和文本之间的紧密联系。CLIP 模型可以通过自然语言描述理解和处理图…

mysql时间戳格式化yyyy-mm-dd

格式化到 年月日 # 将时间换成列名就行&#xff1b;当前是秒级时间戳&#xff0c;如果是毫秒的 / 1000即可 # SELECT FROM_UNIXTIME(1602668106666.777888999 / 1000,%Y-%m-%d) AS a; # SELECT FROM_UNIXTIME(列名 / 1000,%Y-%m-%d) AS a; SELECT FROM_UNIXTIME(1602668106.666…

PDFMathTranslate,PDF多语言翻译,批量处理,学术论文,双语对照(WIN/MAC)

分享一个非常实用的PDF文档翻译项目——PDFMathTranslate。作为一个经常逛GitHub的开发者&#xff0c;我总喜欢翻看各种项目附带的论文&#xff0c;虽然大多时候是瞎研究&#xff0c;但却乐在其中。该项目能够完美保留公式、图表、目录和注释&#xff0c;对于需要阅读外文文献的…

爬虫基础之代理的基本原理

在做爬虫的过程中经常会遇到一种情况&#xff0c;就是爬虫最初是正常运行、正常抓取数据的&#xff0c;一切看起来都是那么美好&#xff0c;然而一杯茶的工夫就出现了错误&#xff0c;例如 403 Forbidden&#xff0c;这时打开网页一看&#xff0c;可能会看到“您的IP访问频率太…

鲲鹏麒麟安装Kafka-v1.1.1

因项目需要在鲲鹏麒麟服务器上安装Kafka v1.1.1&#xff0c;因此这里将安装配置过程记录下来。 环境说明 # 查看系统相关详细信息 [roottest kafka_2.12-1.1.1]# uname -a Linux test.novalocal 4.19.148 #1 SMP Mon Oct 5 22:04:46 EDT 2020 aarch64 aarch64 aarch64 GNU/Li…

群控系统服务端开发模式-应用开发-登录退出发送邮件

一、登录成功发送邮件 在根目录下app文件夹下controller文件夹下common文件夹下&#xff0c;修改Login.php&#xff0c;代码如下 <?php /*** 登录退出操作* User: 龙哥三年风水* Date: 2024/10/29* Time: 15:53*/ namespace app\controller\common; use app\controller\Em…

[游戏开发] Unity中使用FlatBuffer

什么是FlatBuffer 官网&#xff1a; GitHub - google/flatbuffers: FlatBuffers: Memory Efficient Serialization LibraryFlatBuffers: Memory Efficient Serialization Library - google/flatbuffershttps://github.com/google/flatbuffers 为什么用FloatBuffer&#xff0c…

MySQL其一,概念学习,可视化软件安装以及增删改查语句

目录 MySQL 1、数据库的概念 2、数据库分类 3、MySQL的安装 4、安装过程中的问题 DataGrip的使用&#xff1a; SQLynx的使用&#xff1a; 5、编写SQL语句 6、DDL语句 7、DML 新增数据&#xff1a; 删除数据&#xff1a; 修改数据&#xff1a; MySQL SQL其实是一门…

05 在 Linux 使用 AXI DMA

DMA简介 DMA 是一种采用硬件实现存储器与存储器之间或存储器与外设之间直接进行高速数据传输的技术&#xff0c;传输过程无需 CPU 参与&#xff08;但是CPU需要提前配置传输规则&#xff09;&#xff0c;可以大大减轻 CPU 的负担。 DMA 存储传输的过程如下&#xff1a; CPU 向…

linux 安装 vsftpd 服务以及配置全攻略,vsftpd 虚拟多用户多目录配置,为每个用户配置不同的使用权限

linux 安装 vsftpd 服务以及配置全攻略&#xff0c;vsftpd 虚拟多用户多目录配置&#xff0c;为每个用户配置不同的使用权限。 linux 安装 vsftpd 服务以及配置全攻略 FTP 是 File Transfer Protocol 的简称&#xff0c;用于 Internet 上的控制文件的双向传输。同时&#xff0…