Monstermango commited on
Commit
a1bc933
·
verified ·
1 Parent(s): 69bc342

Transcode uploads to WAV before analysis

Browse files
Files changed (1) hide show
  1. app.py +16 -1
app.py CHANGED
@@ -6,6 +6,8 @@ Zugangsschlüssel (Secret APP_PASS); erst nach der Prüfung wird GPU-Zeit
6
  verbraucht.
7
  """
8
  import os
 
 
9
  from datetime import datetime
10
  from zoneinfo import ZoneInfo
11
 
@@ -160,17 +162,30 @@ def _frontmatter(text):
160
 
161
  # ---------- API-Endpunkte ----------
162
 
 
 
 
 
 
 
 
 
163
  def analysieren_api(key, audio, num_speakers):
164
  if not _pruefe(key):
165
  return {"ok": False, "fehler": "Ungültiger Zugangsschlüssel."}
166
  if not audio:
167
  return {"ok": False, "fehler": "Kein Audio übermittelt."}
 
 
 
 
 
168
  try:
169
  daten = _analyse_gpu(audio, num_speakers)
170
  except Exception as e:
171
  return {"ok": False, "fehler": f"Analyse fehlgeschlagen: {e}"}
172
  zeitpunkt = datetime.now(ZEITZONE)
173
- md_text = _markdown(daten, os.path.basename(audio), zeitpunkt)
174
  try:
175
  pfad = _speichern(md_text, zeitpunkt)
176
  except Exception:
 
6
  verbraucht.
7
  """
8
  import os
9
+ import subprocess
10
+ import tempfile
11
  from datetime import datetime
12
  from zoneinfo import ZoneInfo
13
 
 
162
 
163
  # ---------- API-Endpunkte ----------
164
 
165
+ def _nach_wav(pfad):
166
+ """Konvertiert beliebige Audioformate (m4a, webm, …) nach 16-kHz-Mono-WAV."""
167
+ ziel = tempfile.NamedTemporaryFile(suffix=".wav", delete=False).name
168
+ subprocess.run(["ffmpeg", "-y", "-loglevel", "error", "-i", pfad,
169
+ "-ar", "16000", "-ac", "1", ziel], check=True)
170
+ return ziel
171
+
172
+
173
  def analysieren_api(key, audio, num_speakers):
174
  if not _pruefe(key):
175
  return {"ok": False, "fehler": "Ungültiger Zugangsschlüssel."}
176
  if not audio:
177
  return {"ok": False, "fehler": "Kein Audio übermittelt."}
178
+ quelle = os.path.basename(audio)
179
+ try:
180
+ audio = _nach_wav(audio)
181
+ except subprocess.CalledProcessError:
182
+ return {"ok": False, "fehler": "Audioformat konnte nicht gelesen werden."}
183
  try:
184
  daten = _analyse_gpu(audio, num_speakers)
185
  except Exception as e:
186
  return {"ok": False, "fehler": f"Analyse fehlgeschlagen: {e}"}
187
  zeitpunkt = datetime.now(ZEITZONE)
188
+ md_text = _markdown(daten, quelle, zeitpunkt)
189
  try:
190
  pfad = _speichern(md_text, zeitpunkt)
191
  except Exception: