最近在b站学习的过程中发现了一个需求,很多时候是对ppt的录屏并附上讲解,这就导致很多比较长的视频需要等它慢慢的讲,有些需要记录的地方得反复的拖拽进度条听解说。效率太低了,于是想研究一下把视频的语音语音内容给提取出来转成文字
工具介绍
我的思路就是先下载视频,然后提取出音频,然后音频转文字,这就分别需要用到三个工具
you-get
一个很强大的多媒体网站资源下载工具,支持绝大多数主流网站的下载,可以直接使用pip进行下载
pip install you-get
可以从github仓库中查看支持的视频网站
https://github.com/soimort/you-get
国内的也都赫然在列,安装好之后,是支持直接以命令行工具的方式使用的
you-get url
ffmpeg
这个就是老朋友了,音频处理绝对离不开的工具,没有之一。
下载,并将其添加到系统环境变量,这里不过多赘述,贴个网址放这里
https://ffmpeg.org/download.html
这个是openai推出的效果很不错的音频转文字的模型,之前有过介绍,链接放这里:
这里不重复赘述了,也是需要pip
安装一下依赖
pip install openai-whisper
注意:whisper
第一次使用的话会先下载模型
同时后续模型的调用会用到GPU,代码中我使用的模型是large
,各位可根据上述文章自行换成适合自己的配置的模型
subprocess.run([
'whisper', audio_path, '--model', 'large', '--language', 'zh',
'--output_dir', output_dir, '--output_format', 'txt'
], check=True)
效果展示
这里我写好了一个处理脚本,执行一下先看看效果
然后开始执行
整个语音转文字的过程是AI在做,所以会比较慢,大家可以换成小一点的模型
最终效果
脚本代码
全部的代码我放这里
# 使用方式
python .main.py url
import os
import subprocess
import argparse
def download_video(url, output_dir='./videos'):
"""you-get下载"""
os.makedirs(output_dir, exist_ok=True)
print(f"下载视频: {url}")
subprocess.run(['you-get','-d', '-o', output_dir, url], check=True)
video_files = [f for f in os.listdir(output_dir) if f.endswith(('.mp4', '.flv', '.mkv'))]
return os.path.join(output_dir, video_files[0]) if video_files else None
def extract_audio(video_path, output_dir='./audios'):
"""ffmpeg提取音频"""
os.makedirs(output_dir, exist_ok=True)
audio_path = os.path.join(output_dir, f"{os.path.basename(video_path).split('.')[0]}.wav")
print(f"提取音频: {audio_path}")
subprocess.run([
'ffmpeg', '-i', video_path, '-vn', '-acodec', 'pcm_s16le',
'-ar', '16000', '-ac', '1', audio_path
], check=True)
return audio_path
def transcribe_audio(audio_path, output_dir='./transcripts'):
"""whisper语音转文字"""
os.makedirs(output_dir, exist_ok=True)
output_path = os.path.join(output_dir, f"{os.path.basename(audio_path).split('.')[0]}.txt")
print(f"音频转文字: {audio_path}")
subprocess.run([
'whisper', audio_path, '--model', 'large', '--language', 'zh',
'--output_dir', output_dir, '--output_format', 'txt'
], check=True)
return output_path
def main():
parser = argparse.ArgumentParser()
parser.add_argument('url')
args = parser.parse_args()
try:
video_path = download_video(args.url)
if not video_path:
print("视频下载失败")
return
audio_path = extract_audio(video_path)
transcript_path = transcribe_audio(audio_path)
print(f"文字提取完成: {transcript_path}")
except Exception as e:
print(f"ERROR: {e}")
if __name__ == '__main__':
main()
★作者经验积累《现代业务下的WEB架构安全研发指南》已上架掘金小册★
★感兴趣的朋友关注公众号,菜单处【安全课程】了解!★
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...