Youtube和Bilibili视频总结

Sun Jul 30 2023 00:52:00 GMT+0000 (Coordinated Universal Time) 更新于 Sun Jul 30 2023 00:52:00 GMT+0000 (Coordinated Universal Time) kioihyma
科学技术 视频处理

本文介绍了如何使用Whisper、YOUGET和PYTUBE实现Bilibili和Youtube视频的转录和总结。

Youtube和Bilibili视频总结

在本文中,我们将介绍如何使用Whisper、YOUGET和PYTUBE这些工具来实现Bilibili和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. 总结

  1. 太仓促 VideoFileClip, AudioFileClip 可能就是一回事
  2. 不清楚 模型可能不能应用于中文,直接将结果复制到Chatgpt总结
  3. 无费用 不需要付费就可手动总结视频
  4. 太耗时 总感觉时间和情绪有些亏

标签

#视频总结 #Whisper #YOUGET #PYTUBE #Bilibili #Youtube