mirror of
https://github.com/ggerganov/whisper.cpp.git
synced 2024-12-19 04:37:51 +00:00
55 lines
1.7 KiB
Python
55 lines
1.7 KiB
Python
|
import subprocess
|
||
|
import sys
|
||
|
import os
|
||
|
|
||
|
def process_audio(wav_file, model_name="base.en"):
|
||
|
"""
|
||
|
Processes an audio file using a specified model and returns the processed string.
|
||
|
|
||
|
:param wav_file: Path to the WAV file
|
||
|
:param model_name: Name of the model to use
|
||
|
:return: Processed string output from the audio processing
|
||
|
:raises: Exception if an error occurs during processing
|
||
|
"""
|
||
|
|
||
|
model = f"./models/ggml-{model_name}.bin"
|
||
|
|
||
|
# Check if the file exists
|
||
|
if not os.path.exists(model):
|
||
|
raise FileNotFoundError(f"Model file not found: {model} \n\nDownload a model with this command:\n\n> bash ./models/download-ggml-model.sh {model_name}\n\n")
|
||
|
|
||
|
if not os.path.exists(wav_file):
|
||
|
raise FileNotFoundError(f"WAV file not found: {wav_file}")
|
||
|
|
||
|
full_command = f"./main -m {model} -f {wav_file} -np -nt"
|
||
|
|
||
|
# Execute the command
|
||
|
process = subprocess.Popen(full_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||
|
|
||
|
# Get the output and error (if any)
|
||
|
output, error = process.communicate()
|
||
|
|
||
|
if error:
|
||
|
raise Exception(f"Error processing audio: {error.decode('utf-8')}")
|
||
|
|
||
|
# Process and return the output string
|
||
|
decoded_str = output.decode('utf-8').strip()
|
||
|
processed_str = decoded_str.replace('[BLANK_AUDIO]', '').strip()
|
||
|
|
||
|
return processed_str
|
||
|
|
||
|
def main():
|
||
|
if len(sys.argv) >= 2:
|
||
|
wav_file = sys.argv[1]
|
||
|
model_name = sys.argv[2] if len(sys.argv) == 3 else "base.en"
|
||
|
try:
|
||
|
result = process_audio(wav_file, model_name)
|
||
|
print(result)
|
||
|
except Exception as e:
|
||
|
print(f"Error: {e}")
|
||
|
else:
|
||
|
print("Usage: python whisper_processor.py <wav_file> [<model_name>]")
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
main()
|