python用vosk库来把视频mp4中语音提取出来形成字幕txt文件失败

from moviepy.editor import VideoFileClip
import os
from vosk import Model, KaldiRecognizer


def recognize_audio(audio_path, model_path):
    # 加载模型
    model = Model(model_path)
    rec = KaldiRecognizer(model, 16000)  
    # 读取音频文件
    with open(audio_path, 'rb') as audio_file:
        while True:
            data = audio_file.read(4000)  # 读取数据块
            if len(data) == 0:
                break
            if rec.AcceptWaveform(data):
                text = rec.Result()
                if text != '':
                    print("识别到: {}".format(text))

    final_result = rec.FinalResult()
    if final_result != '':
        print("最终识别结果: {}".format(final_result))
    return final_result


def process_mp4_files(folder_path, model_path, subtitles_folder):
    # 确保字幕文件夹存在
    os.makedirs(subtitles_folder, exist_ok=True)
    # 遍历文件夹中的所有MP4文件
    for filename in os.listdir(folder_path):
        if filename.endswith(".mp4"):
            video_path = os.path.join(folder_path, filename)
            video = VideoFileClip(video_path)
            audio_path = video_path.replace('.mp4', '.wav')  # 临时保存音频文件

            # 提取音频
            video.audio.write_audiofile(audio_path)

            # 识别音频
            text = recognize_audio(audio_path, model_path)

            # 写入字幕文件
            subtitle_path = os.path.join(subtitles_folder, os.path.splitext(filename)[0] + '.txt')
            with open(subtitle_path, 'w', encoding='utf-8') as f:
                f.write(text)
                # 清理
            os.remove(audio_path)

folder_path = 'D:/Env/venv/jyxt/脚本/数据处理/测试'
model_path = 'D:/Env/venv/jyxt/脚本/数据处理/语音模型/vosk-model-cn-0.22'  # 请替换为实际的模型文件夹路径
subtitles_folder = 'D:/Env/venv/jyxt/脚本/数据处理/字幕输出'

# 处理文件
process_mp4_files(folder_path, model_path, subtitles_folder)
print("模型路径:", model_path)  # 打印模型路径以进行调试
# 处理文件
process_mp4_files(folder_path, model_path, subtitles_folder)

运行后显示:

D:\Env\venv\Scripts\python.exe D:/Env/venv/jyxt/脚本/数据处理/MP3output/生成字幕txt.py
chunk:   0%|          | 0/16445 [00:00<?, ?it/s, now=None]MoviePy - Writing audio in D:/Env/venv/jyxt/脚本/数据处理/测试\第30章-会计报表第5节.wav
chunk:  99%|█████████▉| 16251/16445 [00:07<00:00, 2393.88it/s, now=None]MoviePy - Done.
ERROR (VoskAPI:Model():model.cc:122) Folder 'D:/Env/venv/jyxt/脚本/数据处理/语音模型/vosk-model-cn-0.22' does not contain model files. Make sure you specified the model path properly in Model constructor. If you are not sure about relative path, use absolute path specification.
Traceback (most recent call last):
  File "D:/Env/venv/jyxt/脚本/数据处理/MP3output/生成字幕txt.py", line 62, in <module>
    process_mp4_files(folder_path, model_path, subtitles_folder)
  File "D:/Env/venv/jyxt/脚本/数据处理/MP3output/生成字幕txt.py", line 43, in process_mp4_files
    text = recognize_audio(audio_path, model_path)
  File "D:/Env/venv/jyxt/脚本/数据处理/MP3output/生成字幕txt.py", line 8, in recognize_audio
    model = Model(model_path)
  File "D:\Env\venv\lib\site-packages\vosk\__init__.py", line 57, in __init__
    raise Exception("Failed to create a model")
Exception: Failed to create a model

Process finished with exit code 1
 

如何解决这个问题

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值