최근 수정 시각 : 2024-04-11 21:31:41

youtube-dl


1. 개요2. DMCA 테이크다운과 부활3. GUI 프론트엔드
3.1. youtube-dl-gui3.2. Tartube3.3. YoutubeDL-Material3.4. 그 외
4. 사용법
4.1. Python 용례

1. 개요

파일:홈페이지 아이콘.svg | 파일:GitHub 아이콘.svg파일:GitHub 아이콘 화이트.svg

youtube-dl은 유튜브다른 사이트의 동영상을 다운로드하는 오픈 소스 소프트웨어이다. 2021년 이후로 개발이 중단되어 현재 대부분의 사용자는 youtube-dl을 포크한 yt-dlp로 넘어갔다.

성능이 좋고 기능들도 충실해 비슷한 류의 프로그램 중에서는 가장 뛰어나다는 평가를 받았지만, CLI 기반이라는 근본적인 문제가 있다. 개발자가 아닌 이상 일반인은 CLI 기반 소프트웨어를 거의 쓸 일이 없기 때문에 당황할 수도 있지만, 문법이 그렇게 어려운 것이 아니기 때문에 조금만 공부하면 된다. Python을 같이 이용하면 수십개의 재생목록에서 특정 영상(예고편이나 미리보기 등)을 제외하고 특정 언어의 자막을 받고 이름을 사용자가 원하는 형식으로 바꾸는 등 생각하는 모든 작업을 한방에 할 수 있다.
아예 이것으로 사용자가 구독하고 있는 채널에 새 영상이 업로드할 때마다 자동으로 다운로드하는 서버를 만드는 사람도 있다. 우리나라는 거의 전국에서 인터넷이 양호하지만 자주 끊기거나 속도가 너무 느린 곳은 대용량 파일을 받는데 이 방법을 의외로 자주 쓴다. VPS 코어 수마다 네트워크 제한이 있기는 하지만 구글 클라우드 VPS에서 유튜브 영상을 다운로드하면 수백메가 속도가 나오는데 이렇게 받고 rclone 같은 걸로 내 컴퓨터에 다운로드한다. 인터넷이 너무 느린 경우, 중간에 다운로드가 중단되는 경우가 많기 때문이다.

Windows에서는 exe 파일 하나를 다운로드하여 환경변수에 등록하면 되고, mac이나 linux는 패키지 관리자로 설치하면 된다. Windows에서도 Linux용 Windows 하위 시스템을 이용하여 Linux 버전 youtube-dl을 설치해서 사용할 수도 있다. CLI 작업은 Bash에서 일괄적으로 처리하고 싶은 사람이라면 그렇게 하는 것이 편리할 수도 있다.

기본적으로 youtube-dl -F (영상주소)로 사용자가 받고 싶은 영상의 다운로드 옵션을 확인한다. (영상 화질, 음질) 그리고 youtube-dl -f (옵션) (영상주소)로 다운로드를 하면된다. 영상주소 대신 재생목록을 넣으면 한꺼번에 받을 수 있고 -i옵션을 넣으면 중간에 다운로드가 불가해도(국가차단, 없는 영상 등) 자동으로 다음 영상을 다운로드한다.

말이 youtube-dl이지 웬만한 영상 호스팅 사이트(트위치, 네이버 TV, V LIVE, 판도라TV, 카카오TV, 트위터 등)을 지원한다. 처음에는 youtube 다운로드 프로그램이였는데, 기능이 점점 늘어나고 있다. Github Issue에 내가 원하는 사이트 지원을 해달라 올리면 시간이 좀 걸리지만 반영이 되기도 한다. 여기서 지원하는 사이트 목록을 확인할 수 있다.

유튜브 프리미엄 콘텐츠 다운로드도 된다. Youtube-dl에는 로그인 옵션이 있기 때문에, 로그인한 상태에서 다운로드를 진행하면 Youtube Premium 콘텐츠를 받을 수 있다. 개인이 소장용으로 프리미엄 컨텐츠를 받는 것까지는 크게 문제가 되지 않지만, 많은 사람과 공유하거나, 공개된 곳에 게시하거나 판매할 경우, 엄연한 저작권법 위반에 해당되니 주의할 것.

2021년 6월 6일 이후 한동안 업데이트가 되지 않다가, 12월 17일 한번 업데이트 후 또 업데이트가 멈춰져 있다. 일부 영상의 다운로드가 매우 느린 속도로 진행되다가 멈추는 등 비정상적이다.

그나마 youtube-dl을 포크하여 업데이트하고 있는 yt-dlp는 지속해서 최신 버전을 올리면서 좀 더 안정적인 다운로드 효율을 보이고 있다. 그러니 youtube-dl를 쓸 일이 있다면 대신 yt-dlp를 쓰기를 권장한다. 사용법도 youtube-dl과 거의 동일하다. 일반적으로 youtube-dl이라는 명령어 대신 yt-dlp라는 명령어를 쓰면 되고, youtube-dl.exe라는 파일 대신 yt-dlp.exe라는 파일을 쓰면 되며, Python에서는 youtube_dl를 쓸 자리에는 yt_dlp를 대신 써넣으면 된다.

한국 IP 한정으로 니코동 등 일부 사이트는 통신사의 추가단말서비스 페이지 삽입으로 인해 다운로드가 불가능할 수 있다.

2023년 7월 7일, youtube-dl, youtube-dlc, yt-dlp에 쿠키 관련 보안 취약점이 발견되었다. yt-dlp의 경우 2023.07.06 버전에서 해당 취약점이 패치되었다.

2. DMCA 테이크다운과 부활

2020년 10월 24일 기준 youtube-dl GitHub 리포지토리가 RIAA[1]한테 DMCA 테이크다운을 당하였다. 당연히 관련 커뮤니티는 전부 다 뒤집어지며 README.md에 예시로써 명시된 3개의 곡 때문에 프로젝트를 엎어버릴 수 있다면 해외나 국내나 다음은 Chromium을 DMCA 테이크다운을 걸자고 드립치는 중.

Codesicks 명의로써 DMCA 테이크다운이 걸린 몇 시간 후에 바로 대응을 시작했다.

DMCA로 인해 막힌 것을 반대하는 의미로 기존에 생성되있던 Gitea 미러 저장소 링크를 공유하고 있으며, 심지어 중국판 GitHub인 Gitee에까지 youtube-dl이 올라와 있다.

이 와중에 원래는 월별 투명성 보고서를 보관하는 용도로 쓰던 DMCA 자체 리포지토리에 youtube-dl 소스코드가 올라오는 일이 발생했다. 아카이브 아카이브(웨이백 머신) GitHub 측에서 발견하고도 수정하지 않겠다(won't fix)고 선언한 취약점을 이용한 공격으로 알려졌다.

유튜브 측에서는 이 사건 이후 본격적으로 동영상 추출 방지 대책을 강화한 것으로 보인다. 일부 동영상들을 youtube-dl로 다운받으려 하면 "오류: JS 플레이어에서 추출이 불가능합니다"라는 메시지가 뜨며 동영상 추출이 막힌다. 다만 이것도 뜨는 때와 안 뜨는 때가 있는 것으로 보이며 youtube-dl의 포크인 youtube-dlc에서 상당 부분 해결했다.

2020년 11월 17일 기준 youtube-dl github 저장소가 복구되었다. 'youtube-dl이 기술적 보호 조치를 우회하지 않는다'는 전자 프런티어 재단공식 서한에 입각하여 복원되었다. GitHub는 DMCA 섹션 1201 (저작권 보호 시스템 우회) 검토 과정 개선 예정, 주장이 모호할 경우 개발자 편에 설 예정, 개발자 보호 펀드에 100만 달러(약 11억 원)를 기부하겠다고 밝혔다.

3. GUI 프론트엔드

3.1. youtube-dl-gui

  • 공식 버전: 파일:홈페이지 아이콘.svg | 파일:GitHub 아이콘.svg파일:GitHub 아이콘 화이트.svg
  • oleksis의 포크: 파일:홈페이지 아이콘.svg | 파일:GitHub 아이콘.svg파일:GitHub 아이콘 화이트.svg

CLI 사용이 어려운 사람들을 위해서 GUI인 youtube-dl-gui도 존재한다.

youtube-dl-gui는 Windows 뿐만 아니라 Linux에도 설치가 가능하며 python으로 FFmpeg와 RTMPDump 등을 활용해서 개발하였다. GUI 프로그램이라 CLI보다 사용하기 쉬우며 안정성 또한 많이 개선된 것 같다. Windows 10에서 실행 시 폴더 권한 액세스 에러가 발생하는 경우도 있으나 이는 '제어된 폴더 액세스를 통해 앱 허용'에 youtube-dl.exe와 ffmpeg.exe를 추가하면 사용 가능하다.

명칭으로 youtube-dl-gui와 youtube-dlG가 혼용되고 있다.

2017년에 만들어진 버전 0.4를 끝으로 새 버전이 나오지 않고 있다. 그래서 oleksis라는 다른 개발자가 프로젝트를 포크하여 유지시키고 있기는 하지만 현재는 Tartube가 더 선호되는 편.

3.2. Tartube

파일:홈페이지 아이콘.svg | 파일:GitHub 아이콘.svg파일:GitHub 아이콘 화이트.svg

youtube-dl-gui를 기반으로 여러 잡다한 기능들을 추가한 프론트엔드. Classic Mode를 선택하면 youtube-dl-gui처럼 사용할 수 있다.

youtube-dl-gui와는 달리 youtube-dl과 ffmpeg가 동봉되어 있지 않지만, 첫 실행 시에 자동으로 같이 설치한다. youtube-dl-gui에서 에러가 발생했던 동영상도 Tartube에서는 다운로드가 가능하다.

버전 2.3.110부터 youtube-dlc의 지원을 중단하고 그 대신 yt-dlp를 지원하기 시작했다.

Windows 버전 한정으로, yt-dlp를 사용할 경우, 수정->시스템 환경 설정->Downloaders에 들어가서 'Install without dependencies'를 활성화하고 업데이트해줘야 정상 설치된다.

버전 2.3.447부터 32비트 Windows를 지원하지 않는다. 32비트 Windows를 사용 중인 경우, 버전 2.3.367까지만 사용할 수 있다. 이 버전은 FFmpeg를 자동 설치할 수 없으니 유의.

3.3. YoutubeDL-Material

파일:GitHub 아이콘.svg파일:GitHub 아이콘 화이트.svg
Linux용으로, 서버를 이용하는 사람들이 많이 설치한다. 또한 도커를 지원하여 Windows에서도 도커를 이용한 설치가 가능하다!

웹브라우저를 통해 GUI 접속이 가능하며, 다운받고 싶은 유튜브 영상 웹페이지에서 북마크를 클릭하는 것만으로 영상을 다운로드 하는 기능도 지원한다.
youtube-dl과 youtube-dlc 및 yt-dlp를 지원하며, 원하는 다운로더를 선택하여 사용할 수도 있다.
curl, ffmpeg, wget 등 에이전트를 변경할 수도 있다.

nightly에서 한국어도 지원된다.

3.4. 그 외

Linux 진영에서도 youtube-dl을 기반으로 한 GUI 프로그램인 Video Downloader가 개발되고 있다. Ubuntu 20.04는 Ubuntu Software Center에서 설치 가능하고 동영상 URL만 입력하면 동영상 또는 MP3 파일로 다운로드 가능하다.

Android는 이 앱들 중 하나를 사용하면 된다.

4. 사용법

사용하기 전에 ffmpeg 바이너리 파일을 미리 받아서 youtube-dl.exe와 같은 폴더에 넣어두자. Linux 유저는 FFmpeg 패키지를 설치하면 된다. youtube-dl이 유튜브를 받을 때[2] 영상과 소리를 따로 받아서 나중에 합치기 때문에 ffmpeg이 필요하다. 아래의 예시 외에 도움말에 더 많은 옵션 정보가 있으니 참고. 혹은 영어로 구글 검색하면 reddit 등에서 쉽게 질문글을 찾아볼 수 있다.
  • 일반적인 동영상을 최선화질, 최선 음질로 다운받을 때 (기본 옵션)
    {{{#!syntax sh
youtube-dl <동영상 주소> or <재생목록 주소>}}}
youtube-dl -f 18 <동영상 주소> or <재생목록 주소>}}}
  • 고화질 동영상을 다운로드 받을때( 고화질 동영상과 음성파일을 다운 후 합성한다.)
    아래 명령어는 windows cmd 창에서 실행한 결과이다.
    powershell, bash등을 이용하면 --default-search "ytsearch" 옵션을 빼고 실행해도 다운된다.
    {{{#!syntax sh
youtube-dl -F --default-search "ytsearch" 'https://youtu.be/TJcKYUTaBtg'}}}
를 실행하면 아래와 같이 번호가 출력되며
 251          webm       audio only tiny  141k , opus @160k (48000Hz), 1.64MiB
......
248          webm       1920x804   1080p 1822k , vp9, 30fps, video only, 12.74MiB

이렇게 두 번째로 큰 번호를 '+'로 붙여서 실행하면 최상의 결과를 얻을 수 있다.[추가설치]
{{{#!syntax sh
youtube-dl -f 248+251 --default-search "ytsearch" 'https://youtu.be/TJcKYUTaBtg'}}}
{{{[youtube:search] query "'https://youtu.be/TJcKYUTaBtg'": Downloading page 1
[download] Downloading playlist: 'https://youtu.be/TJcKYUTaBtg'
[youtube:search] playlist 'https://youtu.be/TJcKYUTaBtg': Collected 1 video ids (downloading 1 of them)
[download] Downloading video 1 of 1
TJcKYUTaBtg: Downloading webpage
[download] Destination: Introducing NVIDIA DGX A100-TJcKYUTaBtg.f248.webm
[download] 100% of 12.74MiB in 00:01
[download] Destination: Introducing NVIDIA DGX A100-TJcKYUTaBtg.f251.webm
[download] 100% of 1.64MiB in 00:00
[ffmpeg] Merging formats into "Introducing NVIDIA DGX A100-TJcKYUTaBtg.webm"
Deleting original file Introducing NVIDIA DGX A100-TJcKYUTaBtg.f248.webm (pass -k to keep)
Deleting original file Introducing NVIDIA DGX A100-TJcKYUTaBtg.f251.webm (pass -k to keep)
[download] Finished downloading playlist: 'https://youtu.be/TJcKYUTaBtg'}}}
  • Opus로 인코딩된 음원을 다운로드 받아 Ogg로 저장할 때 (youtube-dl이 있는 폴더에 ffmpeg가 있어야 함)[5][추가설치]
    {{{#!syntax sh
youtube-dl -o <출력 파일> -f 251 <동영상 주소> & ffmpeg -i <출력 파일> -c copy <Ogg로 저장할 파일 이름.ogg>}}}
youtube-dl --merge-output-format <컨테이너 포맷> <동영상 주소> or <재생목록 주소>}}}
<컨테이너 포맷> 예시: mkv
  • 소리만 다운로드할 때
    {{{#!syntax sh
youtube-dl -x --audio-format mp3 <동영상 주소> or <재생목록 주소>}}}
--audio-quality 태그로 오디오의 품질을 설정할 수 있다. 0(Best)~9(Worst)로 쓰거나(VBR) 192k 등의 비트레이트를 적으면 된다.]
  • 최고 품질(256kbps 가변 비트레이트)의 mp3 + 메타데이터 + 썸네일을 mp3 앨범 커버로 쓰기[추가설치]
    {{{#!syntax sh
youtube-dl -f 251 extract-audio audio-format mp3 audio-quality 0 add-metadata --embed-thumbnail -o <출력 파일명> <동영상 주소>}}}
  • 한 언어만 자막 같이 다운받기
    {{{#!syntax sh
youtube-dl write-sub sub-lang <언어> <동영상 주소> or <재생목록 주소>}}} 혹은
{{{#!syntax sh
youtube-dl -f 22 write-sub sub-lang <언어> <동영상 주소> or <재생목록 주소>}}}
<언어> 예시: ko=한글, en=영어 등
  • 모든 언어 자막 다 다운받기
    {{{#!syntax sh
youtube-dl write-sub all-sub <동영상 주소> or <재생목록 주소>}}} 혹은
{{{#!syntax sh
youtube-dl -f 22 write-sub all-sub <동영상 주소> or <재생목록 주소>}}}
  • 자막만 다운받기
    {{{#!syntax sh
youtube-dl skip-download write-sub --sub-lang <언어> <동영상 주소> or <재생목록 주소>}}} 혹은
{{{#!syntax sh
youtube-dl skip-download write-sub --all-sub <동영상 주소> or <재생목록 주소>}}}
<언어> 예시: ko=한글, en=영어 등
  • 최신버전으로 자기 자신을 업데이트
    {{{#!syntax sh
youtube-dl -U}}}
  • 출력파일명을 지정
    {{{#!syntax sh
youtube-dl -o "<경로>\%(title)s.%(ext)s <동영상 주소>"}}}
%%(title)s: 영상의 제목
%%(ext)s: 출력형식에 따른 확장자
  • 모든 플레이리스트를 각 폴더 별로 분리해서 받기 예시. 유튜브 주소를 끝이 playlists로 끝나는 채널의 플레이리스트 주소로 써야 한다.
    {{{#!syntax sh
youtube-dl -o “%(uploader)s/%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s” https://www.youtube.com/c/채널이름/playlists}}}
  • 이미 다운 받은 영상은 제외하고 받으려면 archive 옵션을 켜고 다운을 받아서 한 번 기록을 해둔다. 그러면 다음 번에 받을 때도 archive 옵션을 켜고 받으면 이미 기록된 파일을 읽어서 그 영상을 제외하고 받는다. 채널에 새로 올라온 동영상만 받고 싶을 때 쓸 수 있다.
    {{{#!syntax sh
youtube-dl --download-archive archive.txt}}}
  • 에러났을 때 중단하지 않고 다음 영상 받기
    {{{#!syntax sh
youtube-dl -ciw}}}
아래 옵션 설명을 참고한다.
*-i, --ignore-errors: 에러 넘기고 다음 영상 받기
*-w, --no-overwrites: 이미 영상 파일이 있을 경우 다시 받지 않고 넘기기
*-c, --continue: 일부만 받은 파일 다운로드 재개하기

4.1. Python 용례

#!syntax sh
pip install --upgrade youtube-dl

등으로 youtube-dl 설치 후에, 다음 코드를 사용하면 간단하게 받을 수 있다. 옵션 목록은 여기를 참고한다.

#!syntax python
from __future__ import unicode_literals
import youtube_dl

def my_hook(d):
    if d['status'] == 'finished':
        print('Done downloading, now converting ...')

ydl_opts = {
    'download_archive': 'archive.txt',
    'ignoreerrors': True,
    'nooverwrites': True,
    'format': 'bestvideo[height<=1080]+bestaudio/best[height<=1080]/best',       
    'outtmpl': '저장 경로 템플릿',        
    'noplaylist' : False,       
    'progress_hooks': [my_hook],  
}

with youtube_dl.YoutubeDL(ydl_opts) as ydl:
    ydl.download(['유튜브 링크 주소'])

[1] 미국 음반 산업 협회, 한국으로 치면 한국음악저작권협회와 유사한 단체이다.[2] YouTubeDASH기술을 도입한 후 720p 이상의 동영상은 소리가 포함되어있지 않다.[추가설치] FFmpeg나 avconv가 설치되어 있어야 한다. FFmpeg[추가설치] [5] Opus로 인코딩된 음원을 Android에서 재생하려면 Ogg 컨테이너로 리팩해야 정상적으로 재생된다. 그러나 Android 10부터는 Opus 확장자도 지원한다. 10 미만 중에서도 뮤직콜렛 등 Opus를 지원하는 뮤직 플레이어 앱도 존재한다.[추가설치] [추가설치] [추가설치]



파일:CC-white.svg 이 문단의 내용 중 전체 또는 일부는 문서의 r2247에서 가져왔습니다. 이전 역사 보러 가기
파일:CC-white.svg 이 문단의 내용 중 전체 또는 일부는 다른 문서에서 가져왔습니다.
[ 펼치기 · 접기 ]
문서의 r2247 (이전 역사)
문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)