Youtube和Bilibili视频总结
在本文中,我们将介绍如何使用Whisper、YOUGET和PYTUBE这些工具来实现Bilibili和Youtube视频的转录和总结。这些工具结合了语音识别、视频下载和文本总结的功能,让我们能够快速获取视频内容,并以文字形式进行总结。
- 2023.8.18 更新更好的视频转文字 https://github.com/lewangdev/faster-whisper-youtube
0. Check GPU type 🕵️
!nvidia-smi -L
!nvidia-smi
1. 安装所需的库和模块
在开始之前,我们需要安装一些Python库和模块,这些库和模块包括:
- moviepy:用于处理视频和音频文件。
- pytube:用于从Youtube下载视频。
- you-get:用于从Bilibili下载视频。
- whisper:用于语音转文本的语音识别模型。
- transformers:用于文章总结的文本生成模型。
!pip install moviepy
!pip install --upgrade pytube
!pip install --upgrade you-get
!pip install git+https://github.com/openai/whisper.git
!pip install transformers
2. 获取视频并转换为文字
我们使用YOUGET或PYTUBE工具来从Bilibili或Youtube获取视频,并将视频转换为文字。使用YOUGET时,我们需要提供Bilibili视频的链接;使用PYTUBE时,我们需要提供Youtube视频的链接。
import os
import subprocess
from moviepy.editor import VideoFileClip, AudioFileClip
import whisper
import pytube
import torch
from transformers import pipeline, AutoTokenizer
# 定义文章总结函数
def summarize_text(text):
# 使用 BART 模型进行文章总结
#summarizer = pipeline("summarization", model="facebook/bart-large-cnn")
summarizer = pipeline("summarization", model="t5-small", tokenizer="t5-small")
summary = summarizer(text, max_length=400, min_length=30, do_sample=False)
# 获取总结结果
summary_text = summary[0]["summary_text"]
return summary_text
# 从 Bilibili 获取视频并转换为文字
def bilibili_to_text(video_url):
video_title = get_video_title(video_url)
video_output_dir = "/content/"
audio_output_dir = "/content/"
video_path = os.path.join(video_output_dir, f"{video_title}.mp4")
audio_path = os.path.join(audio_output_dir, f"{video_title}.mp3")
subprocess.run(["you-get", "-o", video_output_dir, video_url]) # 下载视频
video = VideoFileClip(video_path)
audio = video.audio
audio.write_audiofile(audio_path) # 转换为音频文件
model = whisper.load_model("base")
text = model.transcribe(audio_path)
# 删除视频和音频文件
os.remove(video_path)
os.remove(audio_path)
return text['text']
# 从 YouTube 获取视频并转换为文字
def youtube_to_text(video_url):
video = pytube.YouTube(video_url)
video_title = video.title
video_output_dir = "/content/"
audio_output_dir = "/content/"
video_path = os.path.join(video_output_dir, f"{video_title}.mp4")
audio_path = os.path.join(audio_output_dir, f"{video_title}.mp3")
video_streams = video.streams.filter(only_audio=True, file_extension='mp4').first()
video_streams.download(output_path='/content/', filename=f"{video_title}.mp4")
audio = AudioFileClip(video_path)
audio.write_audiofile(audio_path)
model = whisper.load_model("base")
text = model.transcribe(audio_path)
# 删除音频文件
os.remove(audio_path)
os.remove(video_path)
return text['text']
# 使用you-get方式时获取取文件名-标题
def get_video_title(video_url):
video_title = subprocess.check_output(["you-get", "-i", video_url]).decode("utf-8")
video_title = video_title.splitlines()[1].split(":")[1].strip().replace("/", "-")
return video_title
# 自动识别链接是哪个平台并转换为文字
def video_to_text(video_url):
if "youtube.com" in video_url:
return youtube_to_text(video_url)
elif "bilibili.com" in video_url:
return bilibili_to_text(video_url)
else:
return "不支持的视频平台"
def main():
print("请输入视频链接,输入 'q' 退出:")
while True:
video_url = input("视频链接:")
if video_url.lower() == "q":
break
text = video_to_text(video_url)
print("视频转换的文字:\n")
print(f"> {text}")
summary_result = summarize_text(text)
print("\n视频内容总结:<pre>")
print(summary_result)
print("</pre>")
main()
3. 文章总结
我们使用Facebook的BART模型来对获取的视频内容进行总结,从而得到一段简洁的文字总结。这个过程利用了transformers库中的pipeline函数,可以方便地使用预训练的文本生成模型。
# 定义文章总结函数
def summarize_text(text):
# 使用 BART 模型进行文章总结
summarizer = pipeline("summarization", model="facebook/bart-large-cnn")
summary = summarizer(text, max_length=400, min_length=30, do_sample=False)
# 获取总结结果
summary_text = summary[0]["summary_text"]
return summary_text
4. 总结
- 太仓促 VideoFileClip, AudioFileClip 可能就是一回事
- 不清楚 模型可能不能应用于中文,直接将结果复制到Chatgpt总结
- 无费用 不需要付费就可手动总结视频
- 太耗时 总感觉时间和情绪有些亏