【问题标题】:How do I run Whisper on an entire directory?如何在整个目录上运行 Whisper?
【发布时间】:2023-02-13 13:32:01
【问题描述】:

我想使用 Whisper 将语音转录为文本。我已经能够使用以下命令在单个文件上成功运行它:

whisper audio.wav

我想在桌面上一个名为“Audio”的目录中对大量文件运行它。我试图将其写入 Python,如下所示:

import whisper
import os

model = whisper.load_model("base")

for filename in os.listdir('Audio'):   
    model.transcribe(filename)   

它似乎开始了,但随后给我一些关于“没有这样的文件或目录”的错误。有什么方法可以更正此问题以对音频目录中的所有 .wav 文件运行 Whisper?

错误:

/opt/homebrew/lib/python3.10/site-packages/whisper/transcribe.py:78: UserWarning: FP16 is not supported on CPU; using FP32 instead
  warnings.warn("FP16 is not supported on CPU; using FP32 instead")
/opt/homebrew/lib/python3.10/site-packages/whisper/transcribe.py:78: UserWarning: FP16 is not supported on CPU; using FP32 instead
  warnings.warn("FP16 is not supported on CPU; using FP32 instead")
Traceback (most recent call last):
  File "/opt/homebrew/lib/python3.10/site-packages/whisper/audio.py", line 42, in load_audio
    ffmpeg.input(file, threads=0)
  File "/opt/homebrew/lib/python3.10/site-packages/ffmpeg/_run.py", line 325, in run
    raise Error('ffmpeg', out, err)
ffmpeg._run.Error: ffmpeg error (see stderr output for detail)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Users/user/Desktop/transcribe.py", line 7, in <module>
    model.transcribe(filename)
  File "/opt/homebrew/lib/python3.10/site-packages/whisper/transcribe.py", line 84, in transcribe
    mel = log_mel_spectrogram(audio)
  File "/opt/homebrew/lib/python3.10/site-packages/whisper/audio.py", line 111, in log_mel_spectrogram
    audio = load_audio(audio)
  File "/opt/homebrew/lib/python3.10/site-packages/whisper/audio.py", line 47, in load_audio
    raise RuntimeError(f"Failed to load audio: {e.stderr.decode()}") from e
RuntimeError: Failed to load audio: ffmpeg version 5.1.2 Copyright (c) 2000-2022 the FFmpeg developers
  built with Apple clang version 14.0.0 (clang-1400.0.29.202)
  configuration: --prefix=/opt/homebrew/Cellar/ffmpeg/5.1.2_1 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox --enable-neon
  libavutil      57. 28.100 / 57. 28.100
  libavcodec     59. 37.100 / 59. 37.100
  libavformat    59. 27.100 / 59. 27.100
  libavdevice    59.  7.100 / 59.  7.100
  libavfilter     8. 44.100 /  8. 44.100
  libswscale      6.  7.100 /  6.  7.100
  libswresample   4.  7.100 /  4.  7.100
  libpostproc    56.  6.100 / 56.  6.100
221211_1834.wav: No such file or directory

【问题讨论】:

    标签: audio speech-to-text openai-whisper


    【解决方案1】:

    这是您的选择。它执行以下操作:

    1 - 在“根文件夹”和子文件夹中查找所有 .wav 文件。您需要将其更改为您的“音频”文件夹位置。

    2 - 在转录文件时显示进度条(使用 tqdm 完成)。

    3 - 在 .wav 文件旁边保存包含转录的 .txt 文件。

    代码:

    import os
    import whisper
    from tqdm import tqdm
    
    # Define the folder where the wav files are located
    root_folder = "/Users/downloads"
    
    # Set up Whisper client
    print("Loading whisper model...")
    model = whisper.load_model("base")
    print("Whisper model complete.")
    
    # Get the number of wav files in the root folder and its sub-folders
    print("Getting number of files to transcribe...")
    num_files = sum(1 for dirpath, dirnames, filenames in os.walk(root_folder) for filename in filenames if filename.endswith(".wav"))
    print("Number of files: ", num_files)
    
    # Transcribe the wav files and display a progress bar
    with tqdm(total=num_files, desc="Transcribing Files") as pbar:
        for dirpath, dirnames, filenames in os.walk(root_folder):
            for filename in filenames:
                if filename.endswith(".wav"):
                    filepath = os.path.join(dirpath, filename)
                    result = model.transcribe(filepath, fp16=False, verbose=True)
                    transcription = result['text']
                    # Write transcription to text file
                    filename_no_ext = os.path.splitext(filename)[0]
                    with open(os.path.join(dirpath, filename_no_ext + '.txt'), 'w') as f:
                        f.write(transcription)
                    pbar.update(1)
    

    【讨论】:

      猜你喜欢
      • 2017-03-14
      • 2017-12-02
      • 2015-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-24
      • 1970-01-01
      • 2022-01-24
      相关资源
      最近更新 更多