make_waveform / app.py
1littlecoder's picture
changing codecs
fa34786 verified
import gradio as gr
from moviepy.editor import AudioFileClip, ImageClip, CompositeVideoClip
from PIL import Image
# Ensure compatibility with updated PIL library
if not hasattr(Image, 'ANTIALIAS'): # Image.ANTIALIAS is deprecated; LANCZOS is the replacement
Image.ANTIALIAS = Image.LANCZOS
def create_video(image, audio):
# Load the audio file
audio_clip = AudioFileClip(audio)
# Load the main image and set its duration to match the audio
image_clip = ImageClip(image).set_duration(audio_clip.duration)
# Load the logo image, resize it, and position it in the top-right corner
logo = ImageClip("Logo.png").resize(height=100) # Adjust the height as needed
logo = logo.set_position(("right", "top")).set_duration(audio_clip.duration)
# Create a composite video with the main image and the logo overlay
video_clip = CompositeVideoClip([image_clip, logo]).set_audio(audio_clip)
# Save the video to a temporary file with Twitter-compatible settings
output_path = "/tmp/output_video_with_logo.mp4"
video_clip.write_videofile(
output_path,
fps=30,
codec="libx264",
audio_codec="aac",
preset="slow",
ffmpeg_params=["-b:v", "2000k"] # Adjust bitrate if needed
)
return output_path
# Create Gradio interface
iface = gr.Interface(
fn=create_video,
inputs=[
gr.Image(type="filepath", label="Upload Image"),
gr.Audio(type="filepath", label="Upload Audio")
],
outputs=gr.Video(label="Output Video"),
title="Image + Audio to Video Converter with Logo Overlay",
description="Upload an image and an audio file to generate a video with the image and audio combined, including a logo overlay in the top-right corner."
)
iface.launch()