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๋ฅผ ์‚ฌ์šฉํ•  ์ด์œ ๋Š” ์•„๋ฌด๋ž˜๋„ ์‹œ๊ฐ„์ ˆ์•ฝ๊ณผ ๋ฌด์ˆ˜ํ•œ ํฌ๋กฌ ํƒญ ๋ฐฉ์ง€ ์ผ ๊ฒƒ์ด๋‹ค.
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