AI 탐구노트

유튜브 영상/음성 다운로드 받기 본문

기술 팁

유튜브 영상/음성 다운로드 받기

42morrow 2024. 8. 9. 23:25

 

 

유튜브를 보다 보면 자료나 테스트 데이터 용으로 영상 파일이나 오디오 파일을 다운받아야 할 때가 있습니다. 

예를 들어 군중 영상이나 보행자 영상 등을 가지고 객체 감지나 움직임 트래킹을 하는 기능을 테스트 해야 하는 경우 등등이 있겠죠.

 

하지만 기본적으로 유튜브는 프리미엄 사용자가 아닐 경우, 영상의 다운로드 기능을 원칙적으로는 제공하지 않습니다.

그래서, 이런 작업을 지원하는 도구를 사용하게 되는데 예전에는 youtube-dl 이라는 걸출한  커맨드 기반 도구가 있었습니다.

하지만, 워낙 많이 알려지다보니 다운로드 방식이 차단되었고 이걸 다시 우회하는 yt-dlp라는 도구가 나왔습니다. 

 

이 도구를 이용해 영상과 오디오 데이터를 다운로드 하는 방법을 기록해 둡니다.

 

도구 다운로드

yt-dlp는 패키지 관리자를 사용하지 말고 URL 상에서 실행파일을 직접 다운로드해서 설치하는 것을 권장합니다. 예전에도 youtube-dl의 경우, 주기적으로 Youtube 쪽에서 차단하는 조치였는지 모르겠는데, 서버 쪽 기능 변경이 생기면 다운로드가 안 되는 경우들이 있었습니다. 

# github repo : https://github.com/yt-dlp/yt-dlp

 

실행 방법

 

yt-dlp 실행 방법은 다음과 같습니다. 기본적으로는 업로드 되어 있는 것 가운데 가장 최선의 화질, 음질로 다운 받습니다. 만약 4K, HD, 720P 등 다양하게 들어 있다면 4K 화질의 영상을 다운받게 될텐데 그럼 사이즈가 엄청 커지니 유의하시기 바랍니다. 

$ yt-dlp <youtube url>

 

 

지원되는 포맷 확인 

지원되는 포맷과 화질 등을 확인할 수 있는 방법은 다음과 같습니다. 확인하는 단계와 실제 다운로드 받는 단계에서 사용하는 옵션이 각각 '-F', '-f'로 다르다는 것을 유의하시기 바랍니다.

$ yt-dlp -F <Youtube URL>

 

실행한 예시는 다음과 같습니다. 

$ yt-dlp -F https://www.youtube.com/watch?v=b5fgKANTGH8
[youtube] Extracting URL: https://www.youtube.com/watch?v=b5fgKANTGH8
[youtube] b5fgKANTGH8: Downloading webpage
[youtube] b5fgKANTGH8: Downloading ios player API JSON
[youtube] b5fgKANTGH8: Downloading web creator player API JSON
[youtube] b5fgKANTGH8: Downloading m3u8 information
[info] Available formats for b5fgKANTGH8:
ID      EXT   RESOLUTION FPS CH │   FILESIZE   TBR PROTO │ VCODEC          VBR ACODEC      ABR ASR MORE INFO
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
sb3     mhtml 48x27        0    │                  mhtml │ images                                  storyboard
sb2     mhtml 80x45        0    │                  mhtml │ images                                  storyboard
sb1     mhtml 160x90       0    │                  mhtml │ images                                  storyboard
sb0     mhtml 320x180      0    │                  mhtml │ images                                  storyboard
233     mp4   audio only        │                  m3u8  │ audio only          unknown             [ko] Default
234     mp4   audio only        │                  m3u8  │ audio only          unknown             [ko] Default
139-drc m4a   audio only      2 │    4.95MiB   49k https │ audio only          mp4a.40.5   49k 22k [ko] low, DRC, m4a_dash
249-drc webm  audio only      2 │    5.33MiB   53k https │ audio only          opus        53k 48k [ko] low, DRC, webm_dash
250-drc webm  audio only      2 │    7.57MiB   75k https │ audio only          opus        75k 48k [ko] low, DRC, webm_dash
139     m4a   audio only      2 │    4.95MiB   49k https │ audio only          mp4a.40.5   49k 22k [ko] low, m4a_dash
249     webm  audio only      2 │    5.33MiB   53k https │ audio only          opus        53k 48k [ko] low, webm_dash
250     webm  audio only      2 │    7.57MiB   75k https │ audio only          opus        75k 48k [ko] low, webm_dash
140-drc m4a   audio only      2 │   13.13MiB  129k https │ audio only          mp4a.40.2  129k 44k [ko] medium, DRC, m4a_dash
251-drc webm  audio only      2 │   15.58MiB  154k https │ audio only          opus       154k 48k [ko] medium, DRC, webm_dash
140     m4a   audio only      2 │   13.13MiB  129k https │ audio only          mp4a.40.2  129k 44k [ko] medium, m4a_dash
251     webm  audio only      2 │   15.58MiB  154k https │ audio only          opus       154k 48k [ko] medium, webm_dash
602     mp4   256x144     15    │ ~  8.50MiB   84k m3u8  │ vp09.00.10.08   84k video only
394     mp4   256x144     30    │    6.08MiB   60k https │ av01.0.00M.08   60k video only          144p, mp4_dash
269     mp4   256x144     30    │ ~ 16.39MiB  162k m3u8  │ avc1.4D400C    162k video only
160     mp4   256x144     30    │    5.04MiB   50k https │ avc1.4D400C     50k video only          144p, mp4_dash
603     mp4   256x144     30    │ ~ 15.99MiB  158k m3u8  │ vp09.00.11.08  158k video only
278     webm  256x144     30    │    9.12MiB   90k https │ vp09.00.11.08   90k video only          144p, webm_dash
395     mp4   426x240     30    │    9.94MiB   98k https │ av01.0.00M.08   98k video only          240p, mp4_dash
229     mp4   426x240     30    │ ~ 22.52MiB  222k m3u8  │ avc1.4D4015    222k video only
133     mp4   426x240     30    │    8.04MiB   79k https │ avc1.4D4015     79k video only          240p, mp4_dash
604     mp4   426x240     30    │ ~ 26.87MiB  265k m3u8  │ vp09.00.20.08  265k video only
242     webm  426x240     30    │   12.06MiB  119k https │ vp09.00.20.08  119k video only          240p, webm_dash
396     mp4   640x360     30    │   18.83MiB  186k https │ av01.0.01M.08  186k video only          360p, mp4_dash
230     mp4   640x360     30    │ ~ 44.73MiB  441k m3u8  │ avc1.4D401E    441k video only
134     mp4   640x360     30    │   14.61MiB  144k https │ avc1.4D401E    144k video only          360p, mp4_dash
605     mp4   640x360     30    │ ~ 51.96MiB  512k m3u8  │ vp09.00.21.08  512k video only
243     webm  640x360     30    │   21.09MiB  208k https │ vp09.00.21.08  208k video only          360p, webm_dash
397     mp4   854x480     30    │   32.04MiB  316k https │ av01.0.04M.08  316k video only          480p, mp4_dash
231     mp4   854x480     30    │ ~ 59.10MiB  583k m3u8  │ avc1.4D401F    583k video only
135     mp4   854x480     30    │   22.01MiB  217k https │ avc1.4D401F    217k video only          480p, mp4_dash
606     mp4   854x480     30    │ ~ 71.62MiB  706k m3u8  │ vp09.00.30.08  706k video only
244     webm  854x480     30    │   30.11MiB  297k https │ vp09.00.30.08  297k video only          480p, webm_dash
398     mp4   1280x720    30    │   57.01MiB  562k https │ av01.0.05M.08  562k video only          720p, mp4_dash
232     mp4   1280x720    30    │ ~ 97.03MiB  956k m3u8  │ avc1.4D401F    956k video only
136     mp4   1280x720    30    │   40.64MiB  401k https │ avc1.4D401F    401k video only          720p, mp4_dash
609     mp4   1280x720    30    │ ~111.05MiB 1095k m3u8  │ vp09.00.31.08 1095k video only
247     webm  1280x720    30    │   48.00MiB  474k https │ vp09.00.31.08  474k video only          720p, webm_dash
399     mp4   1920x1080   30    │  106.06MiB 1046k https │ av01.0.08M.08 1046k video only          1080p, mp4_dash
270     mp4   1920x1080   30    │ ~340.46MiB 3356k m3u8  │ avc1.640028   3356k video only
137     mp4   1920x1080   30    │  173.89MiB 1715k https │ avc1.640028   1715k video only          1080p, mp4_dash
614     mp4   1920x1080   30    │ ~267.20MiB 2634k m3u8  │ vp09.00.40.08 2634k video only
248     webm  1920x1080   30    │  110.17MiB 1087k https │ vp09.00.40.08 1087k video only          1080p, webm_dash
616     mp4   1920x1080   30    │ ~528.41MiB 5209k m3u8  │ vp09.00.40.08 5209k video only          Premium

 

실행하면 다음과 같이 나오는데, audio와 video가 분리되어 표시됩니다. 

 

 

포맷 지정해서 다운로드

 

지원되는 포맷과 화질 등을 확인한 이후에 이를 지정해 다운로드를 할 수 있습니다.  

$ yt-dlp -f <video_id>+<audio_id> <Youtube URL>

 

예로 여기서 FHD 영상을 받는다고 하면 비디오 영상은 video only, 오디오는 audio only 로 되어 있는데 이를 조합해서 다운로드하면 됩니다. 

$ yt-dlp -f 399+139 https://www.youtube.com/watch?v=b5fgKANTGH8

 

 

특정 구간만 다운 받는 법

 

영상의 일정 구간만 다운로드 받는 방법은  아래와 같습니다. 시작시간, 끝나는 시간은 각각 초로 입력해야 합니다. 예를 들어 1:00:00 부터 1:01:00까지 받는다고 가정하면 시작시간 3600 끝나는시간 3660으로 설정하는거죠.

$ yt-dlp https://www.youtube.com/watch?v=(유튜브 동영상 ID) \
--downloader ffmpeg --downloader-args "ffmpeg_i:-ss (시작시간) -to (끝나는시간)"