import re import subprocess import requests import json from pprint import pprint url = "https://www.bilibili.com/video/BV1fi4y1K7Na/?spm_id_from=333.1007.top_right_bar_window_default_collection.content.click&vd_source=4545a0e83c576b93b1abd0ca4e16ab4d" headers = { "referer": "https://www.bilibili.com/", "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36", "cookie":"i-wanna-go-back=-1; _uuid=C106610D104-6D27-6584-66E1-FCDE2859156A75277infoc; FEED_LIVE_VERSION=V8; home_feed_column=5; buvid3=D2AE610A6-6EE7-B48E-10C51-9E8269B10C88776898infoc; header_theme_version=CLOSE; DedeUserID=1852701166; DedeUserID__ckMd5=ac9474243bdd3627; nostalgia_conf=-1; CURRENT_PID=e16a0380-e1cd-11ed-a872-2f97008834b2; rpdid=|(k|k~u|)RY)0J'uY)kkl|m)m; b_ut=5; browser_resolution=1482-792; CURRENT_BLACKGAP=0; buvid_fp_plain=undefined; CURRENT_FNVAL=4048; b_nut=1683881044; hit-new-style-dyn=1; hit-dyn-v2=1; SESSDATA=3e3851ea%2C1704423625%2C1959b%2A72SteLEoaNhz8Q6ifKiYFGRpSBjpMp2TG-QWAao2iv2yR5ci81QOokmXevCx102rLpwUc9qgAAQgA; bili_jct=2ea1af9f8ae6f19867c8cd3dc1bfd047; fingerprint=dd5c1878758a4b317420b66dad49b677; b_lsid=97F1E5C5_1894440C9F1; buvid4=9D5A25A5-A648-0805-4C59-8178C4E4362B31067-023042319-0THAXXn9jKfRyf3rDh/fQA%3D%3D; buvid_fp=dd5c1878758a4b317420b66dad49b677; sid=7i4lnopc; bp_video_offset_1852701166=817021346575810700; PVID=1" } response = requests.get(url, headers=headers) name = re.findall('"title":"(.*?)"',response.text)[0].replace(' ','') html_data = re.findall('<script>window.__playinfo__=(.*?)</script>',response.text)[0] json_data = json.loads(html_data) #print(name) # print(html_data) # print(json_data) # pprint(json_data) audio_url = json_data['data']['dash']['audio'][0]['baseUrl'] video_url = json_data['data']['dash']['video'][0]['baseUrl'] # print(audio_url) # print(video_url) audio_content = requests.get(url=audio_url,headers=headers).content video_content = requests.get(url=video_url,headers=headers).content with open("D:\\study\\B站\\素材\\" + name + ".mp3", mode="wb") as audio: audio.write(audio_content) with open("D:\\study\\B站\\素材\\" + name + ".mp4", mode="wb") as video: video.write(video_content) cmd = f'ffmpeg -i D:\\study\\B站\\素材\\{name}.mp4 -i D:\\study\\B站\\素材\\{name}.mp3 -c:a aac -strict experimental D:\\study\\B站\\视频1080P\\{name}output.mp4' subprocess.run(cmd)
时间: 2024-04-13 18:25:09 浏览: 219
这段代码看起来是从Bilibili网站上下载视频和音频,并将它们合并为一个输出视频文件。代码中使用了requests库发送HTTP请求获取网页内容,使用re库进行正则表达式匹配提取视频标题和播放信息,使用json库解析JSON数据,然后使用subprocess库调用ffmpeg命令将音频和视频合并。
你有什么问题吗?
相关问题
import os import subprocess # Subprocess是一个功能强大的子进程管理模块,可以像Linux 系统中执行shell命令那样 # fork一个子进程执行外部的命令,subprocess 模块允许我们启动一个新进程, # 并连接到它们的输入/输出/错误管道,从而获取返回值。 # 使用subprocess模块的目的是用于替换os.system等一些旧的模块和方法。 # 上链接->创文件夹->设置下载->执行 # 视频链接 url = 'https://www.bilibili.com/video/BV1UK4y1N7Pn/?spm_id_from=333.337.search-card.all.click&vd_source=7d8983939b9d689264c6ef759b637d79' # 指定下载文件夹的路径 download_folder = 'D:/downloads' # 修改为你想要保存视频的路径 # 创建下载文件夹 if not os.path.exists(download_folder): os.makedirs(download_folder) # 构建命令行下载命令 # You-Get" 是一个开源的命令行工具,用于下载媒体文件(如视频、音频)和图片等资源。 # 它支持多个视频平台(如Bilibili、YouTube、优酷等),可以通过命令行或Python脚本来使用。 command = f"you-get -o {download_folder} {url}" # 执行下载命令 subprocess.call(command, shell=True) 帮我把它转化成GUI可视化界面
好的,将上述代码转化为 GUI 可视化界面需要使用 Python 的 GUI 库,例如 tkinter、PyQt、wxPython 等。这里以 tkinter 为例,演示如何将上述代码转化为 GUI 界面:
```python
import os
import subprocess
import tkinter as tk
from tkinter import ttk
from tkinter import filedialog
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.create_widgets()
def create_widgets(self):
# Label 和 Entry 用于输入链接
self.label_url = ttk.Label(self.master, text="视频链接:")
self.label_url.grid(row=0, column=0, padx=5, pady=5)
self.entry_url = ttk.Entry(self.master, width=50)
self.entry_url.grid(row=0, column=1, padx=5, pady=5)
# Label 和 Entry 用于输入下载文件夹路径
self.label_folder = ttk.Label(self.master, text="下载路径:")
self.label_folder.grid(row=1, column=0, padx=5, pady=5)
self.entry_folder = ttk.Entry(self.master, width=30)
self.entry_folder.grid(row=1, column=1, padx=5, pady=5)
self.button_folder = ttk.Button(self.master, text="选择路径", command=self.choose_folder)
self.button_folder.grid(row=1, column=2, padx=5, pady=5)
# Button 用于执行下载命令
self.button_download = ttk.Button(self.master, text="下载视频", command=self.download)
self.button_download.grid(row=2, column=1, padx=5, pady=5)
def choose_folder(self):
# 选择下载文件夹路径
folder_path = filedialog.askdirectory()
self.entry_folder.insert(0, folder_path)
def download(self):
# 获取链接和下载文件夹路径
url = self.entry_url.get()
folder_path = self.entry_folder.get()
# 创建下载文件夹
if not os.path.exists(folder_path):
os.makedirs(folder_path)
# 构建下载命令
command = f"you-get -o {folder_path} {url}"
# 执行下载命令
subprocess.call(command, shell=True)
root = tk.Tk()
app = Application(master=root)
app.mainloop()
```
上述代码使用 tkinter 创建了一个包含输入框和按钮的窗口,输入链接和下载文件夹路径后,点击下载按钮即可执行下载命令。其中 `self.choose_folder()` 方法使用了 tkinter 的文件选择对话框,允许用户选择下载文件夹路径。注意,如果使用 PyInstaller 等工具将 Python 脚本打包成可执行文件,则需要将 `you-get` 命令行工具一同打包,并将其添加到系统环境变量中,否则可能无法执行下载命令。
import requestsimport reimport jsonimport pprintimport subprocess # python 内置模块 不需要 installimport os
这段代码是用于Python中导入常见的一些模块和库。下面是每个模块和库的作用:
- requests模块:可以用来向网站发送HTTP请求并获取响应。
- re模块:用于使用正则表达式匹配和搜索文本。
- json模块:用于解码JSON数据。
- pprint模块:用于打印复杂数据结构(例如字典)。
- subprocess模块:用于在Python脚本中执行外部命令并获取其输出。
- os模块:提供了许多函数来与操作系统交互。
如果您想深入了解这些模块和库,请阅读Python官方文档或相应的第三方库文档。
阅读全文