mirror of
https://github.com/open-webui/open-webui
synced 2025-02-21 12:29:29 +00:00
fix: safari audio issue
This commit is contained in:
parent
277e7aead7
commit
5cbb79fa6e
@ -23,7 +23,6 @@ import hashlib
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
import json
|
import json
|
||||||
|
|
||||||
|
|
||||||
from constants import ERROR_MESSAGES
|
from constants import ERROR_MESSAGES
|
||||||
from utils.utils import (
|
from utils.utils import (
|
||||||
decode_token,
|
decode_token,
|
||||||
@ -106,6 +105,33 @@ class AudioConfigUpdateForm(BaseModel):
|
|||||||
stt: STTConfigForm
|
stt: STTConfigForm
|
||||||
|
|
||||||
|
|
||||||
|
from pydub import AudioSegment
|
||||||
|
from pydub.utils import mediainfo
|
||||||
|
|
||||||
|
|
||||||
|
def is_mp4_audio(file_path):
|
||||||
|
"""Check if the given file is an MP4 audio file."""
|
||||||
|
if not os.path.isfile(file_path):
|
||||||
|
print(f"File not found: {file_path}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
info = mediainfo(file_path)
|
||||||
|
if (
|
||||||
|
info.get("codec_name") == "aac"
|
||||||
|
and info.get("codec_type") == "audio"
|
||||||
|
and info.get("codec_tag_string") == "mp4a"
|
||||||
|
):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def convert_mp4_to_wav(file_path, output_path):
|
||||||
|
"""Convert MP4 audio file to WAV format."""
|
||||||
|
audio = AudioSegment.from_file(file_path, format="mp4")
|
||||||
|
audio.export(output_path, format="wav")
|
||||||
|
print(f"Converted {file_path} to {output_path}")
|
||||||
|
|
||||||
|
|
||||||
@app.get("/config")
|
@app.get("/config")
|
||||||
async def get_audio_config(user=Depends(get_admin_user)):
|
async def get_audio_config(user=Depends(get_admin_user)):
|
||||||
return {
|
return {
|
||||||
@ -235,6 +261,8 @@ def transcribe(
|
|||||||
os.makedirs(file_dir, exist_ok=True)
|
os.makedirs(file_dir, exist_ok=True)
|
||||||
file_path = f"{file_dir}/{filename}"
|
file_path = f"{file_dir}/{filename}"
|
||||||
|
|
||||||
|
print(filename)
|
||||||
|
|
||||||
contents = file.file.read()
|
contents = file.file.read()
|
||||||
with open(file_path, "wb") as f:
|
with open(file_path, "wb") as f:
|
||||||
f.write(contents)
|
f.write(contents)
|
||||||
@ -268,23 +296,31 @@ def transcribe(
|
|||||||
|
|
||||||
transcript = "".join([segment.text for segment in list(segments)])
|
transcript = "".join([segment.text for segment in list(segments)])
|
||||||
|
|
||||||
|
data = {"text": transcript.strip()}
|
||||||
|
|
||||||
# save the transcript to a json file
|
# save the transcript to a json file
|
||||||
transcript_file = f"{file_dir}/{id}.json"
|
transcript_file = f"{file_dir}/{id}.json"
|
||||||
with open(transcript_file, "w") as f:
|
with open(transcript_file, "w") as f:
|
||||||
json.dump({"transcript": transcript}, f)
|
json.dump(data, f)
|
||||||
|
|
||||||
data = {"text": transcript.strip()}
|
|
||||||
|
|
||||||
print(data)
|
print(data)
|
||||||
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
elif app.state.config.STT_ENGINE == "openai":
|
elif app.state.config.STT_ENGINE == "openai":
|
||||||
|
if is_mp4_audio(file_path):
|
||||||
|
print("is_mp4_audio")
|
||||||
|
os.rename(file_path, file_path.replace(".wav", ".mp4"))
|
||||||
|
# Convert MP4 audio file to WAV format
|
||||||
|
convert_mp4_to_wav(file_path.replace(".wav", ".mp4"), file_path)
|
||||||
|
|
||||||
headers = {"Authorization": f"Bearer {app.state.config.STT_OPENAI_API_KEY}"}
|
headers = {"Authorization": f"Bearer {app.state.config.STT_OPENAI_API_KEY}"}
|
||||||
|
|
||||||
files = {"file": (filename, open(file_path, "rb"))}
|
files = {"file": (filename, open(file_path, "rb"))}
|
||||||
data = {"model": "whisper-1"}
|
data = {"model": "whisper-1"}
|
||||||
|
|
||||||
|
print(files, data)
|
||||||
|
|
||||||
r = None
|
r = None
|
||||||
try:
|
try:
|
||||||
r = requests.post(
|
r = requests.post(
|
||||||
@ -297,6 +333,12 @@ def transcribe(
|
|||||||
r.raise_for_status()
|
r.raise_for_status()
|
||||||
|
|
||||||
data = r.json()
|
data = r.json()
|
||||||
|
|
||||||
|
# save the transcript to a json file
|
||||||
|
transcript_file = f"{file_dir}/{id}.json"
|
||||||
|
with open(transcript_file, "w") as f:
|
||||||
|
json.dump(data, f)
|
||||||
|
|
||||||
print(data)
|
print(data)
|
||||||
return data
|
return data
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
@ -59,3 +59,4 @@ youtube-transcript-api==0.6.2
|
|||||||
pytube==15.0.0
|
pytube==15.0.0
|
||||||
|
|
||||||
extract_msg
|
extract_msg
|
||||||
|
pydub
|
Loading…
Reference in New Issue
Block a user