본문으로 건너뛰기
yt-dlp

Instagram용 yt-dlp 명령어 생성기

Instagram 게시물과 reels용 yt-dlp 명령어를 만듭니다. cookies는 기본으로 켜져 있습니다 —— 그것 없이는 거의 아무것도 되지 않기 때문입니다.

선택 사항입니다. 비워 두면 명령어가 URL 로 끝나므로 나중에 직접 채우면 됩니다.

만들어진 명령어

yt-dlp --merge-output-format mp4 --no-playlist --cookies-from-browser chrome https://www.instagram.com/p/Cxxxxxxxxxx/
기본

오디오만 고르면 소리 트랙만 뽑고 영상은 버립니다.

영상과 화질

높이 상한을 정합니다. yt-dlp는 그 상한 이하에서 가장 좋은 트랙을 고릅니다.

분리된 영상과 오디오 트랙을 병합해 담을 파일 형식입니다.

고급 옵션 (3)

화질 선택을 대체합니다. format 문법을 이미 아는 분을 위한 항목입니다.

재인코딩 없이 다시 포장만 합니다. 빠르고 손실이 없습니다.

영상을 다시 인코딩합니다. 느리고 손실이 있습니다 —— remux로 안 될 때만 쓰세요.

오디오

오디오를 변환할 대상 형식입니다.

VBR은 용량 대비 품질이 가장 좋고, 고정 bitrate는 용량을 예상하기 쉽습니다.

자막

삽입은 자막을 영상 안에 넣고, 저장은 옆에 별도의 .srt 파일을 만듭니다.

쉼표로 구분합니다. 사용 가능한 모든 언어를 원하면 all 이라고 쓰세요.

재생목록과 채널

URL이 영상과 재생목록에 동시에 속할 때 어떻게 할지 정합니다.

범위와 목록 모두 됩니다. 예를 들어 1-10,15, 또는 끝에서부터 하나씩 건너뛰는 -5::2.

고급 옵션 (1)

이미 내려받은 항목을 적어 두어 다시 실행할 때 건너뜁니다. 채널을 계속 동기화하는 방법이 바로 이것입니다.

구간과 챕터
고급 옵션 (2)

*00:01:30-00:03:00 같은 시간 범위, 또는 챕터 이름입니다. 앞의 별표는 시각이라는 뜻입니다.

메타데이터와 표지
고급 옵션 (3)
SponsorBlock

SponsorBlock 데이터를 바탕으로 커뮤니티가 표시한 구간을 파일에서 잘라냅니다.

고급 옵션 (1)

구간은 남기고 표시만 해서 직접 건너뛸 수 있게 합니다.

파일과 폴더

필드 이름은 %(...)s 안에 씁니다. 슬래시는 폴더를 만듭니다.

고급 옵션 (4)

파일을 저장할 위치입니다. 위 템플릿과 조합하면 하위 폴더도 만들 수 있습니다.

파일 이름의 최대 길이(문자 수)입니다.

필터
고급 옵션 (5)

YYYYMMDD, 또는 now-1month 같은 상대 날짜.

YYYYMMDD, 또는 상대 날짜.

이보다 작은 것은 건너뜁니다. 5M, 500K 같은 표기를 씁니다.

이보다 큰 것은 건너뜁니다.

멈추기 전까지 내려받을 파일 수입니다.

네트워크

예를 들어 2M 또는 500K. 남은 대역폭을 다른 일에 써야 할 때 유용합니다.

고급 옵션 (5)

조각으로 나뉜 트랙을 빠르게 합니다. 4 정도로 시작하면 무리가 없습니다.

실패한 조각을 몇 번 다시 시도할지. infinite 도 쓸 수 있습니다.

HTTP, HTTPS 또는 SOCKS proxy 주소입니다.

요청이 실제 브라우저에서 온 것처럼 보이게 합니다. 갑자기 403이 날 때 흔히 쓰는 해법입니다.

로그인과 cookies

로그인된 세션을 직접 읽습니다. 비공개, 연령 제한, 멤버 전용 콘텐츠에는 필요합니다.

고급 옵션 (1)

브라우저에서 내보낸 Netscape 형식 cookies.txt 파일입니다.

라이브 방송
고급 옵션 (2)

예정된 방송이 시작될 때까지 계속 확인합니다. MIN-MAX는 확인 간격(초)입니다.

우회 방법
고급 옵션 (3)

구식이며 --add-headers 로 대체되었습니다. 오래된 안내 글이 아직 많이 쓰기 때문에 남겨 두었습니다.

구식이며 --add-headers 로 대체되었습니다.

사이트별 전용 옵션입니다. 예를 들어 youtube:player_client=web.

출력과 디버그
고급 옵션 (2)
초기화

Instagram에는 세션이 필요합니다

Instagram은 로그인하지 않은 요청에 거의 아무것도 주지 않으므로 --cookies-from-browser 는 사실상 필수이며 선택 사항이 아닙니다. 명령어를 실행하기 전에 브라우저를 닫으세요. Chrome과 Edge는 실행 중에 cookies 데이터베이스를 잠급니다.

캐러셀은 재생목록으로 취급되므로 모든 항목을 받으려면 재생목록 처리를 재생목록 전체로 설정하세요. 스토리는 그 계정을 팔로우한 세션이 필요하고 24시간 뒤에 사라집니다.

Instagram은 자동 접근을 점점 더 불신합니다. 한 번에 너무 많이 너무 빨리 내려받은 세션은 다시 로그인하라는 요구를 받습니다 —— 어제 되던 명령어가 오늘 로그인 페이지를 돌려주면 그것이 징후입니다. 주 계정 대신 전용 계정을 쓰고, 가끔 평소처럼 로그인해 cookies를 신선하게 유지하며, 이렇게 쓰이는 계정은 명령어를 아무리 정성껏 짜도 때때로 표식이 남는다는 것을 받아들이세요. 그것은 플랫폼의 대가이지 yt-dlp의 버그가 아닙니다.

게시물, reels, 하이라이트는 같은 extractor를 통과하지만 세션마다 보이는 것이 다릅니다. 팔로우하는 계정의 reels는 문제없이 내려옵니다. 탐색 페이지의 reels는 그런 콘텐츠에 관여한 적 없는 세션에는 자주 거부됩니다. 하이라이트 —— 프로필에 고정된 스토리 띠 —— 는 각각 자기 스토리들의 재생목록으로 내려옵니다. IGTV는 은퇴했습니다. 오래된 링크가 아직 풀리는 때도 있지만, 새것은 아무것도 쓰지 않습니다.

Instagram은 yt-dlp가 늘 마주하는 어느 플랫폼보다 강하게 레이트 리밋을 겁니다. 동시 fragment는 상황을 낫게 하지 않고 악화합니다. 한 번에 한 항목, 실행 사이에 쉬는 간격을 두는 패턴만 살아남습니다. 여러 항목짜리 실행이 중간에 실패하는 것은 정상입니다 —— 기록 파일과 오류가 나도 계속이 있으면 재시도는 재시작이 아니라 재개가 됩니다. 이것이 중요한 이유는, 실행이 끝나기 무섭게 가장 앞선 항목들의 CDN 링크가 대개 만료되어, 통째로 다시 돌리면 미디어가 아니라 페이지를 다시 가져오게 되기 때문입니다.

되돌릴 수 없는 것들이 있습니다. 팔로우하지 않은 비공개 계정의 게시물, 24시간을 넘긴 스토리, 그리고 명령어를 실행하기 전에 이미 지워진 모든 것. 가져온 페이지 안의 CDN 링크는 빨리 만료되므로, 한 시간 전에 되던 미디어 URL이 지금은 거부될 수 있습니다 —— 오래된 링크를 재시도할 것이 아니라 게시물 페이지를 다시 가져오세요. 이 만료는 곧 내려받을 명분이기도 합니다. Instagram은 미디어를 계속 도달 가능하게 두겠다는 약속도 하지 않으면서, 만료는 지키거든요.

자주 묻는 질문

cookies 없이 Instagram이 실패하는 이유는?
Instagram은 로그인하지 않은 요청에 거의 아무것도 주지 않습니다. --cookies-from-browser 는 사실상 필수이고, 그 세션은 해당 게시물을 볼 수 있는 계정의 것이어야 합니다.
스토리나 reels를 받을 수 있나요?
reels는 일반 게시물처럼 동작합니다. 스토리는 그 계정을 팔로우한 세션이 필요하고 24시간 뒤 만료됩니다.
캐러셀 게시물의 모든 항목을 받으려면?
재생목록 처리를 재생목록 전체로 두세요 —— yt-dlp는 여러 항목 게시물을 재생목록으로 취급합니다.