我想使用 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
这是您的一个选择。它执行以下操作:
1 - 查找“根文件夹”和子文件夹中的所有 .wav 文件。您需要将其更改为您的“音频”文件夹位置。
2 - 在转录文件时显示进度条(使用 tqdm 完成)。
3 - 将包含转录的 .txt 文件保存在 .wav 文件旁边。
代码:
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)
您的代码运行良好,但如何将默认检测语言设置为英语?我对如何用 python 编码一无所知,但我知道它需要去某个地方。请帮忙。我有一百万个文件需要转录,而 Whisper 使用的是威尔士语。谢谢。