LangChain中可加载本地视频用于转录的Loader选型咨询
解决LangChain中转录本地视频的问题
YouTubeLoader的核心逻辑是拉取YouTube视频的音频流,再通过WhisperParser完成转写。对于本地视频,你需要先提取音频(因为Whisper对音频的处理更高效,且LangChain原生加载器不直接支持视频格式),再结合适配音频的加载器或直接调用Whisper API来完成转写,具体方案如下:
步骤1:提取本地视频的音频
用ffmpeg工具将视频文件转成Whisper兼容的音频格式(推荐16kHz单声道WAV,转写效果更稳定),命令示例:
# 将MP4转成WAV ffmpeg -i 你的视频文件.mp4 -vn -acodec pcm_s16le -ar 16000 -ac 1 输出音频.wav # 或者转成M4A(体积更小) ffmpeg -i 你的视频文件.mp4 -vn -acodec copy 输出音频.m4a
注意:系统需要先安装ffmpeg,Windows需将ffmpeg路径加入环境变量,Linux用apt install ffmpeg,macOS用brew install ffmpeg。
步骤2:用LangChain的AudioLoader加载音频并转写
LangChain提供了AudioLoader,专门用于加载音频文件并通过Whisper完成转写,完美替代YouTubeLoader的本地场景:
安装依赖
pip install langchain openai ffmpeg-python
代码示例
from langchain.document_loaders import AudioLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.llms import OpenAI from langchain.chains.summarize import load_summarize_chain # 加载音频文件,自动调用Whisper转写 loader = AudioLoader("输出音频.wav", openai_api_key="你的OpenAI密钥") docs = loader.load() # 处理长音频:分割转写后的文本 text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200) split_docs = text_splitter.split_documents(docs) # 示例:对转写内容做总结 llm = OpenAI(temperature=0) chain = load_summarize_chain(llm, chain_type="map_reduce") summary = chain.run(split_docs) print(summary)
替代方案:直接调用Whisper API转写后封装为Document
如果需要更灵活的控制,也可以直接用OpenAI的Whisper API完成转写,再将结果封装成LangChain的Document对象,后续即可用LangChain的各种链处理:
import openai from langchain.schema import Document openai.api_key = "你的OpenAI密钥" # 转写音频文件 audio_file = open("输出音频.wav", "rb") transcript = openai.Audio.transcribe("whisper-1", audio_file) # 封装为LangChain Document doc = Document(page_content=transcript["text"], metadata={"source": "本地视频转音频文件"}) # 后续可直接用LangChain的链处理该文档,比如问答、总结等
为什么UnstructuredFileLoader不行?
UnstructuredFileLoader主要针对PDF、Word、HTML等结构化/半结构化文档设计,没有适配音频、视频格式的解析逻辑,因此无法处理MP3/MP4文件。
内容的提问来源于stack exchange,提问作者Shubhra
相关产品推荐
相关产品推荐

