You-get: 웹을 긁어오는 단순 다운로더
(github.com/soimort)- You-Get은 웹에서 비디오, 오디오, 이미지 같은 미디어 콘텐츠를 내려받는 작은 명령줄 유틸리티이며, 다른 간편한 방법이 없을 때 쓰는 도구임
- YouTube, Youku, niconico, Tumblr, SoundCloud, Instagram, bilibili, TikTok 등 여러 사이트에서 동영상·이미지·오디오를 내려받거나, 미디어 플레이어로 온라인 영상을 스트리밍할 수 있음
--info로 사용 가능한 품질과 포맷을 확인하고--itag로 선택할 수 있지만, 포맷 선택은 대부분의 지원 사이트에서 일반적으로 구현되지 않았으며 기본값은 최고 품질임- 설치는
pip, GitHub 다운로드·클론, Homebrew, FreeBSDpkg, Flox 등으로 가능하고, 권장 의존성은 Python 3.7.4 이상, FFmpeg 1.0 이상, 선택 사항 RTMPDump임 - 직접 URL 다운로드, 웹페이지 스크래핑, Google Videos 검색 기반 다운로드, 일시정지·재개, 프록시, 쿠키 로드, 추출 URL·JSON 출력까지 제공하지만 일부 기능은 실험적이거나 안정화되지 않았음
You-Get이 하는 일
- You-Get은 웹에서 미디어 콘텐츠를 내려받는 작은 명령줄 유틸리티임
- 대상 콘텐츠는 비디오, 오디오, 이미지임
- 웹에서 다른 간편한 다운로드 방법이 없을 때 쓰는 용도임
- 사용 이유로는 개인적으로 즐기기 위한 다운로드, 저장이 막힌 온라인 비디오에 대한 제어, 폐쇄형 기술이나 독점 JavaScript·Flash 회피, 해커 문화와 자유 소프트웨어 지향이 제시됨
- 주요 기능은 다음과 같음
- YouTube, Youku, Niconico 등 인기 사이트의 비디오·오디오 다운로드
- 웹브라우저 없이 미디어 플레이어에서 온라인 비디오 스트리밍
- 웹페이지를 긁어 관심 있는 이미지 다운로드
- 바이너리 파일 같은 임의의 비 HTML 콘텐츠 다운로드
설치와 실행 환경
- 권장 의존성은 Python 3.7.4 이상, FFmpeg 1.0 이상, 선택 사항 RTMPDump임
- 2022년 5월 30일 공지에 따르면 Python 3.5, 3.6, 3.7 지원은 결국 중단될 예정임
- 설치 경로는 여러 가지임
- PyPI에서
pip install you-get - Zsh 사용자는 Antigen으로
antigen bundle soimort/you-get - GitHub의
master안정 브랜치 또는develop브랜치 다운로드 - 개발자에게 권장되는
git clone git://github.com/soimort/you-get.git - macOS는
brew install you-get - FreeBSD는
pkg install you-get - Mac, Linux, Windows WSL은
flox install you-get
- PyPI에서
- Bash, Fish, Zsh용 셸 자동완성 정의는
contrib/completion에 있음 - 업그레이드는 설치 방식에 따라
pip install --upgrade you-get, 최신 릴리스 다운로드, 또는develop브랜치 강제 재설치로 가능함
기본 다운로드 흐름
- 동영상을 받을 때
you-get -i URL또는--info로 사용 가능한 품질과 포맷을 먼저 확인할 수 있음- 출력에는 사이트, 제목, 스트림, 컨테이너, 품질, 크기, 다운로드에 사용할
--itag예시가 포함됨 - 기본 다운로드는 목록 맨 위 항목을 사용함
- 출력에는 사이트, 제목, 스트림, 컨테이너, 품질, 크기, 다운로드에 사용할
- 다른 포맷을 원하면 출력에 표시된
--itag값을 사용함- 예시로 YouTube의
Me at the zoo동영상에서--itag=18로 mp4를 선택할 수 있음
- 예시로 YouTube의
- YouTube 동영상에 자막이 있으면 비디오 파일과 함께 SubRip 자막 형식으로 내려받음
- 포맷 선택은 아직 대부분의 지원 사이트에서 일반 기능으로 구현되지 않았음
- 이 경우 기본 다운로드 포맷은 최고 품질임
- FFmpeg는 여러 조각으로 스트리밍되는 비디오 다운로드·병합과 YouTube 1080p 이상 고해상도 비디오에 필요함
- 다운로드 후 조각 병합을 원하지 않으면
--no-merge또는-n을 사용함
- 다운로드 후 조각 병합을 원하지 않으면
URL, 웹페이지, 검색 기반 다운로드
- 정확한 리소스 URL이 있으면
you-get URL로 직접 내려받을 수 있음- 예시로 JPEG 이미지 URL을 입력하면 사이트, 제목, 타입, 크기를 표시하고 파일을 저장함
- 정확한 리소스 URL이 아니라 웹페이지 URL을 주면 페이지를 긁어 관심 있는 항목을 찾으려 함
- 이 기능은 실험적이며 완벽하지 않음
- Tumblr, Blogger 같은 인기 사이트에서 큰 이미지 스크래핑에 가장 잘 동작함
- 인터넷의 모든 사이트에 적용되는 보편 패턴은 없음
- URL이 아닌 문자열을 넘기면 Google Videos에서 검색하고 가장 관련성이 높은 비디오를 다운로드함
- 원하는 것과 정확히 같지 않을 수 있지만, 매우 그럴듯한 결과일 가능성이 있다고 되어 있음
다운로드 제어와 실행 옵션
- 다운로드 중
Ctrl+C로 중단할 수 있고, 출력 디렉터리에 임시.download파일이 남음- 같은 인자로 다시 실행하면 마지막 세션부터 재개함
- 임시 확장자가 사라진 완전한 파일이 있으면 다운로드를 건너뜀
--force또는-f는 강제 재다운로드를 수행하며, 같은 이름의 기존 파일이나 임시 파일을 덮어씀
--output-dir또는-o로 저장 경로를 지정하고,--output-filename또는-O로 파일명을 지정할 수 있음- 기본 비디오 제목에 현재 셸, 운영체제, 파일시스템과 맞지 않는 특수 문자가 있을 때 유용함
- 배치 다운로드 스크립트에서 지정 폴더와 지정 이름으로 저장할 때도 유용함
--http-proxy또는-x로 HTTP 프록시를 지정할 수 있음- 기본적으로 시스템 프록시 설정인
http_proxy환경 변수가 적용됨 - 프록시를 끄려면
--no-proxy를 사용함 - Youku 같은 일부 사이트에서 중국 본토에서만 접근 가능한 비디오 정보를 추출할 때
--extractor-proxy또는-y를 사용할 수 있음
- 기본적으로 시스템 프록시 설정인
--player또는-p는 다운로드 대신mpv,vlc같은 미디어 플레이어에 비디오를 전달함- 브라우저를 플레이어로 지정하면 광고나 댓글 섹션 없이 브라우저에서 볼 수 있음
- 다른 다운로드 매니저를 시작하는 데도 쓸 수 있지만 잘 맞지 않을 수 있음
인증, 추출 데이터, 지원 사이트
- 공개되지 않은 비디오처럼 계정 로그인이 필요한 콘텐츠는
--cookies또는-c로 브라우저 쿠키를 전달해야 함- 현재 지원 쿠키 형식은 Mozilla
cookies.sqlite와 Netscapecookies.txt임
- 현재 지원 쿠키 형식은 Mozilla
--url또는-u는 페이지에서 추출한 다운로드 가능 리소스 URL 목록을 출력함--json은 추출 데이터 요약을 JSON 형식으로 출력함- 이 기능은 아직 안정화되지 않았으며 JSON 스키마는 향후 깨지는 변경이 있을 수 있음
- 지원 사이트 목록에는 YouTube, X(Twitter), VK, Vimeo, Tumblr, SoundCloud, Pinterest, Internet Archive, Instagram, Facebook, Dailymotion, Bandcamp, niconico, bilibili, Youku, Naver, TikTok, Zhihu 등이 포함됨
- 사이트별로 비디오, 이미지, 오디오 지원 여부가 다름
- 목록에 없는 사이트는 범용 추출기가 페이지에서 관심 있는 리소스를 찾아 다운로드함
문제 보고와 라이선스
- 원하는 콘텐츠를 받을 수 없을 때는 Known Bugs를 먼저 확인함
- 새 문제 보고나 기여 전에는 기여 가이드라인을 읽어야 함
- 빠른 질문은 Gitter 채널 #soimort/you-get에서 할 수 있음
- 소프트웨어는 MIT license로 배포됨
- 소프트웨어는 보증 없이 “있는 그대로” 제공됨
- 저작권 침해나 기타 불법 목적 사용에 대해서 작성자는 책임지지 않음
- 저장소는 코드만 제공하며 사용 방식은 사용자 재량에 맡겨짐
댓글과 토론
Hacker News 의견들
-
한동안 인터넷은 비싸고 대역폭은 낮았지만 YouTube에서 음악과 강의를 듣는 걸 좋아했음. 어느 순간 오디오 스트림만 받으면 대역폭 비용을 90% 줄일 수 있다는 걸 깨달았음
youtube-dl과yt-dlp에는 요청한 형식/품질의 URL을 출력하는-G플래그가 있었고, 컴퓨터에서는 명령줄로 URL을 얻어 VLC에 넣어 썼음
휴대폰에서는 처음엔 SSH로 VPS에 파일을 먼저 받은 뒤 다시 폰으로 내려받는 복잡한 우회를 썼지만, 나중에 폰 브라우저가 URL을 직접 재생할 수 있다는 걸 알고youtube-dl -G -f bestaudio {url}용 PHP 프런트엔드를 만들었음
지금은 온라인에 없고 코드도 잃어버렸지만 사실상 한 줄짜리였음.you-get도--url/-u로 같은 용도를 지원하는 듯해서, 이 기능이 얼마나 유용한지 알리고 싶었음
화면을 끄고 재생하면 배터리도 80% 절약됨. YouTube도 이걸 알고 있어서, 오디오 스트림만 가져오는 백그라운드 재생을 유료 기능으로 만든 것 같음- Brave Mobile 브라우저는 백그라운드 동영상 오디오 재생을 켤 수 있어서 YouTube Premium 같은 구독이 필요 없어짐
youtube-dl은 더 이상 잘 동작하지 않는 듯하고, 나는 포크인 yt-dlp를 써야 했음. 이렇게 프로젝트를 갈아타는 건 늘 불안하지만, 적어도 널리 쓰이는 것 같긴 함- 어머니가 오디오북을 정말 좋아해서, YouTube 링크를 공유하면 처리하는 Telegram 봇을
node-red로 만들어 드렸음
링크는 FIFO로 보내지고, 작은 데몬이 순차적으로 다운로드해서 전용 incoming 폴더에 저장함. 봇은 오디오만 받을 수도 있고 전체 동영상도 받을 수 있는데, 어머니의 Telegram ID에서는 오디오만 받도록 해둠
이 폴더는 Jellyfin이 감시하고 있어서 어머니가 내려받거나 바로 들을 수 있음. 2년 동안 오디오북을 1TB 넘게 받으셨고 아주 좋아하심
데몬 코드: https://gist.github.com/entropie/d265e94136b9777cc6b3190189b... - 저대역폭 상황에서는 자주 144p를 고름. 용량은 좋은 품질의 오디오 전용 스트림과 거의 비슷하지만, 45분에 한 번이라도 화자를 볼 수 있다는 장점이 있음. 배터리도 마찬가지로 아낄 수 있음
144p 영상은 묘하게 평화롭고 편안함. 반짝이는 색감이나 복잡한 디테일에 산만해지지 않고, 그냥 듣는 데 집중할 수 있음 - iOS Safari에서는 Safari 앱을 벗어난 뒤 지금 재생 중 인터페이스에서 동영상 재생 버튼을 빠르게 누르면, YouTube 동영상 오디오를 백그라운드 재생하는 식으로 꼬이게 만들 수 있음
주로 YouTube Premium이 있어도 백그라운드에서 재생되지 않는 멤버십 전용 영상을 재생할 때 씀. iOS가 업데이트될 때마다 이 “글리치”를 막지 않길 기도함
-
이 프로젝트는 수정 PR 없이 이슈만 보고하는 걸 원하지 않는 것처럼 보임
“you-get 사용 중 발견한 문제를 보고하려면 Pull Request를 열어야 하며…”라는 식이라, 이런 방식은 전에 본 적이 없음- 다른 사람이 말했듯이 수정 자체가 아니라 실패하는 테스트를 원한다는 뜻으로 보임
요구사항은 문제의 자세한 설명과, 그 문제를 단위 테스트로 다루는 최소 한 개의 커밋임. 여기서 “addressing”이라는 단어는 별로고, “demonstrating”이 더 나았을 것 같음 - 중국어 버전에는 “GitHub Issues 남용을 막기 위해 일반 이슈는 받지 않는다”로 번역되는 추가 헤더가 있음. 예전 영어 문구에는 이렇게 적혀 있었음
you-get은 현재 이슈 처리에 공격적인 접근을 실험 중이며, 버그 보고는 pull request를 통해 코드로 다뤄져야 한다는 내용임
https://github.com/soimort/you-get/commit/75b44b83826b3c2d9a...
아마 스팸이 너무 많았던 것 같음. 참고로tests/test.py는 여러 웹사이트에 대해 추출기를 직접 실행하는 것처럼 보이고, 네트워크 요청과 응답을 어디서 모킹하는지는 못 찾겠음. PR 만드는 사람에게 과정을 단순하게 하려는 의도일 수도 있음 - 문제 해결 여부를 보여줄 수 있는 테스트가 포함된 PR을 제출하라는 뜻으로 보임
- 사람들이 테스트나 전체 수정까지 시도하도록 장려하는 생각은 흥미롭지만, 그것만 받겠다고 하는 건 좀 과해 보임. 다만 내가
you-get을 유지보수하는 건 아니니, 그들이 어떤 일을 겪는지는 모름
명령줄 프로그램을 제대로 실행할 줄 모르는 사람들이 반복적으로 올리는 이슈 폭주를 걸러내는 효과적인 방법일 수도 있음 - 실패하는 테스트를 작성하는 건 비교적 쉽고, 이슈 조정에 드는 일을 크게 줄여줌. GitHub Issues가 지원 포럼으로 변하는 위험도 낮아짐
이 덕분에 프로젝트 유지보수가 쉬워지고 더 오래 유지된다면 괜찮다고 봄
- 다른 사람이 말했듯이 수정 자체가 아니라 실패하는 테스트를 원한다는 뜻으로 보임
-
제목과 설명 앞부분만 보고는 페이지에서 아무거나 잡아내려는 휴리스틱 기반 도구라고 생각했음. 특정 사이트 지원 도구가 없을 때, 즉 대부분은 “yt-dlp가 지원하지 않을 때” 유용한 그런 도구 말임
그런데 실제로는 어느 정도 인기 있는 소스마다 별도 추출기가 있는 추출기 기반 구조임. 결국 더 단순한 yt-dlp 복제판에 가까운 것 아닌가 싶음 -
계속 이 오류가 나는 사람이 있는지 궁금함
you-get: [error] oops, something went wrong.로 시작해서 네트워크 문제 확인, 최신 버전 확인, 알려진 버그 확인,--debug옵션 실행을 안내함
디버그 플래그를 써도 별 도움이 안 됐고,pattern = str(pattern, 'latin1')에서TypeError: decoding to str: need a bytes-like object, NoneType found가 났음
나이 제한을 우회할 수 있는지 보려고 했는데, 나이 제한 없는 영상에서도 같은 오류가 났음- Python 버전을 확인해보는 게 좋음
Pyenv 같은 도구로 최신 Python으로 바꾸거나,docker run -it -v $(pwd):/mnt python:3.13 bash같은 식으로 Docker 이미지를 띄워 그 안에서 유틸리티를 써보면 됨
- Python 버전을 확인해보는 게 좋음
-
왜 이게 yt-dlp보다 나은지 설명해줄 수 있나?
- 흥미로운 질문임. 의존성은 라이브러리 하나뿐이지만, 실제로 얼마나 많은 코드가 직접 작성된 것인지는 궁금함
예를 들어 전용 mp4 조이너가 있는 게 신기했음. 이미 ffmpeg가 있다면 직접 더 잘 만들 방법은 거의 없을 텐데
https://github.com/soimort/you-get/blob/develop/src/you_get/... - yt-dlp보다 낫다고 어떻게 추론했는지 궁금함. Google이 계속 막으려 드는 영역에서는 선택지가 많을수록 좋다고 봄
- 흥미로운 질문임. 의존성은 라이브러리 하나뿐이지만, 실제로 얼마나 많은 코드가 직접 작성된 것인지는 궁금함
-
사이트별 추출기와 변환기 라이브러리를 갖춘 ytdl 스타일 미디어 다운로더를 정확히 “멍청한” 도구라고 부르긴 어렵지만, ytdl 같은 프로젝트가 더 생기는 건 여전히 좋음
-
지원 사이트 목록에 Bandcamp가 있는 이유를 잘 모르겠음. Bandcamp는 아티스트에게 먼저 돈을 내면 파일을 그냥 다운로드할 수 있게 해줌
이 도구로 받을 수 있는 건 아티스트가 구매 전 무료로 들어보게 허용했기 때문임. 이 도구로 내려받는 건 완전히 불필요하고 좀 무례한 행동처럼 보임. Bandcamp에는 주로 소규모 독립 아티스트와 레이블이 있음- 지원 사이트 목록은 도덕적 이유로 어디에 이 도구를 써야 하는지 선언하는 게 아님. 그냥 이 도구가 동작하는 인기 사이트 목록일 뿐임
- 구독하거나 구매한 뒤에도 이 도구를 쓸 수 있다고 봄. 사람들은 이미 돈 낸 콘텐츠도, 각기 다른 폐쇄형 생태계의 앱 5개에 로그인하는 수고를 줄이려고 이런 자동화 도구로 내려받음
- 모두가 Bandcamp에 결제할 수 있는 나라에 사는 건 아닐 수도 있음
개인적으로도 불안정하거나 느린 네트워크, 비싼 통신사 때문에 오프라인으로 미디어를 소비하고 싶거나 그래야 할 때가 있음. 그렇다고 마음에 들면 나중에 돈을 내지 않겠다는 뜻은 아님 - 해적질하는 사람들은 어느 소득 수준부터 어떤 콘텐츠를 훔치는 게 도덕적이거나 비도덕적이라고 보나?
- 모두가 아티스트가 자기 작품에 돈을 받아야 한다는 데 동의하는 건 아님
-
잘 만든 것 같음. 하지만 소비자 입장에서는 yt-dlp 대신
you-get을 써야 할 이유가 뭔지 궁금함
방대한 사이트에서 꽤 잘 동작하는 yt-dlp보다 어떤 강점이 있나?
[1] https://github.com/yt-dlp/yt-dlp/blob/master/supportedsites.... -
설명서에 “Google Videos에서 검색하고 다운로드:
$ you-get "Richard Stallman eats"”라고 되어 있음
설명서를 자주 읽지는 않는데, 이번엔 읽었다가 좀 역겨운 이스터 에그를 발견했음 -
마음에 듦. Chrome/Firefox용 동반 확장이 있어서
you-get을 백엔드로 쓰고 매끄럽게 구현하면 좋겠다고 상상함
더 앞서 나가면, YouTube에 들어갔을 때 YouTube 플레이어를 우회하고 광고 없이 콘텐츠를 직접 재생하는you-get확장을 떠올릴 수 있음. YouTube뿐 아니라 다른 플랫폼에도 적용 가능함- FastStream Video Player 같은 느낌임
https://addons.mozilla.org/en-US/firefox/addon/faststream/?u...
- FastStream Video Player 같은 느낌임