DEV Community

Hafid Saadi
Hafid Saadi

Posted on

Create a Youtube to MP3 Downloader with Python

Python is a powerful programming language that can be used for many different purposes. One popular use for Python is creating a YouTube downloader, which allows you to save YouTube videos to your computer for offline viewing.

In this tutorial, we will walk through the steps of creating a YouTube downloader in Python using the youtube_dl library and a virtual environment (venv).

Image description

Prerequisites

Before we get started, make sure you have the following tools installed on your computer:

Python 3
pip (Python package manager)

Step 1: Create a Virtual Environment

A virtual environment is a separate Python environment that allows you to install packages and libraries specific to a particular project, without affecting the global Python environment on your computer.

To create a virtual environment in Python, open a terminal and navigate to the directory where you want to store your project. Then, run the following command:

python3 -m venv myenv
Enter fullscreen mode Exit fullscreen mode

This will create a new directory called myenv in your current directory, which will contain the Python executable and all the necessary libraries for your virtual environment.

Step 2: Activate the Virtual Environment

To use the virtual environment, you need to activate it first. To do this, run the following command:

source myenv/bin/activate
Enter fullscreen mode Exit fullscreen mode

You should now see (myenv) at the beginning of your terminal prompt, indicating that the virtual environment is active.

Step 3: Install the youtube_dl Library

Next, we will install the youtube_dl library, which provides the necessary functions for downloading YouTube videos. Run the following command to install youtube_dl

pip install youtube_dl
Enter fullscreen mode Exit fullscreen mode

Step 4: Create the YouTube Downloader Script

Now that we have everything set up, we can create the script to download YouTube videos.

Create a new file called downloader.py and add the following code:

import youtube_dl

def download():
    video_url = input("please enter youtube video url:")
    video_info = youtube_dl.YoutubeDL().extract_info(url=video_url,
                                                     download=False)
    filename = f"downloads/{video_info['title']}.mp3"
    options = {
        'format': 'bestaudio/best',
        'keepvideo': False,
        'outtmpl': filename,
    }
    with youtube_dl.YoutubeDL(options) as ydl:
        ydl.download([video_info['webpage_url']])

    print("Download complete... {}".format(filename))

if __name__ == '__main__':
    download()

Enter fullscreen mode Exit fullscreen mode

This script uses the youtube_dl library to download a YouTube video at the URL specified by the user. The video is saved in the downloads directory with the title of the video as the file name. The video is also converted to an MP3 file, which allows you to play the audio on any device that supports MP3 playback.

Step 5: Run the Script

To run the script, open a terminal and navigate to the directory where the script is located. Then, activate the virtual environment by running the following command:

check it on github

Top comments (5)

Collapse
 
rivercantrell profile image
RiverCantrell • Edited

Hey everyone - I'm new to this forum, and although this thread is a bit old, I wanted to pitch in my two cents! After reading the tutorial, it looks like creating an awesome YouTube to MP3 downloader is totally achievable. I prefer the ease of using these converters on vlogtribe.com as opposed to writing a script. However, you've really got to make sure you get the right converter since there's a lot of duds out there. Once you find the right one though, you should be good to go. Just wanted to share my input before signing off. Cheers!

Collapse
 
mattkocaj profile image
matt kocaj

Why would I do this over the YouTubeDL cli?

Collapse
 
peterkassenaar profile image
Peter Kassenaar

It might come in handy as a general purpose function I assume, if you want to automate the download of a bunch of videos and save them as MP3?

Instead of asking for a new url via input(), you can loop over the contents of an array containing the url's.

You can fill this array for instance by scraping a particular page or website - or read from a file of course. However, the script presented above looks a bit barren, but it can serve as a starting point I assume?

Collapse
 
mattkocaj profile image
matt kocaj

I'm not trying to be critical. But the cli interface supports things like specifying audio only, and even ingesting a list of URLs as input for a batch activity. I just don't see how this adds value on top of that. Am I still missing something?

Thread Thread
 
iflis7 profile image
Hafid Saadi • Edited

Thanks for sharing brother. I'll be be doing one on the cli as it provides more features. The goal of this or is just to get me started.