import os import random import ffmpeg import gradio as gr import traceback # Function to add music to video def add_music_to_video(video_path, chunks_folder="chunks", output_path="output_with_music.mp4"): try: # List all MP3 files in the chunks folder if not os.path.exists(chunks_folder): return "Error: Chunks folder does not exist." music_files = [os.path.join(chunks_folder, f) for f in os.listdir(chunks_folder) if f.endswith('.mp3')] if not music_files: return "Error: No audio files found in the chunks folder." # Randomly select one MP3 file music_file_path = random.choice(music_files) print(f"Selected music file: {music_file_path}") # Get the duration of the video video_info = ffmpeg.probe(video_path) video_duration = float(video_info['streams'][0]['duration']) print(f"Video duration: {video_duration} seconds") # Trim the music file to match the video duration trimmed_music_path = "trimmed_music.mp3" ffmpeg.input(music_file_path).output( trimmed_music_path, ss=0, t=video_duration ).run(overwrite_output=True) print(f"Trimmed music saved at: {trimmed_music_path}") # Combine video and audio video_input = ffmpeg.input(video_path) audio_input = ffmpeg.input(trimmed_music_path) ffmpeg.concat(video_input, audio_input, v=1, a=1).output( output_path, vcodec="libx264", acodec="aac", strict="experimental" ).run(overwrite_output=True) print(f"Output video saved at: {output_path}") return output_path except Exception as e: print("Error during processing:", e) traceback.print_exc() return f"Error: {str(e)}" # Define Gradio interface def process_video(uploaded_video): try: print("Video received for processing.") video_path = uploaded_video.name print(f"Uploaded video path: {video_path}") output_video = add_music_to_video(video_path, chunks_folder="/content/chunks") if "Error" in output_video: return output_video return output_video except Exception as e: print("Error in process_video:", e) traceback.print_exc() return f"Error: {str(e)}" # Gradio Interface interface = gr.Interface( fn=process_video, inputs=gr.Video(label="Upload Video"), outputs=gr.Video(label="Video with Background Music"), title="Add Background Music to Video", description="Upload a video, and this app will add a background music track that matches the video duration." ) # Launch Gradio app interface.launch(share=True, debug=True)