youtube-dl

 

1. 소개
2. DMCA 테이크다운
3. GUI 프론트엔드
3.1. youtube-dl-gui
3.2. Tartube
3.3. JackTheVideoRipper
3.4. AllTube Download
3.5. 그 외
4. 사용법
4.1. 파이썬에서 사용하기 용례


1. 소개




youtube-dl은 유튜브의 동영상을 다운로드하는 소프트웨어이다. GitHub에서 현재도 활발히 개발되고 있는 오픈 소스 소프트웨어로, 성능과 기능 면에서는 타 소프트웨어의 추종을 불허한다. 오죽하면, 몇몇 유튜브 다운로드 소프트웨어는 이 youtube-dl을 기반으로 돌아갈까. 영상계의 ffmpeg이라 생각하면 편하다. 현재는 Youtube 동영상 다운로드를 미끼로 랜섬이나 바이러스를 배포하는 사이트가 많다. 그래서 오픈 소스로 개발하고 있는 youtube-dl은 더 매력적이다.
다만 가장 큰 문제는 CLI 기반이다. 개발자가 아닌 이상 일반인은 CLI 기반 소프트웨어를 거의 쓸 일이 없기 때문에 당황할 수도 있지만, 문법이 그렇게 어려운 것이 아니기 때문에 조금만 공부하면 된다. Python을 같이 이용하면 수십개의 재생목록에서 특정 영상(예고편이나 미리보기 등)을 제외하고 특정 언어의 자막을 받고 이름을 내가 원하는 형식으로 바꾸는 등 생각하는 모든 작업을 한방에 할 수 있다. 아예 이것으로 내가 구독하고 있는 채널에 새 영상이 업로드할 때마다 자동으로 다운로드하는 서버를 만드는 사람도 있다. 우리나라는 거의 전국에서 인터넷이 양호하지만 자주 끊기거나 속도가 너무 느린곳은 대용량 파일을 받는데 이방법을 의외로 자주 쓴다. VPS 코어 수마다 네트워크 제한이 있기는 하지만 구글 클라우드 VPS에서 유튜브 영상을 다운로드하면 수백메가 속도가 나오는데 이렇게 받고 rclone 같은 걸로 내 컴퓨터에 다운로드한다. 인터넷이 너무 느린 경우, 중간에 다운로드가 중단되는 경우가 많기 때문이다.
윈도우 기반에서는 exe 파일 하나를 다운로드하여 환경변수에 등록하면 되고, mac이나 linux는 패키지 관리자로 설치하면 된다. 윈도우에서도 Linux용 Windows 하위 시스템을 이용하여 리눅스 버전 youtube-dl을 설치해서 사용할 수도 있다. CLI 작업은 Bash에서 일괄적으로 처리하고 싶은 사람이라면 그렇게 하는 것이 편리할 수도 있다.
기본적으로 youtube-dl -F (영상주소)로 내가 받고 싶은 영상의 다운로드 옵션을 확인한다. (영상 화질, 음질) 그리고 youtube-dl -f (옵션) (영상주소)로 다운로드를 하면된다. 영상주소 대신 재생목록을 넣으면 한꺼번에 받을 수 있고 -i옵션을 넣으면 중간에 다운로드가 불가해도(국가차단, 없는 영상 등) 자동으로 다음 영상을 다운로드한다.
말이 youtube-dl이지 웬만한 영상 호스팅 사이트(트위치, 네이버 TV, vlive.tv, 판도라,카카오 tv 등...)을 지원한다. 처음에는 youtube 다운로드 프로그램이였는데, 기능이 점점 늘어나고 있다. 지원하는 사이트 목록
Youtube-dl에는 로그인 옵션이 있기 때문에, 로그인한 상태에서 다운로드를 진행하면 Youtube Premium 콘텐츠를 받을 수 있다. 다만 개인이 소장용으로 프리미엄 컨텐츠를 받는 것까지는 크게 문제가 되지 않지만, 많은 사람과 공유하거나, 공개된 곳에 게시하거나 판매할 경우, 엄연한 저작권법 위반이니 주의하자.

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 자체 리포지토리[2]에 youtube-dl 소스코드가 올라오는 일이 발생했다.'''#아카이브 GitHub 측에서 발견하고도 수정하지 않겠다(won't fix)고 선언한 취약점을 이용한 공격으로 알려졌다. #
유튜브 측에서는 이 사건 이후 본격적으로 동영상 추출 방지 대책을 강화한 것으로 보인다. 일부 동영상들을 youtube-dl로 다운받으려 하면 "오류: JS 플레이어에서 추출이 불가능합니다"라는 메시지가 뜨며 동영상 추출이 막힌다.# 다만 이것도 뜨는 때와 안 뜨는 때가 있는 것으로 보이며 youtube-dl의 포크인 youtube-dlc에서 상당 부분 해결했다.
2020년 11월 17일 기준 youtube-dl github 저장소가 복구되었다. 'youtube-dl이 기술적 보호 조치를 우회하지 않는다'는 전자 프런티어 재단공식 서한에 입각하여 복원되었다. 깃허브는 DMCA 섹션 1201 (저작권 보호 시스템 우회) 검토 과정 개선 예정, 주장이 모호할 경우 개발자 편에 설 예정, 개발자 보호 펀드에 100만 달러(약 11억 원)를 기부하겠다고 밝혔다. 관련 공지

3. GUI 프론트엔드



3.1. youtube-dl-gui


공식 사이트
소스 코드
CLI 사용이 어려운 사람들을 위해서 GUI인 youtube-dl-gui도 존재한다. .
youtube-dl-gui 는 Windows 뿐만 아니라 리눅스에도 설치가 가능하며 python으로 ffmpeg 과 rtmpdump 등을 활용해서 개발하였다. GUI 프로그램이라 CLI 보다 사용하기 쉬우며 안정성 또한 많이 개선된 것 같다. Windows 10에서 실행 시 폴더 권한 액세스 에러가 발생하는 경우도 있으나 이는 '제어된 폴더 액세스를 통해 앱 허용' 에 youtube-dl.exe와 ffmpeg.exe를 추가하면 사용 가능하다.Windows 10에서 youtube-dl-gui 사용
2017년 이후로 개발이 중단된 것으로 보인다. 현재는 Tartube가 더 선호되는 편.

3.2. Tartube


공식 사이트
소스 코드(github)
소스 코드(sourceforge)
youtube-dl-gui를 기반으로 여러 잡다한 기능들을 추가한 프론트엔드. Classic Mode를 선택하면 youtube-dl-gui처럼 사용할 수 있다.
youtube-dl-gui와는 달리 youtube-dl과 ffmpeg가 동봉되어 있지 않지만, 자동으로 같이 설치한다. youtube-dl-gui에서 에러가 발생했던 동영상도 Tartube에서는 다운로드가 가능하다.#
youtube-dlc 등의 포크를 사용할 수 있다.

3.3. JackTheVideoRipper


소스 코드(github)

3.4. AllTube Download


홈페이지
소스 코드
youtube-dl의 웹 프론트엔드.

3.5. 그 외


리눅스 진영에서도 youtube-dl 을 기반으로 한 GUI 프로그램인 Video Downloader가 개발되고 있다. 우분투 20.04 버전에서는 우분투 소프트웨어 센터를 통해서 설치 가능하고 동영상 URL만 입력하면 동영상 또는 MP3 파일로 다운로드 가능하다.설치 및 사용 방법 Youtube 사이트에서만 동작하는 것이 아니고, 국내 네이버 TV#, 트위터에서도 URL만 입력하면 동영상 다운로드가 가능하다.

4. 사용법


사용하기 전에 ffmpeg 바이너리 파일을 미리 받아서 youtube-dl.exe와 같은 폴더에 넣어두자. youtube-dl이 유튜브를 받을 때[3] 영상과 소리를 따로 받아서 나중에 합치기 때문에 ffmpeg이 필요하다. 아래의 예시 외에 도움말에 더 많은 옵션 정보가 있으니 참고. 혹은 영어로 구글 검색하면 reddit 등에서 쉽게 질문글을 찾아볼 수 있다.
  • 일반적인 동영상을 다운로드 받을 때
youtube-dl -f 22 <동영상 주소> or <재생목록 주소>

  • 저화질 동영상을 다운받을 때
youtube-dl -f 18 <동영상 주소> or <재생목록 주소>
[추가설치]
  • 최선화질, 최선 음질 동영상을 다운받을 때
youtube-dl -f bestvideo+bestaudio <동영상 주소> or <재생목록 주소>
[추가설치]
  • 고화질 동영상을 다운로드 받을때( 고화질 동영상과 음성파일을 다운 후 합성한다.)
아래 명령어는 windows cmd 창에서 실행한 결과이다.
powershell, bash등을 이용하면 --default-search "ytsearch" 옵션을 빼고 실행하여도 다운된다.
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
이 번호를 '+'로 붙여서 실행하면 최상의 결과를 얻을수 있다.
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[youtube] 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가 있어야 함)[4]
youtube-dl -o <출력 파일> -f 251 <동영상 주소> & ffmpeg -i <출력 파일> -c copy 
[추가설치]
  • 병합 포맷을 선택할 때
youtube-dl --merge-output-format <컨테이너 포맷>  <동영상 주소> or <재생목록 주소>
[추가설치]
<컨테이너 포맷>에 들어갈 대표의 것:mkv 등
  • 소리만 다운로드 받을때
youtube-dl -x --audio-format mp3 <동영상 주소> or <재생목록 주소>

  • 한 언어만 자막 같이 다운받기
youtube-dl  --write-sub --sub-lang <언어> <동영상 주소> or <재생목록 주소>
or
youtube-dl -f 22 --write-sub --sub-lang <언어> <동영상 주소> or <재생목록 주소>

<언어>에 들어갈 대표의 것:ko=한글,en=영어 등
  • 모든 언어 자막 다 다운받기
youtube-dl  --write-sub --all-sub <동영상 주소> or <재생목록 주소>
or youtube-dl -f 22 all-sub <동영상 주소> or <재생목록 주소>
  • 자막만 다운받기
youtube-dl --skip-download --write-sub --sub-lang <언어> <동영상 주소> or <재생목록 주소>

youtube-dl --skip-download --write-sub --all-sub <동영상 주소> or <재생목록 주소>

<언어>에 들어갈 대표의 것:ko=한글,en=영어 등
  • 최신버전으로 자기 자신을 업데이트
youtube-dl -U

  • 출력파일명을 지정
youtube-dl -o "<경로>\%%(title)s.%%(ext)s <동영상 주소>"

%%(title)s : 영상의 제목
%%(ext)s : 출력형식에 따른 확장자
  • 모든 플레이리스트를 각 폴더 별로 분리해서 받기 예시. 유튜브 주소를 끝이 playlists로 끝나는 채널의 플레이리스트 주소로 써야 한다.
youtube-dl -o “%(uploader)s/%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s” https://www.youtube.com/c/채널이름/playlists

  • 이미 다운 받은 영상은 제외하고 받으려면 archive 옵션을 켜고 다운을 받아서 한 번 기록을 해둔다. 그러면 다음 번에 받을 때도 archive 옵션을 켜고 받으면 이미 기록된 파일을 읽어서 그 영상을 제외하고 받는다. 채널에 새로 올라온 동영상만 받고 싶을 때 쓸 수 있다.
youtube-dl --download-archive archive.txt

  • 에러났을 때 중단하지 않고 다음 영상 받기
youtube-dl -ciw

아래 옵션 설명 참고
-i, --ignore-errors 에러 넘기고 다음 영상 받기
-w, --no-overwrites 이미 영상 파일이 있을 경우 다시 받지 않고 넘기기
-c, --continue 일부만 받은 파일 다운로드 재개하기

4.1. 파이썬에서 사용하기 용례


pip install --upgrade youtube-dl
등으로 youtube-dl 설치 후에, 다음 코드 사용하면 간단하게 받을 수 있다. 옵션 목록은 다음 링크 참고.#
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] 원래는 월별 투명성 보고서를 보관하던 곳이다.[3] 포럼에 있는 글을 보니 특히 유튜브가 그렇고 다른 사이트는 안 그런 모양.[추가설치] A B C D E FFmpeg나 avconv가 설치 되어 있어야 한다.GitHub_BtbN/FFmpeg-Builds [4] Opus로 인코딩된 음원을 안드로이드 폰에서 재생하려면 Ogg 컨테이너로 리팩해야 정상적으로 재생된다.