실용 도구

2KB 가짜 파일과 작별하기: MP4 동영상 다이렉트 링크를 정확하게 캡처하고 다운로드하는 방법 (전체 명령줄 솔루션 포함)

`.mp4`로 끝나는 링크를 보고 신나서 다운로드 소프트웨어에 넣었는데, 2KB짜리 웹페이지 파일만 다운로드되거나 화면에 `403 Forbidden` 오류가 가득한 것을 본 적이 있습니까? 아주 익숙하지 않습니까?

2026년 4월 21일·읽는 데 약 4분

.mp4로 끝나는 링크를 보고 신나서 다운로드 소프트웨어에 넣었는데, 2KB짜리 웹페이지 파일만 다운로드되거나 화면에 403 Forbidden 오류가 가득한 것을 본 적이 있습니까? 아주 익숙하지 않습니까?

저도 예전에 이런 “가짜 다이렉트 링크”에 시달리다 못해 인터넷 속도 문제인 줄 알았습니다. 사실 이것은 모두 서버 측의 속임수를 이해하지 못했기 때문입니다. 웹페이지의 동영상 다운로드 버튼은 크로스 오리진 오류를 보고하고, 복사한 링크에는 만료 Token이 포함되어 있습니다… 오늘 우리는 “재생은 되지만 다운로드할 수 없는” 저주를 완전히 끝낼 것입니다. 이 정확한 식별, 패킷 캡처 문제 해결, 강제 다운로드의 보모 수준 프로세스를 마스터하고 강력한 명령줄 도구를 결합하면 동영상 다운로드 문제의 99%를 해결할 수 있습니다.

1. 확장자에 속지 마십시오. 진짜 “다이렉트 링크”란 무엇입니까?

핵심 원칙을 기억하십시오. URL에 있는 .mp4는 위장일 뿐이며, 진정한 다이렉트 링크는 서버의 응답 헤더(Headers)에 달려 있습니다.

다운로드에 실패했다면, 서버가 몰래 다른 페이지로 302 리디렉션했거나 401(로그인 안 됨), 403(핫링킹 방지 차단)을 반환했을 가능성이 큽니다. 직접 다운로드할 수 있는 합격된 다이렉트 링크 응답은 반드시 다음과 같아야 합니다.

HTTP/1.1 200 OK
Content-Type: video/mp4
Content-Length: 104857600
Content-Disposition: attachment; filename="sample.mp4"
Accept-Ranges: bytes

이 응답을 어떻게 해석합니까?

  • video/mp4는 위장된 HTML이 아니라 진짜 동영상임을 증명합니다.
  • Content-Length는 파일의 실제 크기를 나타냅니다.
  • Content-Disposition: attachment는 서버가 “이것을 파일로 다운로드하십시오”라고 명시하는 것입니다.
  • Accept-Ranges: bytes는 이어받기를 지원함을 의미합니다(이것은 매우 중요합니다!).

2. 황금 문제 해결법: 먼저 탐색하고 나중에 다운로드하십시오

출처를 알 수 없는 링크에 직면했을 때 가장 확실한 방법은 단계별로 탐색하는 것입니다. 이것은 “무작정 다운로더를 찾아 시행착오를 겪는 것”보다 훨씬 빠릅니다.

1단계: 브라우저 주소창에 직접 붙여넣기 URL을 브라우저에 직접 붙여넣으십시오. 브라우저가 독립적인 순수 동영상 재생 인터페이스를 열거나 직접 다운로드 상자를 팝업한다면 축하합니다. 그냥 마우스 오른쪽 버튼을 클릭하여 “다른 이름으로 저장”을 선택하면 됩니다.

2단계: curl 명령줄을 사용하여 “바닥 탐색”하기 브라우저가 일반 웹페이지를 연다면 이것은 진정한 파일 다이렉트 링크가 아님을 의미합니다. 터미널을 열고 curl을 사용하여 가벼운 헤더 탐색을 수행하십시오.

# 응답 헤더만 보고 리디렉션을 따릅니다(실제 파일은 다운로드하지 않음).
curl -I -L "https://example.com/path/video.mp4"

Content-Type: text/html을 반환하거나 긴 .ts 세그먼트 목록을 반환한다면 즉시 MP4로 다운로드하려는 환상을 버리십시오.

3. 핫링킹 방지에 대한 궁극의 필살기: DevTools 패킷 캡처

많은 동영상 웹사이트는 요청 헤더의 Referer(출처 페이지), Origin을 확인하고 심지어 Cookie(로그인 상태)를 요구하기도 합니다. 이때 가장 빠른 방법은 브라우저의 작업을 직접 복사하는 것입니다.

  1. 동영상이 있는 웹페이지를 열고 F12를 눌러 Network(네트워크) 패널로 들어갑니다.
  2. Preserve log(로그 유지)를 선택하고 캐시가 너무 많으면 Disable cache(캐시 사용 안 함)도 선택합니다.
  3. 페이지를 새로 고침하거나 동영상 재생을 클릭합니다.
  4. 필터에서 먼저 mp4를 검색합니다(없으면 m3u8 또는 ts를 검색합니다).
  5. 용량이 계속 팽창하거나 상태 코드가 206/200인 미디어 요청을 찾아 클릭하여 Headers를 검사하고 Referer, Cookie 등의 핫링킹 방지 정보가 있는지 확인합니다.
  6. 해당 요청을 마우스 오른쪽 버튼으로 클릭하고 Copy -> Copy as cURL을 선택합니다.

이 코드를 가져온 후 터미널에 직접 붙여넣고 실행하면 됩니다. 이것이 바로 모든 통행증이 포함된 “무적의 다운로드 명령”입니다!

4. 명령줄의 강력한 무기: curl 및 wget의 고급 사용법

다이렉트 링크를 확인하고 요청 헤더를 파악했다면 다음은 하드코어 다운로드 단계입니다. 다음은 curlwget에서 가장 자주 사용되고 확실한 명령입니다.

curl 필수 기술

# 기본 다운로드: 직접 다운로드, 파일 이름은 URL에 의해 결정됨
curl -L -O "https://example.com/path/video.mp4"
 
# 이어받기: 네트워크가 끊기면 이어서 다운로드
curl -L -C - -o "video.mp4" "https://example.com/path/video.mp4"
 
# 핫링킹 방지 해제: Referer, User-Agent, Origin 및 Cookie 보완
curl -L \
  -e "https://example.com/watch/123" \
  -A "Mozilla/5.0" \
  -H "Origin: https://example.com" \
  -b "sessionid=abc123" \
  -o "video.mp4" \
  "https://cdn.example.com/media/abc.mp4?token=..."

wget 필수 기술 (이어받기에 더 적합함)

# 기본 다운로드: 응답 헤더를 출력하고 지정된 파일 이름으로 저장
wget --server-response -O "video.mp4" "https://example.com/path/video.mp4"
 
# 핫링킹 방지 해제: 완전한 통행증과 Cookie 파일 마운트
wget \
  --referer="https://example.com/watch/123" \
  --user-agent="Mozilla/5.0" \
  --header="Origin: https://example.com" \
  --load-cookies cookies.txt \
  -O "video.mp4" \
  "https://cdn.example.com/media/abc.mp4?token=..."

5. .m3u8을 캡처한 경우는 어떻게 합니까?

절대로 .m3u8 확장자를 .mp4로 변경하여 자신을 속이지 마십시오! .m3u8은 수백, 수천 개의 동영상 세그먼트(.ts 또는 fMP4)가 포함된 재생 목록(메뉴와 유사)일 뿐입니다.

이런 상황에 직면하면 즉시 HLS 사고 방식으로 전환하고 curl을 포기하고 ffmpeg 또는 전용 다운로더를 꺼내십시오.

솔루션 A: ffmpeg를 사용한 원클릭 병합

# M3U8 목록의 모든 세그먼트를 다운로드하고 손실 없이 MP4로 병합
ffmpeg -i "https://example.com/master.m3u8" -c copy "output.mp4"
 
# 서버가 까다로운 경우 위장 매개변수 추가
ffmpeg \
  -user_agent "Mozilla/5.0" \
  -referer "https://example.com/watch/123" \
  -cookies "sessionid=abc123; path=/; domain=example.com;" \
  -i "https://cdn.example.com/master.m3u8?token=..." \
  -c copy "output.mp4"

솔루션 B: N_m3u8DL-RE (반자동화 신기)

복잡한 HLS / DASH 스트림의 경우 이 도구의 환경이 더 좋습니다.

# 최상의 트랙을 자동 선택하고 요청 헤더를 첨부하며 완료 후 MP4로 먹싱
N_m3u8DL-RE "https://example.com/master.m3u8" \
  -H "Referer: https://example.com/watch/123" \
  -H "Cookie: sessionid=abc123" \
  --auto-select \
  -M format=mp4 \
  --save-name "video"

6. 증상별 대처: 4가지 일반적인 오류 및 해결 방법

오류가 발생하면 즉시 표를 확인하여 몇 분 안에 문제를 찾아내십시오.

  • 오류 403 또는 “브라우저에서는 볼 수 있지만 명령줄에서는 안 됨”: 핫링킹 방지 차단이 확실합니다. DevTools 패킷 캡처로 이동하여 Referer, OriginCookie를 보완하십시오.
  • 다운로드한 파일이 몇 KB에 불과함: 다운로드 계층을 잘못 선택했습니다! 캡처한 것은 리디렉션(302 점프) 또는 HTML 오류 페이지입니다. curl -L을 사용하여 강제로 점프를 따르십시오.
  • 콘솔에서 CORS 크로스 오리진 오류 보고: 크로스 오리진 제한은 웹페이지 내의 스크립트에 적용되며, 주소창에 직접 링크를 복사하여 다운로드하는 것은 제한하지 않습니다! 크로스 오리진을 파일 손상으로 오해하지 마십시오.
  • 링크가 잠시 후 403으로 무효화됨: 이것은 Token이 포함된 서명된 링크이며 만료되었습니다. 페이지를 새로 고침하여 최신 URL을 캡처하십시오.
  • 이어받기 시 416 (Range Not Satisfiable) 오류 발생: 이것은 로컬에 남아 있는 손상된 파일의 길이가 이미 서버 측의 진행 상황을 초과했음을 의미합니다. 억지로 이어받지 말고 손상된 파일을 삭제하고 다시 다운로드하십시오.

7. 최종 보안 및 규정 준수 알림

다운로드가 완료된 후 큰 파일인 경우 해시 확인을 수행하여 파일이 손상되지 않았는지 확인하는 것이 좋습니다.

# macOS / Linux
shasum -a 256 ./video.mp4
 
# Windows PowerShell
Get-FileHash .\video.mp4 -Algorithm SHA256

(면책 조항: 기술적으로 가능하다고 해서 법적으로 옳다는 의미는 아닙니다. 액세스 권한이 있는 콘텐츠를 다운로드하고 있는지 확인하고, 이 기술을 DRM 보호 스트림을 크래킹하거나 불법 복제 콘텐츠를 배포하는 데 사용하지 마십시오.)


The Bottom Line
동영상 다운로드의 본질은 운에 맡기는 것이 아니라 서버와 암호를 교환하는 것입니다. 다음에 다운로드할 수 없는 동영상을 만나면 먼저 F12를 눌러 패킷을 캡처하고 응답 헤더를 확인한 다음 올바른 요청 헤더가 있는 cURL 또는 wget을 사용하여 정확하게 타격하십시오. 이제 아무 웹페이지 동영상이나 열고 Copy as cURL을 사용하여 첫 번째 다이렉트 링크를 캡처해 보십시오!

작성자: Baiwei

관련 글

M3U8 스트리밍 관련 추천 아티클입니다