import gradio as gr import os import yt_dlp import markdown def downloader(video_url, audio_format): # Ensure the directory exists os.makedirs('audios', exist_ok=True) # Use a temporary placeholder for the output file final_output_path = f"audios/%(title)s.%(ext)s" ydl_opts = { 'format': 'bestaudio/best', 'postprocessors': [{ 'key': 'FFmpegExtractAudio', 'preferredcodec': audio_format, }], 'outtmpl': final_output_path } with yt_dlp.YoutubeDL(ydl_opts) as ydl: result = ydl.download([video_url]) # Replace %(ext)s with the actual format final_output_path = final_output_path.replace('%(ext)s', audio_format) return final_output_path logschart = """ ### Changelog: #### 2.0 - 2024-05-16 ##### Added - **Change WebUI**: Updated the web interface to a new version. - **Directory Check**: Added a check to ensure the `audios` directory exists before attempting to save files to it. - `os.makedirs('audios', exist_ok=True)` ##### Fixed - **File Not Found Error**: Resolved the issue where the file could not be found due to incorrect output path handling. ### Summary of Changes 1. **Ensured Directory Exists**: Added code to create the `audios` directory if it doesn't exist to prevent file saving errors. 2. **Output Path Handling**: Modified the output template to use a placeholder for the file extension, which yt-dlp will replace with the actual extension upon downloading. 3. **File Renaming Logic**: After downloading the audio, the code now renames the file to match the desired audio name and format. 4. **Correct File Path Return**: The correct file path is now returned from the `downloader` function, ensuring that the Gradio `gr.Audio` component can properly display and play the downloaded audio file. These changes collectively ensure that the audio file is downloaded correctly, renamed appropriately, and made accessible to the Gradio interface for playback. """ with gr.Blocks() as demo: gr.Markdown("# YouTube Downloader 2.0") with gr.Row(): video_url = gr.Textbox(label="YouTube video link") with gr.Row(): audio_format = gr.Radio(["wav", "flac", "mp3"], label="Select the output format", value="wav") with gr.Row(): output = gr.Audio(label="Output") with gr.Row(): download_button = gr.Button("Download") download_button.click(downloader, inputs=[video_url, audio_format], outputs=[output]) with gr.Group(): with gr.Row(): gr.Markdown(logschart) demo.launch()