Spaces:
Build error
Build error
| import streamlit as st | |
| import ffmpeg | |
| import os | |
| from PIL import Image | |
| def create_video(image_path, audio_path, output_path): | |
| """ | |
| Create a video from an image and an audio file using FFmpeg. | |
| :param image_path: Path to the image file | |
| :param audio_path: Path to the audio file | |
| :param output_path: Path to save the output video | |
| """ | |
| try: | |
| # FFmpeg command to create a video | |
| input_image = ffmpeg.input(image_path, loop=1, t=ffmpeg.probe(audio_path)['format']['duration']) | |
| input_audio = ffmpeg.input(audio_path) | |
| ffmpeg.output(input_image, input_audio, output_path, vcodec='libx264', acodec='aac', pix_fmt='yuv420p', shortest=None).run() | |
| except Exception as e: | |
| st.error(f"Error during video creation: {e}") | |
| # Streamlit UI | |
| st.title("Video Creator") | |
| st.write("Upload an image and an audio file to create a video.") | |
| # File uploaders | |
| uploaded_image = st.file_uploader("Upload an Image", type=["jpg", "jpeg", "png"]) | |
| uploaded_audio = st.file_uploader("Upload an MP3 file", type=["mp3"]) | |
| if uploaded_image and uploaded_audio: | |
| # Save uploaded files locally | |
| image_path = f"temp_image.{uploaded_image.name.split('.')[-1]}" | |
| audio_path = "temp_audio.mp3" | |
| output_path = "output_video.mp4" | |
| with open(image_path, "wb") as f: | |
| f.write(uploaded_image.getbuffer()) | |
| with open(audio_path, "wb") as f: | |
| f.write(uploaded_audio.getbuffer()) | |
| st.write("Files uploaded successfully.") | |
| # Create video | |
| st.write("Creating video...") | |
| create_video(image_path, audio_path, output_path) | |
| # Show and download video | |
| if os.path.exists(output_path): | |
| st.video(output_path) | |
| with open(output_path, "rb") as f: | |
| st.download_button( | |
| label="Download Video", | |
| data=f, | |
| file_name="output_video.mp4", | |
| mime="video/mp4" | |
| ) | |
| # Cleanup temporary files | |
| os.remove(image_path) | |
| os.remove(audio_path) | |
| os.remove(output_path) | |