import os
import subprocess
import time
from pytube import Playlist, YouTube
from multiprocessing import Pool
def convert_youtube_video_to_mp3(args):
url, output_path = args
# create a youtube object
yt = YouTube(url)
# get the first video stream
stream = yt.streams.get_audio_only()
# download the video
stream.download(output_path=output_path)
# get the file name
file_name = ''.join(c for c in yt.title if c.isalnum() or c in ' _-') # remove invalid characters
# create the path of the downloaded video
video_path = os.path.join(output_path, f"{file_name}.mp4")
# convert the video to mp3
ffmpeg_path = "/usr/local/bin/ffmpeg" # replace with the actual path to ffmpeg
mp3_path = os.path.join(output_path, f"{os.path.splitext(file_name)[0]}.mp3")
subprocess.check_call([ffmpeg_path, "-i", video_path, mp3_path])
# remove the downloaded video
os.remove(video_path)
def convert_youtube_playlist_to_mp3(playlist_url, output_path):
"""Converts a youtube playlist into mp3 and saves them."""
# create a playlist object
playlist = Playlist(playlist_url)
# create a multiprocessing pool
with Pool() as pool:
# map the video urls to the conversion function
pool.map(convert_youtube_video_to_mp3, [(video, output_path) for video in playlist.video_urls])
# wait for all processes to finish
pool.close()
pool.join()
if __name__ == "__main__":
playlist_url = "https://www.youtube.com/watch?v=rmzJgQi354M&list=RDGMEMveQBJ5EaHfODz2alVFs-IQVMrmzJgQi354M"
output_path = "./downloads"
convert_youtube_playlist_to_mp3(playlist_url, output_path)
Comments
0 B
|👍
/👎