Tim13ekd commited on
Commit
6dc3853
·
verified ·
1 Parent(s): ffc2502

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +15 -17
app.py CHANGED
@@ -7,7 +7,7 @@ import requests
7
  import base64
8
  import math
9
  import shutil
10
- import shlex # für sicheres Escapen von Text
11
 
12
  # Erlaubte Dateiformate
13
  allowed_medias = [".png", ".jpg", ".jpeg", ".bmp", ".gif", ".tiff"]
@@ -19,8 +19,18 @@ def save_temp_audio(audio_file):
19
  """
20
  Speichert die hochgeladene Datei sicher mit korrekter Endung in einem temporären Verzeichnis.
21
  """
22
- # Prüfen, ob die Datei ein NamedTemporaryFile ist (was normalerweise erwartet wird)
23
- if hasattr(audio_file, 'name'): # Sicherstellen, dass es eine Datei ist
 
 
 
 
 
 
 
 
 
 
24
  ext = Path(audio_file.name).suffix
25
  if ext.lower() not in allowed_audios:
26
  ext = ".mp3" # Standard, falls Endung fehlt
@@ -30,7 +40,7 @@ def save_temp_audio(audio_file):
30
  shutil.copyfileobj(audio_file, f) # Kopiere den Inhalt der Datei
31
  return temp_audio
32
  else:
33
- raise ValueError("Das übergebene Audio ist kein gültiges Dateiformat")
34
 
35
  def convert_to_wav(audio_path):
36
  wav_path = Path(audio_path).with_suffix(".wav")
@@ -181,16 +191,4 @@ with gr.Blocks() as demo:
181
  )
182
  duration_input = gr.Number(value=3, label="Dauer pro Bild in Sekunden", precision=1)
183
  fade_input = gr.Number(value=0.7, label="Fade Dauer in Sekunden", precision=1)
184
- ypos_input = gr.Slider(minimum=0.0, maximum=0.9, step=0.01, value=0.5, label="Y-Position für alle Texte (0=oben, 0.5=mitte, 0.9=unten)")
185
- font_size_input = gr.Number(value=60, label="Textgröße (px)")
186
- out_video = gr.Video(interactive=False, label="Generiertes Video")
187
- status = gr.Textbox(interactive=False, label="Status")
188
-
189
- btn = gr.Button("Video erstellen")
190
- btn.click(
191
- fn=generate_slideshow_with_audio,
192
- inputs=[img_input, audio_input, duration_input, ypos_input, fade_input, font_size_input],
193
- outputs=[out_video, status]
194
- )
195
-
196
- demo.launch()
 
7
  import base64
8
  import math
9
  import shutil
10
+ import io # Für NamedString-Handling
11
 
12
  # Erlaubte Dateiformate
13
  allowed_medias = [".png", ".jpg", ".jpeg", ".bmp", ".gif", ".tiff"]
 
19
  """
20
  Speichert die hochgeladene Datei sicher mit korrekter Endung in einem temporären Verzeichnis.
21
  """
22
+ # Wenn audio_file ein NamedString (Byte-Inhalt) ist
23
+ if isinstance(audio_file, str): # Gradio gibt es als NamedString zurück, wenn es sich um einen String handelt
24
+ # Hier können wir die Datei als binären Inhalt behandeln
25
+ ext = Path(audio_file).suffix
26
+ if ext.lower() not in allowed_audios:
27
+ ext = ".mp3" # Standard, falls Endung fehlt
28
+ temp_audio = Path(tempfile.mkdtemp()) / f"input{ext}"
29
+ with open(temp_audio, "wb") as f:
30
+ f.write(audio_file.encode()) # Binäre Datei schreiben
31
+ return temp_audio
32
+
33
+ elif hasattr(audio_file, 'name'): # Wenn es sich um eine echte Datei handelt
34
  ext = Path(audio_file.name).suffix
35
  if ext.lower() not in allowed_audios:
36
  ext = ".mp3" # Standard, falls Endung fehlt
 
40
  shutil.copyfileobj(audio_file, f) # Kopiere den Inhalt der Datei
41
  return temp_audio
42
  else:
43
+ raise ValueError("Das übergebene Audio ist kein gültiges Dateiformat oder NamedString.")
44
 
45
  def convert_to_wav(audio_path):
46
  wav_path = Path(audio_path).with_suffix(".wav")
 
191
  )
192
  duration_input = gr.Number(value=3, label="Dauer pro Bild in Sekunden", precision=1)
193
  fade_input = gr.Number(value=0.7, label="Fade Dauer in Sekunden", precision=1)
194
+ ypos_input = gr.Slider(minimum=0.0, maximum=0.9, step=0.01, value=0.5, label="Y-Position für alle Texte (0=oben, 0