ai video generate convent pic to video
AI Video Generator – VO3 Style
from flask import Flask, request, send_file
from flask_cors import CORS
from moviepy.editor import *
import tempfile
import os
import pyttsx3 # For text-to-speech
app = Flask(__name__)
CORS(app)
# Save uploaded file to disk
def save_file(uploaded_file):
temp_file = tempfile.NamedTemporaryFile(delete=False)
uploaded_file.save(temp_file.name)
return temp_file.name
# Text-to-speech to MP3
def text_to_speech(text):
tts_path = tempfile.NamedTemporaryFile(suffix=".mp3", delete=False).name
engine = pyttsx3.init()
engine.save_to_file(text, tts_path)
engine.runAndWait()
return tts_path
@app.route('/api/generate-script-video', methods=['POST'])
def script_to_video():
script = request.form.get("script")
music = request.files.get("music")
if not script:
return "No script provided", 400
# Create narration audio
tts_path = text_to_speech(script)
narration = AudioFileClip(tts_path)
# Create video from text
txt_clip = TextClip(script, fontsize=30, color='white', size=(720, 480))
txt_clip = txt_clip.set_duration(narration.duration).on_color(color=(0,0,0), col_opacity=1)
# Merge background music if provided
if music:
music_path = save_file(music)
music_audio = AudioFileClip(music_path).volumex(0.4).subclip(0, narration.duration)
final_audio = CompositeAudioClip([narration.volumex(1.0), music_audio])
else:
final_audio = narration
txt_clip = txt_clip.set_audio(final_audio)
output_path = tempfile.NamedTemporaryFile(suffix=".mp4", delete=False).name
txt_clip.write_videofile(output_path, fps=24)
return send_file(output_path, mimetype='video/mp4', as_attachment=True, download_name="script_video.mp4")
@app.route('/api/generate-image-video', methods=['POST'])
def image_to_video():
images = request.files.getlist("images")
music = request.files.get("music")
if not images:
return "No images provided", 400
clips = []
for img in images:
img_path = save_file(img)
clip = ImageClip(img_path).set_duration(2).resize(height=480)
clips.append(clip)
video = concatenate_videoclips(clips, method="compose")
if music:
music_path = save_file(music)
audio = AudioFileClip(music_path).subclip(0, video.duration)
video = video.set_audio(audio)
output_path = tempfile.NamedTemporaryFile(suffix=".mp4", delete=False).name
video.write_videofile(output_path, fps=24)
return send_file(output_path, mimetype='video/mp4', as_attachment=True, download_name="image_video.mp4")
if __name__ == "__main__":
app.run(debug=True)
from flask import Flask, request, send_file
from flask_cors import CORS
from moviepy.editor import *
import os
import tempfile
app = Flask(name)
CORS(app) # Allow frontend requests
Helper to save uploaded files
if name == 'main':
app.run(debug=True)