micro server with small ui on 8000 for running faster_whisper
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
import ffmpeg
|
||||
import os
|
||||
import tempfile
|
||||
import shutil
|
||||
|
||||
def is_valid_format(file_path: str) -> bool:
|
||||
"""Проверяет, является ли аудиофайл 16kHz моно WAV."""
|
||||
try:
|
||||
probe = ffmpeg.probe(file_path)
|
||||
audio_stream = next((stream for stream in probe['streams'] if stream['codec_type'] == 'audio'), None)
|
||||
if audio_stream is None:
|
||||
return False
|
||||
|
||||
return (
|
||||
audio_stream.get('codec_name') == 'pcm_s16le' and
|
||||
audio_stream.get('channels') == 1 and
|
||||
audio_stream.get('sample_rate') == '16000'
|
||||
)
|
||||
except ffmpeg.Error:
|
||||
return False
|
||||
|
||||
def convert_to_wav(input_file_path: str) -> tuple[str, bool]:
|
||||
"""
|
||||
Конвертирует аудиофайл в 16kHz моно WAV.
|
||||
Возвращает путь к сконвертированному файлу и флаг, указывающий, была ли выполнена конвертация.
|
||||
Если файл уже в нужном формате, возвращает исходный путь и False.
|
||||
"""
|
||||
if is_valid_format(input_file_path):
|
||||
return input_file_path, False
|
||||
|
||||
output_file_path = tempfile.mktemp(suffix=".wav")
|
||||
|
||||
try:
|
||||
ffmpeg.input(input_file_path).output(
|
||||
output_file_path,
|
||||
acodec='pcm_s16le',
|
||||
ac=1,
|
||||
ar='16k'
|
||||
).run(capture_stdout=True, capture_stderr=True)
|
||||
return output_file_path, True
|
||||
except ffmpeg.Error as e:
|
||||
if os.path.exists(output_file_path):
|
||||
os.remove(output_file_path)
|
||||
raise e
|
||||
|
||||
Reference in New Issue
Block a user