Sign In

๐ŸŽฃ ๋‹จ 10๋ถ„! Youtube ์˜ค๋””์˜ค ์ถ”์ถœ ์ฝ”๋“œ ์™„์„ฑ

Huhsame
ํ•œ๊ตญ์–ด๋ฅผ ๋ฐ›์•„์“ฐ๊ธฐ ํ•  ๋• ๋ฌด์กฐ๊ฑด ๋„ค์ด๋ฒ„๋‹ค. ํด๋กœ๋ฐ”๋…ธํŠธ๋งŒํผ ํ•œ๊ตญ์–ด๋ฅผ ์ž˜ ์ธ์‹ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ๋ชจ๋“  ์ž‘์—…์„ ํ• ๋•Œ (chatgpt๋กœ ์š”์•ฝ, ์˜์ƒ ์ž๋ง‰ ์ถ”๊ฐ€ ๋“ฑ) ๊ผญ ์˜ค๋””์˜ค๋ฅผ ์ถ”์ถœํ•ด์„œ ํด๋กœ๋ฐ” ๋…ธํŠธ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.
๊ท€์ฐฎ์•„์„œ ๊ทธ๋•Œ๊ทธ๋•Œ ๊ตฌ๊ธ€์— youtube audio download ๋กœ ๊ฒ€์ƒ‰ํ•ด์„œ ๋‚˜์˜ค๋Š” ์›น์—์„œ ํ–ˆ์—ˆ๋Š”๋ฐ, ๊ณ„์† ๋ฐ˜๋ณต๋˜๋Š” ์ž‘์—…์ด๋‹ค๋ณด๋‹ˆ ๋กœ์ปฌ์—์„œ ์ง์ ‘ ์‹คํ–‰์‹œ์ผœ๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.
์ด ๋ชจ๋“  ๊ณผ์ •์€ 10๋ถ„ ๋งŒ์— ๋๋‚ฌ๋‹ค.

1. Coding

์š”์ฆ˜ langchain์— ๋น ์ ธ์žˆ์–ด์„œ ์ถ”ํ›„์— ์˜ค๋””์˜ค ์ถ”์ถœํ•œ ๊ฑธ ๊ฐ€์ง€๊ณ  ๋” ์ž๋™ํ™” ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€์•Š์„๊นŒ ์ƒ๊ฐํ–ˆ์ง€๋งŒ, chatgpt๋Š” langchain์ด๋ž€ ๋ง์„ ๊ฐ€๋ฟํžˆ ๋ฌด์‹œํ•˜๊ณ  ๊ทธ๋ƒฅ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์—ˆ๋‹ค.
์ƒ์„ธํ•˜๊ฒŒ ์ฝ”๋“œ ๋กœ์ง๊นŒ์ง€ ์„ค๋ช…ํ•ด์ฃผ๊ณ , ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•„์•ผํ•˜๋Š” ํŒจํ‚ค์ง€๊นŒ์ง€ ์„ค๋ช…ํ•ด์ค€๋‹ค. sweet gpt..
from pytube import YouTube

def download_youtube_audio(url, output_path):
    yt = YouTube(url)
    # YouTube ์˜์ƒ์˜ ์ œ๋ชฉ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
    title = yt.title
    # ์˜ค๋””์˜ค ์ŠคํŠธ๋ฆผ ์ค‘ ์ตœ๊ณ  ํ’ˆ์งˆ์˜ ์ŠคํŠธ๋ฆผ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    audio_stream = yt.streams.filter(only_audio=True).first()
    # ์˜ค๋””์˜ค ํŒŒ์ผ์„ ์ง€์ •๋œ ๊ฒฝ๋กœ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
    audio_stream.download(output_path, filename=title + ".mp3")

# ์‚ฌ์šฉ ์˜ˆ์ œ
url = "์—ฌ๊ธฐ์— YouTube ๋™์˜์ƒ URL์„ ์ž…๋ ฅํ•˜์„ธ์š”"
output_path = "์—ฌ๊ธฐ์— ์ €์žฅํ•  ๊ฒฝ๋กœ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”"
download_youtube_audio(url, output_path)
์™„์„ฑ๋˜์–ด๋ฒ„๋ ธ๋‹ค.
์‚ฌ์‹ค ๋‚œ ๋Œ€๋ถ€๋ถ„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์›น์ชฝ๋งŒ ํ•ด์™€์„œ ํŒŒ์ด์ฌ์€ ํ—ท๊ฐˆ๋ฆด๋•Œ๊ฐ€ ๋งŽ๋‹ค. ๊ทธ๋ž˜์„œ ํŒŒ์ด์ฌ์œผ๋กœ ์ž‘์—…ํ• ๋• ๊ตฌ๊ธ€ ๊ฒ€์ƒ‰์ฐฝ๊ณผ ๋Š˜ ํ•จ๊ป˜ ํ•ด์™”๋Š”๋ฐ, ๊ทธ๋Ÿด ํ•„์š”์—†์ด 1๋ถ„๋งŒ์— ๋๋‚˜๋ฒ„๋ ธ๋‹ค.
์‹คํ–‰ํ•˜๋Š” ์ปค๋งจ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ• ๋•Œ ์œ ํŠœ๋ธŒ url์„ ๋„ฃ์–ด์ฃผ๊ณ ์‹ถ์–ด์„œ, ์ด๋ ‡๊ฒŒ ์š”์ฒญํ–ˆ๋‹ค.
import sys
from pytube import YouTube

def download_youtube_audio(url, output_path):
    yt = YouTube(url)
    title = yt.title
    audio_stream = yt.streams.filter(only_audio=True).first()
    audio_stream.download(output_path, filename=title + ".mp3")

if __name__ == "__main__":
    if len(sys.argv) < 3:
        print("์‚ฌ์šฉ๋ฒ•: python script.py [YouTube URL] [์ €์žฅ ๊ฒฝ๋กœ]")
    else:
        url = sys.argv[1]
        output_path = sys.argv[2]
        download_youtube_audio(url, output_path)
์ด๋ ‡๊ฒŒ ์นœ์ ˆํ•  ์ˆ˜๊ฐ€. ์ปค๋งจ๋“œ ์ž…๋ ฅํ• ๋•Œ ์ธ์ž๋ฅผ ์–ด๋–ป๊ฒŒ ์ ์–ด์•ผํ•˜๋Š” ์ง€ ๊นŒ์ง€ ์ƒ์„ธํ•˜๊ฒŒ ์•ˆ๋‚ด๋ฅผ ํ•ด์ค€๋‹ค.
์ •๋ง ๊ฐœ๋ฐœ์ด๋‚˜ ์ปดํ“จํ„ฐ์— ์ต์ˆ™์น˜ ์•Š์€ ์‚ฌ๋žŒ๋“ค๊นŒ์ง€ chatgpt๋กœ ์‰ฝ๊ฒŒ ์›ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š”๊ฒŒ ์ฒด๊ฐ๋œ๋‹ค.
์•„? ๊ทธ๋Ÿฐ๋ฐ ์ด์ž์‹์ด ๊ณผํ•˜๊ฒŒ ์นœ์ ˆํ•ด์„œ ์ถ”์ถœ๋œ ์˜ค๋””์˜ค ์ €์žฅ๊ฒฝ๋กœ๊นŒ์ง€ ์ธ์ˆ˜๋กœ ๋„˜๊ฒจ๋ฒ„๋ ธ๋‹ค. ๋‚˜๋Š” ์˜ค๋””์˜ค ์ €์žฅ๊ฒฝ๋กœ๋Š” ๋”ฐ๋กœ ์˜ค๋””์˜ค ํด๋”๋ฅผ ๋งŒ๋“ค์–ด ๋‘์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋‘ ๊ทธ์ชฝ์œผ๋กœ ์ €์žฅ๋˜๊ฒŒ ์ฝ”๋“œ์— ๋ฐ•์•„๋‘๊ณ , ์œ ํŠœ๋ธŒ ๋งํฌ๋งŒ ์ธ์ž๋กœ ๋ฐ›๊ธฐ๋กœ ํ–ˆ๋‹ค.
์ƒ๊ฐํ•ด๋ณด๋‹ˆ, ์ €์žฅํ•˜๊ณ  ํด๋กœ๋ฐ”๋…ธํŠธ์— ์—…๋กœ๋“œํ• ๋•Œ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์‹œ๊ฐ„์„ ์ œ๋ชฉ์— ํฌํ•จ์‹œํ‚ค๊ธฐ๋กœ ํ–ˆ๋‹ค.
import sys
from pytube import YouTube
from datetime import datetime

def download_youtube_audio(url, output_path="."):
    yt = YouTube(url)
    title = yt.title
    # ํ˜„์žฌ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ํฌ๋งท์— ๋งž์ถ”์–ด ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    now = datetime.now().strftime("%Y%m%d_%H%M%S")
    filename = f"{now}_{title}.mp3"
    audio_stream = yt.streams.filter(only_audio=True).first()
    audio_stream.download(output_path, filename=filename)

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("์‚ฌ์šฉ๋ฒ•: python script.py [YouTube URL]")
    else:
        url = sys.argv[1]
        download_youtube_audio(url)
๋‚˜์ด์Šค.
์ผ๋‹จ ๋‚ ์งœ ํ˜•์‹์„ ๋‚ด๊ฐ€ ์ž์ฃผ์“ฐ๋Š” %Y.%m.%d_%H:%M:%S๋กœ ์ˆ˜์ •ํ•˜์˜€๋‹ค.
๋˜ ๋“œ๋Š” ์ƒ๊ฐ์€ ์œ ํŠœ๋ธŒ ์ œ๋ชฉ์ด ๊ธด ๊ฒฝ์šฐ์—” ์–ด๋–ป๊ฒŒ ๋  ๊ฒƒ์ธ๊ฐ€..?
์œ ํŠœ๋ธŒ์—” ๊ฐ„๊ฒฐํ•œ ์ œ๋ชฉ์ด์™ธ์— ๊ฒ€์ƒ‰ ์œ ์ž…์„ ์œ„ํ•ด ๊ตฌ๊ตฌ์ ˆ์ ˆ ์—ฌ๋Ÿฌ ํ‚ค์›Œ๋“œ๋“ค์ด ๋ถ™๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ํŒŒ์ผ์„ ์ €์žฅํ• ๋•Œ ์ œ๋ชฉ ๊ธธ์ด์ œํ•œ์œผ๋กœ ์—๋Ÿฌ๋‚˜๋Š”๊ฑธ ๋‘๊ณ ๋ณผ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋ฐ”๋กœ chatgpt์—๊ฒŒ ํ™•์ธ์„ ๋“ค์–ด๊ฐ„๋‹ค.
๋‚ด๊ฐ€ ์›ํ–ˆ๋˜ ๊ฒƒ ๋ณด๋‹ค ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ์ฃผ์—ˆ๋‹ค. ๊ณ ๋งˆ์›Œ.
ํ•œ๊ตญ์–ด ์˜์ƒ์ด ๋Œ€๋ถ€๋ถ„์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•œ๊ตญ์–ด๋ผ๊ณ  ๋ช…์‹œ๋ฅผ ํ•ด์ฃผ๋ฉด์„œ ์ œ๋ชฉ ๊ธธ์ด๋ฅผ ์ œํ•œํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ–ˆ๋‹ค.
import sys
from pytube import YouTube
from datetime import datetime

def shorten_title(title, max_length):
    # ์ œ๋ชฉ์„ ์ง€์ •๋œ ์ตœ๋Œ€ ๊ธธ์ด์— ๋งž์ถ”์–ด ์ž๋ฆ…๋‹ˆ๋‹ค.
    return title if len(title) <= max_length else title[:max_length-3] + "..."

def download_youtube_audio(url, output_path="."):
    yt = YouTube(url)
    title = yt.title
    # ํŒŒ์ผ ์ด๋ฆ„์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๊ธธ์ด๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
    max_title_length = 100
    short_title = shorten_title(title, max_title_length)
    now = datetime.now().strftime("%Y%m%d_%H%M%S")
    filename = f"{now}_{short_title}.mp3"
    audio_stream = yt.streams.filter(only_audio=True).first()
    audio_stream.download(output_path, filename=filename)

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("์‚ฌ์šฉ๋ฒ•: python script.py [YouTube URL]")
    else:
        url = sys.argv[1]
        download_youtube_audio(url)
๊ธฐํŠนํ•ด๋ผ. ๋งˆ์ง€๋ง‰์œผ๋กœ ์‹œ๊ฐ„์ด ํ•œ๊ตญ์‹œ๊ฐ„์œผ๋กœ ๋‚˜์˜ค๋Š”์ง€ ๋ฌธ๋“ ๊ถ๊ธˆํ–ˆ๋‹ค. ์ˆ˜๋งŽ์€ ์—๋Ÿฌ๋ฅผ ๊ฒช์–ด์˜จ ์‚ฌ๋žŒ์˜ ์†Œ์žƒ๊ธฐ ์ „์— ์™ธ์–‘๊ฐ„ ๊ณ ์น˜๊ธฐ..
์‹œ์Šคํ…œ ์‹œ๊ฐ„๋Œ€๋ฅผ ๋”ฐ๋ฅธ๋‹ค๊ณ  ํ•œ๋‹ค. ๋‹คํ–‰ํžˆ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•  ํ•„์š”๋Š” ์—†๊ฒ ๋‹ค.

2. Debuging

์ž ์ด์ œ ์™„์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ ์‹œ์ผœ๋ณด๋ฉด์„œ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž.
โš ๏ธ
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1006)
๋ฌด์Šจ ์ธ์ฆ์„œ ๊ฒ€์ฆ์ด ์•ˆ๋œ๋‹ค๊ณ  ๋–ด๋‹ค. ๋ฐ”๋กœ chatgpt๋กœ ๋ณต๋ถ™ํ•ด๋ณด์•˜๋‹ค.
์ผ์–ธ๋ฐ˜๊ตฌ ์—†์ด ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋งŒ ๋ณต๋ถ™ํ•ด๋„ chatgpt๊ฐ€ ์—๋Ÿฌ๋ฉ”์„ธ์ง€ ์ž„์„ ์ธ์‹ํ•˜๊ณ  ๊ทธ์— ๋Œ€ํ•œ ์ด์œ ์™€ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•๋“ค์„ ์ œ์‹œํ•ด์ค€๋‹ค. ์‹œํ‚ค๋Š” ๋Œ€๋กœ ํ•ด๋ณธ๋‹ค.
๋‚œ ์ฒซ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์„ ์‹œ๋„ํ•˜๋‹ˆ ๋ฐ”๋กœ ์—๋Ÿฌ๊ฐ€ ํ•ด๊ฒฐ์ด ๋˜์—ˆ๋‹ค.

3. Result

์™„์„ฑ๋œ ์ฝ”๋“œ

import sys
from pytube import YouTube
from datetime import datetime

def shorten_title(title, max_length):
    # ์ œ๋ชฉ์„ ์ง€์ •๋œ ์ตœ๋Œ€ ๊ธธ์ด์— ๋งž์ถ”์–ด ์ž๋ฆ…๋‹ˆ๋‹ค.
    return title if len(title) <= max_length else title[: max_length - 3] + "..."

def download_youtube_audio(url):
    base_path = "/path"
    path = "/@ Resource/Audio"
    output_path = base_path + path
    # ํŒŒ์ผ ์ด๋ฆ„์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๊ธธ์ด๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

    yt = YouTube(url)
    title = yt.title

    max_title_length = 100
    short_title = shorten_title(title, max_title_length)
    now = datetime.now().strftime("%Y.%m.%d_%H:%M:%S")
    filename = f"{now} - {short_title}.mp3"

    audio_stream = yt.streams.filter(only_audio=True).first()
    audio_stream.download(output_path, filename=filename)
    print(f"{filename} has downloaded at {path}")

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("์‚ฌ์šฉ๋ฒ•: python extract_audio.py [YouTube URL]")
    else:
        url = sys.argv[1]
        download_youtube_audio(url)

์‹คํ–‰๊ฒฐ๊ณผ

์›ํ•˜๋Š” ์œ„์น˜์— ์›ํ•˜๋Š” ์ œ๋ชฉ์œผ๋กœ mp3ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜์—ˆ๋‹ค.

4. Insight

โ€ข
์›ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ๋ชฉ์ ์ด ์žˆ๋‹ค๋ฉด chatgpt์™€ ๊ฐ™์ด ๋กœ์ง์„ ๋งŒ๋“ค์–ด๊ฐ€๋ฉฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
โ€ข
๋˜ํ•œ ์ฝ”๋”ฉ์€ ๊ฐœ๋ฐœํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์„ค์ •ํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š” ๊ฒŒ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์—, ๋‚˜์˜ ๊ฐœ๋ฐœํ™˜๊ฒฝ์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ธ ์ •๋ณด๋ฅผ ๋งํ•ด์ฃผ๋ฉด ์ข‹๋‹ค.
โ€ข
chatgpt๊ฐ€ ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ ๋ฟ ์•„๋‹ˆ๋ผ ์‹คํ–‰์ฝ”๋“œ๊นŒ์ง€ ๋ชจ๋‘ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ฌด์ง€์„ฑ์œผ๋กœ ๋”ฐ๋ผ๋งŒํ•ด๋„ ์‹คํ–‰์€ ๋˜์ง€๋งŒ, ๊ทธ๋ž˜๋„ ์–ด๋А์ •๋„ ์ปดํ“จํ„ฐ์— ๋Œ€ํ•œ ์ง€์‹(์ƒ์‹์ˆ˜์ค€?)์€ ์žˆ๋Š”๊ฒŒ ์ „์ฒด์ ์ธ ํ”Œ๋กœ์šฐ๋ฅผ ์ดํ•ดํ•˜๋ฉด์„œ ํ•  ์ˆ˜ ์žˆ๋‹ค.
โ€ข
์ด ๊ฒŒ์‹œ๊ธ€์˜ ์ปจํ…์ธ ๋Š” chatgpt์—†์ด๋„ ์ถฉ๋ถ„ํžˆ ํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜์ค€์ด์ง€๋งŒ ๊ฐœ๋ฐœ์ž๋กœ์„œ ๊ตณ์ด chatgpt๋ฅผ ์‚ฌ์šฉํ•  ์ด์œ ๋Š” ์•„๋ฌด๋ž˜๋„ ์‹œ๊ฐ„์ ˆ์•ฝ๊ณผ ๋ฌด์ˆ˜ํ•œ ํฌ๋กฌ ํƒญ ๋ฐฉ์ง€ ์ผ ๊ฒƒ์ด๋‹ค.
huhsame
Subscribe to 'huhsame'
Subscribe to my site to be the first to receive notifications and emails about the latest updates, including new posts.
Join Slashpage and subscribe to 'huhsame'!
Subscribe
1
๐Ÿ‘๐Ÿป
1
๐Ÿ˜
1
youni
์™€...์—ญ์‹œ ํ—ˆ์„ธ๋ถ€๋ฆด๋งŒํ•ฉ๋‹ˆ๋‹ค! ๋Œ€๋ฐ•..๋„ˆ๋ฌด ๋ฉ‹์ ธ
See latest comments