Youtube to wav

프로필

2024년 12월 20일

147 0

개발 이유

취미로 녹음을 하고 있는데 가끔 공식 음원이 필요할 때가 있다. 그럴 땐 보통 인터넷에 있는 youtube to wav를 지원하는 사이트들을 주로 사용했는데, 그 중 꽤 오랫동안 사용하던 사이트는 최근들어 작동이 안돼기 시작했고, 몇몇 사이트는 피싱 사이트, 몇몇 사이트는 다운로드는 가능한 대신 음원 파일의 마지막에 필요없는 공백이 추가된다던가, 아니면 갯수 제한을 걸어서 후원을 하지 않으면 다운로드 가능한 곡 갯수가 제한이 되어 있는 등의 제약이 있었다.

답답하면 니들이 뛰든지

라는 명언을 되새긴 나는 직접 만들기로 했다.

개발 과정

파이썬에는 정말 "이런 라이브러리도 있다고?" 라는 말이 절로 나올 정도로 다양한 라이브러리가 있는데 이번에 사용한 라이브러리는 pydub과 yt-dlp이다.
처음에는 pytube와 moviepy를 사용했는데, pytube는 최근 업데이트가 느린 건지,

에러 발생: HTTP Error 403: Forbidden

를 계속 내뿜었고, moviepy는 왜인지는 모르겠으나 poetry 가상환경에서 계속 import가 안되는 오류가 발생했다.

Traceback (most recent call last):
  File "/Users/-/Desktop/Youtube-to-wav/app/main.py", line 2, in <module>
    from moviepy.editor import AudioFileClip
ModuleNotFoundError: No module named 'moviepy.editor'

poetry show로 확인해보고 poetry remove를 진행한 뒤 다시 설치해봐도 module not found error가 지속적으로 발생해서 결국 pydub과 yt-dlp를 사용하기로 했다.

결과적으로 완성된 코드는

import os

from pydub import AudioSegment
from yt_dlp import YoutubeDL


def download_youtube_audio(url, output_path="downloads"):
    try:
        if not os.path.exists(output_path):
            os.makedirs(output_path)

        ydl_opts = {
            "format": "bestaudio/best",
            "outtmpl": os.path.join(output_path, "%(title)s.%(ext)s"),
            "postprocessors": [
                {
                    "key": "FFmpegExtractAudio",
                    "preferredcodec": "wav",
                }
            ],
        }

        with YoutubeDL(ydl_opts) as ydl:
            print("다운로드 시작...")
            info = ydl.extract_info(url, download=True)
            print(f"다운로드 완료: {info['title']}")

            wav_path = os.path.join(output_path, f"{info['title']}.wav")
            print(f"변환 완료: {wav_path}")
            return wav_path

    except Exception as e:
        print(f"에러 발생: {str(e)}")
        return None


if __name__ == "__main__":
    url = input("YouTube URL을 입력하세요: ")
    download_youtube_audio(url)

보통 녹음 작업은 윈도우에서 진행을 하는 편이라 윈도우에서 클론을 받아 ffmpeg를 설치한 뒤에 테스트를 해보니 정상적으로 작동하는 걸 볼 수 있었다.

다만, mac 환경에서는 homebrew를 통해

brew install ffmpeg

딸깍 한줄로 끝나는 걸 윈도우 환경에서는 ffmpeg 홈페이지에 접속해서 다운로드를 받고, 폴더 이름을 변경하고 C드라이브에 옮긴 뒤에 따로 환경변수 설정을 진행해야 한다는 점이 조금 귀찮았다.

하지만 이제 이 코드로 내가 원할 때 광고와 무반응, 후원 스트레스 없이 유튜브 음원을 wav 파일로 손에 넣을 수 있게 되었다.

git 레포지토리 주소

github.

#파이썬 #토이프로젝트

댓글 개

댓글을 작성하려면 로그인이 필요합니다