|
@@ -1,11 +1,18 @@
|
|
|
+# -*- coding: UTF-8 -*-
|
|
|
+
|
|
|
import json
|
|
|
import requests
|
|
|
import re
|
|
|
from moviepy.editor import VideoFileClip, AudioFileClip, CompositeVideoClip
|
|
|
|
|
|
-url = 'https://www.bilibili.com/video/BV1Ce4y1z72V/?spm_id_from=333.999.0.0'
|
|
|
+url = 'https://www.bilibili.com/video/BV1Pt421u7dL/?spm_id_from=pageDriver&vd_source=f6247aa12dae1ff1bce74ef0af381757'
|
|
|
|
|
|
+Audio_format = '.mp3'
|
|
|
+Video_format = '.mp4'
|
|
|
|
|
|
+Audio_path = 'D:/pyp/bilibili_pachong/bilibili_files/Audio/'
|
|
|
+Video_path = 'D:/pyp/bilibili_pachong/bilibili_files/Video/'
|
|
|
+Synth_path = 'D:/pyp/bilibili_pachong/bilibili_files/Files/'
|
|
|
|
|
|
def GetResponse(url):
|
|
|
headers = {
|
|
@@ -21,50 +28,53 @@ def GetResponse(url):
|
|
|
def GetVideoInfo() -> str:
|
|
|
response = GetResponse(url = url)
|
|
|
html = response.text
|
|
|
+
|
|
|
info = re.findall('<script>window.__playinfo__=(.*?)</script>', html)[0]
|
|
|
json_data = json.loads(info)
|
|
|
|
|
|
audio_url = json_data['data']['dash']['audio'][0]['baseUrl']
|
|
|
video_url = json_data['data']['dash']['video'][0]['baseUrl']
|
|
|
- title = re.findall('<title data-vue-meta="true">(.*?)</title>', html)
|
|
|
- print(title)
|
|
|
+
|
|
|
+ # title = re.findall('<span data-v-492c8232="" class="title-text">(.*?)</span>', html )
|
|
|
+ title = re.findall('<title data-vue-meta="true">(.*?)</title>', html )
|
|
|
+ title = title[0]
|
|
|
+ # print(title)
|
|
|
+
|
|
|
if title:
|
|
|
- title = title[0]
|
|
|
- illegal_chars = fr'<>:"/\\|?*'
|
|
|
- def remove_illegal_chars(s):
|
|
|
+ illegal_chars = fr'<|>\/:"*?'
|
|
|
+ def remove_illegal_chars(title_ill):
|
|
|
for char in illegal_chars:
|
|
|
- s = s.replace(char, "")
|
|
|
- return s
|
|
|
- title = remove_illegal_chars(title)
|
|
|
+ title_ill = title_ill.replace(char, "")
|
|
|
+ return title_ill
|
|
|
else:
|
|
|
return None
|
|
|
- print(title)
|
|
|
+
|
|
|
+ title = remove_illegal_chars(title)
|
|
|
+
|
|
|
+ print("title:",title)
|
|
|
+
|
|
|
return (title, audio_url, video_url)
|
|
|
|
|
|
def Save(title,audio_url,video_url):
|
|
|
audio_content = GetResponse(url = audio_url).content
|
|
|
video_content = GetResponse(url = video_url).content
|
|
|
|
|
|
- with open('D:/pyp/bilibili_pachong/bilibili_files/AAC/' + title + '.aac', mode='wb') as audio:
|
|
|
+ with open(Audio_path + title + Audio_format, mode='wb') as audio:
|
|
|
audio.write(audio_content)
|
|
|
|
|
|
- with open('D:/pyp/bilibili_pachong/bilibili_files/MP4/' + title + '.mp4', mode='wb') as video:
|
|
|
+ with open(Video_path + title + Video_format, mode='wb') as video:
|
|
|
video.write(video_content)
|
|
|
|
|
|
-
|
|
|
if __name__ == '__main__':
|
|
|
title,audio_url,video_url = GetVideoInfo()
|
|
|
Save(title, audio_url, video_url)
|
|
|
|
|
|
# 加载视频和音频文件
|
|
|
- audio_path = fr"D:\pyp\bilibili_pachong\bilibili_files\AAC\{title}.aac"
|
|
|
+ audio_path = fr"{Audio_path}{title}{Audio_format}"
|
|
|
audio_clip = AudioFileClip(audio_path)
|
|
|
-
|
|
|
- video_path = fr"D:\pyp\bilibili_pachong\bilibili_files\MP4\{title}.mp4"
|
|
|
+ video_path = fr"{Video_path}{title}{Video_format}"
|
|
|
video_clip = VideoFileClip(video_path)
|
|
|
|
|
|
- # print(audio_clip,video_clip)
|
|
|
-
|
|
|
# 确保音频和视频长度相同
|
|
|
audio_clip = audio_clip.set_duration(video_clip.duration)
|
|
|
|
|
@@ -72,4 +82,4 @@ if __name__ == '__main__':
|
|
|
video_clip_with_audio = video_clip.set_audio(audio_clip)
|
|
|
|
|
|
# 输出合并后的文件
|
|
|
- video_clip_with_audio.write_videofile(fr"D:\pyp\bilibili_pachong\bilibili_files\Files\{title}synth.mp4", codec="libx264", audio_codec="aac")
|
|
|
+ video_clip_with_audio.write_videofile(fr"{Synth_path}{title}{Video_format}", codec="libx264", audio_codec="aac")
|