Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import os | |
| import ffmpeg | |
| import shutil | |
| # Function to split the audio file using FFmpeg | |
| def split_audio_ffmpeg(input_audio, output_directory, chunk_duration=30): | |
| """ | |
| Split an audio file into smaller chunks using FFmpeg. | |
| :param input_audio: Path to the input audio file | |
| :param output_directory: Directory where output chunks will be saved | |
| :param chunk_duration: Duration of each chunk in seconds | |
| """ | |
| os.makedirs(output_directory, exist_ok=True) | |
| try: | |
| # Get the total duration of the audio file using ffmpeg.probe() | |
| probe = ffmpeg.probe(input_audio.name, v='error', select_streams='a', show_entries='stream=duration') | |
| duration = float(probe['streams'][0]['duration']) | |
| print(f"Audio duration: {duration} seconds") | |
| # Split the file into chunks | |
| chunks = [] | |
| for i in range(0, int(duration), chunk_duration): | |
| chunk_file = os.path.join(output_directory, f"chunk_{i // chunk_duration + 1}.mp3") | |
| ffmpeg.input(input_audio.name, ss=i, t=chunk_duration).output(chunk_file).run(quiet=True, overwrite_output=True) | |
| chunks.append(chunk_file) | |
| print(f"Generated: {chunk_file}") | |
| # Create a zip archive of the chunks | |
| zip_filename = '/tmp/audio_chunks.zip' | |
| shutil.make_archive(zip_filename.replace('.zip', ''), 'zip', output_directory) | |
| return zip_filename | |
| except Exception as e: | |
| print(f"Error during split: {e}") | |
| return f"Error during file processing: {e}" | |
| # Gradio interface function | |
| def process_audio(input_audio): | |
| output_directory = "/tmp/output_chunks" | |
| zip_file = split_audio_ffmpeg(input_audio, output_directory, chunk_duration=30) | |
| # Check if zip creation was successful | |
| if "Error" in zip_file: | |
| return zip_file | |
| return gr.File(zip_file) | |
| # Gradio interface setup | |
| interface = gr.Interface( | |
| fn=process_audio, | |
| inputs=gr.File(label="Upload Audio", file_types=["audio"]), | |
| outputs=gr.File(label="Download Chunks as Zip"), | |
| title="Audio Splitter", | |
| description="Upload an audio file to split it into smaller chunks of 30 seconds each and download as a zip.", | |
| ) | |
| # Launch the Gradio interface | |
| if __name__ == "__main__": | |
| interface.launch() | |