Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -2,7 +2,7 @@ import os
|
|
| 2 |
import random
|
| 3 |
import requests
|
| 4 |
import gradio as gr
|
| 5 |
-
from moviepy.editor import VideoFileClip, concatenate_videoclips, AudioFileClip,
|
| 6 |
from moviepy.audio.fx.all import audio_loop
|
| 7 |
import edge_tts
|
| 8 |
import asyncio
|
|
@@ -21,7 +21,7 @@ def run_async(coro):
|
|
| 21 |
loop.close()
|
| 22 |
return result
|
| 23 |
|
| 24 |
-
# Load local text generation model
|
| 25 |
try:
|
| 26 |
generator = pipeline("text-generation", model="mistralai/Mistral-7B-Instruct-v0.2", device="cpu")
|
| 27 |
except Exception as e:
|
|
@@ -53,7 +53,7 @@ def generate_script(prompt, custom_text=None):
|
|
| 53 |
except Exception as e:
|
| 54 |
print(f"Error generating script: {e}")
|
| 55 |
|
| 56 |
-
# Fallback mock response
|
| 57 |
if "recetas" in prompt.lower():
|
| 58 |
return """
|
| 59 |
1. Tacos al pastor: Jugosa carne marinada con piña.
|
|
@@ -75,19 +75,6 @@ async def generate_voice(text, output_file="output.mp3"):
|
|
| 75 |
await communicate.save(output_file)
|
| 76 |
return output_file
|
| 77 |
|
| 78 |
-
# Generate subtitles
|
| 79 |
-
def generate_subtitles(text, duration, fps=24):
|
| 80 |
-
words = text.split()
|
| 81 |
-
avg_duration = duration / len(words)
|
| 82 |
-
subtitles = []
|
| 83 |
-
for i, word in enumerate(words):
|
| 84 |
-
start_time = i * avg_duration
|
| 85 |
-
end_time = (i + 1) * avg_duration
|
| 86 |
-
subtitle = TextClip(word, fontsize=30, color='white', bg_color='black', size=(1280, 100), font='Arial')
|
| 87 |
-
subtitle = subtitle.set_position(('center', 'bottom')).set_duration(avg_duration).set_fps(fps)
|
| 88 |
-
subtitles.append(subtitle)
|
| 89 |
-
return subtitles
|
| 90 |
-
|
| 91 |
# Download and trim video
|
| 92 |
def download_and_trim_video(url, duration, output_path):
|
| 93 |
response = requests.get(url, stream=True)
|
|
@@ -138,15 +125,11 @@ def create_video(prompt, custom_text, music_file):
|
|
| 138 |
if music_file:
|
| 139 |
music = AudioFileClip(music_file.name)
|
| 140 |
music = audio_loop(music, duration=video_duration)
|
| 141 |
-
|
| 142 |
else:
|
| 143 |
-
|
| 144 |
-
|
| 145 |
-
# Add subtitles
|
| 146 |
-
subtitles = generate_subtitles(script, video_duration)
|
| 147 |
-
final_clip = CompositeVideoClip([final_clip] + subtitles)
|
| 148 |
|
| 149 |
-
# Write final video
|
| 150 |
final_clip.write_videofile(output_video, codec="libx264", audio_codec="aac", fps=24)
|
| 151 |
|
| 152 |
# Clean up
|
|
|
|
| 2 |
import random
|
| 3 |
import requests
|
| 4 |
import gradio as gr
|
| 5 |
+
from moviepy.editor import VideoFileClip, concatenate_videoclips, AudioFileClip, CompositeVideoClip
|
| 6 |
from moviepy.audio.fx.all import audio_loop
|
| 7 |
import edge_tts
|
| 8 |
import asyncio
|
|
|
|
| 21 |
loop.close()
|
| 22 |
return result
|
| 23 |
|
| 24 |
+
# Load local text generation model
|
| 25 |
try:
|
| 26 |
generator = pipeline("text-generation", model="mistralai/Mistral-7B-Instruct-v0.2", device="cpu")
|
| 27 |
except Exception as e:
|
|
|
|
| 53 |
except Exception as e:
|
| 54 |
print(f"Error generating script: {e}")
|
| 55 |
|
| 56 |
+
# Fallback mock response
|
| 57 |
if "recetas" in prompt.lower():
|
| 58 |
return """
|
| 59 |
1. Tacos al pastor: Jugosa carne marinada con piña.
|
|
|
|
| 75 |
await communicate.save(output_file)
|
| 76 |
return output_file
|
| 77 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 78 |
# Download and trim video
|
| 79 |
def download_and_trim_video(url, duration, output_path):
|
| 80 |
response = requests.get(url, stream=True)
|
|
|
|
| 125 |
if music_file:
|
| 126 |
music = AudioFileClip(music_file.name)
|
| 127 |
music = audio_loop(music, duration=video_duration)
|
| 128 |
+
final_clip = final_clip.set_audio(music.set_duration(video_duration))
|
| 129 |
else:
|
| 130 |
+
final_clip = final_clip.set_audio(audio)
|
|
|
|
|
|
|
|
|
|
|
|
|
| 131 |
|
| 132 |
+
# Write final video (no subtitles to avoid ImageMagick error)
|
| 133 |
final_clip.write_videofile(output_video, codec="libx264", audio_codec="aac", fps=24)
|
| 134 |
|
| 135 |
# Clean up
|