Chrome에서 Blob 동영상 다운로드하는 방법 (2026 방법)
blob: URL에서 우클릭 저장 실패 이유와 blob URL로 제공되는 동영상을 다운로드하는 3가지 방법.
Network 탭을 열어서 동영상 URL을 찾으려니 blob:https://example.com/abc-def-1234 같은 주소가 보입니다. 클릭하면 동영상 파일이 나올 줄 알았는데 아무것도 없습니다. 우클릭 → 다른 이름으로 저장을 누르면 0바이트 파일이 저장됩니다. 이 가이드에서는 blob URL이 정확히 무엇인지, 왜 일반적인 다운로드 방법이 작동하지 않는지, 그리고 기본 동영상을 얻을 수 있는 3가지 신뢰할 수 있는 방법을 설명합니다.
blob URL이 실제로 무엇인지
blob: URL은 네트워크 주소가 아닙니다. 이것은 브라우저의 메모리에 있는 데이터에 대한 JavaScript가 만든 참조입니다. 형식은 다음과 같습니다:
blob:https://example.com/{uuid}
{uuid}는 URL.createObjectURL()로 생성되며 페이지의 JavaScript가 브라우저에 제공한 이진 데이터 청크를 가리킵니다. 페이지가 <video src="blob:..."> 을 설정하면 플레이어는 해당 메모리 내 버퍼에서 재생됩니다.
두 가지 핵심 특성:
- 로컬 전용: blob URL은 이를 생성한 탭에만 존재합니다. 다른 탭에 붙여넣으면 아무것도 얻을 수 없습니다 — 그 탭에는 소스 데이터에 대한 참조가 없습니다.
- 일시적: blob은 탭이 닫히거나 페이지가
URL.revokeObjectURL()을 호출할 때 가비지 수집됩니다. 페이지를 새로고침하면 그 페이지의 모든 blob URL이 무효화됩니다.
우클릭 → 다른 이름으로 저장이 실패하는 이유는 Chrome이 blob URL에 대한 네트워크 요청을 하려고 시도하는데, 응답할 서버가 없기 때문입니다 — 데이터는 HTTP 엔드포인트가 아닌 JavaScript 메모리에 있습니다.
페이지에서 blob URL을 동영상에 사용하는 이유
현대 플레이어들이 blob URL을 사용하는 세 가지 이유:
1. Media Source Extensions (MSE)
MSE는 JavaScript가 별도로 가져온 세그먼트에서 동영상 스트림을 구축하도록 하는 브라우저 API입니다 (네이티브 HLS 지원이 없는 브라우저에서 HLS 및 DASH 플레이어가 작동하는 방식). MSE 파이프라인은 MediaSource 객체를 생성하며, 이는 URL.createObjectURL(mediaSource)를 통해 blob URL로 래핑됩니다. 비디오 엘리먼트는 해당 blob URL에서 재생되는 동안 JavaScript는 계속해서 새 세그먼트를 MSE 버퍼에 공급합니다.
대부분의 현대적 HLS/DASH 플레이어 (hls.js, dash.js, Shaka Player, Video.js)는 이 패턴을 사용합니다. HLS를 재생하는 페이지에서 blob URL이 보이는 이유가 바로 이것입니다.
2. 복호화된 DRM 스트림
Widevine, FairPlay, PlayReady DRM 시스템은 동영상 스트림을 폐쇄된 시스템 내에서 복호화한 다음 복호화된 바이트를 MSE에 전달합니다. 결과는 다른 것과 비슷한 blob URL이지만 사용자가 평문 형식으로 저장할 수 없는 복호화된 콘텐츠를 포함합니다. DRM으로 보호된 blob URL은 합법적으로 다운로드할 수 없습니다. 우리는 이에 대한 우회 기술은 다루지 않습니다.
3. 개인정보 보호 / 직접 링크 방지
일부 사이트는 우클릭 저장을 방지하기 위해 특별히 blob URL을 사용합니다. 동영상 데이터는 JavaScript를 통해 세그먼트로 가져와 blob으로 조합되며, 사용자가 다른 브라우저에 붙여넣을 수 있는 직접 MP4 URL이 없습니다. 이것은 소프트 다운로드 방지 조치입니다 — 진정한 보안 경계는 아닙니다.
방법 1: MSE-fed blob을 처리하는 브라우저 확장
비디오 플레이어와 같은 탭에서 실행되는 브라우저 확장은 다음을 할 수 있습니다:
- 플레이어가 만드는 HLS/DASH 매니페스트 가져오기 감시
- 동일한 인증 세션을 사용하여 동일한 세그먼트 다시 가져오기
- FFmpeg.wasm을 통해 이를 MP4로 합성
이것은 정확히 HLS/DASH를 위해 만들어진 확장이 하는 일입니다. blob URL은 무관합니다 — 확장은 blob에 원래 공급한 매니페스트 URL로 한 단계 더 깊이 들어갑니다.
Video Downloader One-for-All은 blob URL을 완전히 무시함으로써 blob으로 제공된 동영상을 처리합니다:
- blob 동영상이 있는 페이지를 엽니다
- 재생이 시작될 때까지 기다립니다
- 확장 아이콘을 클릭합니다 — 매니페스트가 감지되면 도구 모음 배지가 파란색으로 변합니다 (플레이어가 이를 blob으로 래핑하는지 여부와 관계없이)
- 품질을 선택하고 다운로드를 클릭합니다
비디오 엘리먼트 자체가 blob URL을 표시하더라도 해상도 및 품질 드롭다운이 채워진 것을 볼 수 있습니다 — 확장이 blob을 읽지 않고 기본 매니페스트를 읽고 있습니다.
방법 2: DevTools Network 탭 + 매니페스트 URL 추출
정확히 무엇이 일어나는지 이해하고 싶다면 수동으로 단계별로 진행합니다:
- blob 동영상이 있는 페이지를 엽니다
- DevTools를 엽니다 (F12)
- Network 탭을 클릭합니다
- 필터 상자에
m3u8또는mpd입력합니다 (HLS 또는 DASH) - 페이지를 새로고침합니다
- 동영상을 재생합니다
- 플레이어가
.m3u8또는.mpd매니페스트에 대한 요청을 한 다음 일련의.ts/.m4s/.mp4세그먼트 파일에 대한 요청을 할 것입니다
매니페스트 URL을 얻으면 FFmpeg 또는 yt-dlp를 사용하여 다운로드할 수 있습니다:
ffmpeg -i "https://example.com/master.m3u8" -c copy output.mp4
Network 탭에 .m3u8 또는 .mpd가 나타나지 않으면 .mp4 검색합니다 (페이지가 원시 MP4 청크를 MSE에 공급할 수 있음):
Network tab filter: media
단일 .mp4 URL에 대한 순차 범위 요청을 찾습니다 — 이것들은 MSE 기반 점진적 다운로드입니다. 전체 URL (?range=... 또는 ?start=... 앞부분)은 원하는 파일입니다.
방법 3: MediaRecorder API (최후의 수단)
blob URL이 복호화된 콘텐츠를 포함하고 있으며 찾을 수 있는 기본 네트워크 매니페스트가 없는 경우 — 때로는 인브라우저 편집기 같은 클라이언트 측 처리된 동영상의 경우 — Chrome의 MediaRecorder API를 사용하여 비디오 엘리먼트의 출력을 새 MP4로 캡처할 수 있습니다:
// Run in the page's DevTools console
const video = document.querySelector('video');
const stream = video.captureStream();
const recorder = new MediaRecorder(stream, { mimeType: 'video/webm' });
const chunks = [];
recorder.ondataavailable = e => chunks.push(e.data);
recorder.onstop = () => {
const blob = new Blob(chunks, { type: 'video/webm' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'video.webm';
a.click();
};
recorder.start();
// ... play the video to completion ...
recorder.stop();
이것은 WebM 파일을 생성합니다 (필요하면 FFmpeg로 MP4로 변환할 수 있음). 단점: MediaRecorder는 동영상이 재생되는 속도로 캡처합니다. 따라서 1시간 동영상을 기록하려면 1시간이 걸립니다. 그리고 비디오 엘리먼트가 captureStream() 적격 상태에 있을 때만 작동합니다 (대부분은 작동합니다; DRM으로 보호된 엘리먼트는 작동하지 않습니다).
이 접근 방식은 또한 화면 녹화와 동일한 제한 사항이 있습니다: 재인코딩 손실 (디코딩된 동영상 프레임을 직접 캡처하기 때문에 경미하지만), 그리고 탭이 초점을 유지해야 합니다.
blob 동영상에 찾을 수 있는 매니페스트가 없을 때
드문 경우이지만, 페이지는 JavaScript에서 동영상 데이터를 완전히 생성합니다 — 캔버스 기반 동영상 편집기, 인브라우저 게임 캡처, 커스텀 WebGL 파이프라인. blob URL은 어떤 서버에서도 가져온 적 없는 데이터를 포함합니다.
이 경우들에서는 MediaRecorder가 유일한 경로입니다. 기본 파일이 존재하지 않으므로 찾을 기본 파일이 없습니다 — 동영상은 페이지의 코드에 의해 실시간으로 생성 중입니다.
일반적인 질문
Chrome이 동영상 URL을 실제 파일 대신 blob:https://...로 표시하는 이유는 무엇입니까?
페이지가 단일 파일 URL에서 비디오 엘리먼트를 가리키는 대신 세그먼트를 Media Source Extensions 버퍼에 공급하기 위해 JavaScript를 사용하고 있기 때문입니다. 이는 적응형 스트리밍의 정상적이고 의도적입니다.
Ctrl+S를 눌러서 blob URL을 저장할 수 있습니까?
아니요. Ctrl+S는 동영상이 아닌 HTML 페이지를 저장합니다. 페이지 자체에서도 동영상 데이터는 JavaScript 메모리에 있으며 어떤 지속적인 파일도 아닙니다.
우클릭 → “동영상 다른 이름으로 저장”이 회색으로 표시됩니다. 이것이 DRM입니까?
반드시는 아닙니다. 많은 비DRM blob 동영상은 JavaScript (oncontextmenu 핸들러) 또는 플레이어 구성 방식으로 우클릭 저장을 비활성화합니다. DRM이 관련되어 있는지 확인하는 경로: DevTools → Application 열기 → EME 관련 이벤트 확인합니다. 페이지의 네트워크 요청에서 Widevine 또는 FairPlay 메시지 교환이 보이면 DRM이 작동 중이며 다운로드는 법적으로 가능하지 않습니다.
방법 2에서 다운로드한 파일에 오디오가 없습니다.
오디오/비디오 매니페스트 분리 문제에 부딪히고 있습니다. HLS Download Audio and Video Are Separate? Here’s How to Fix It에서 다루었습니다. Network 탭에서 별도의 audio.m3u8 또는 오디오 전용 DASH 세그먼트를 찾고 둘 다 FFmpeg에 전달합니다.
확장이 모든 blob 동영상에서 작동합니까?
HLS/DASH/MSE-fed MP4로 백업된 blob 동영상에서 작동합니다 — 이는 2026년 거의 모든 비DRM blob 동영상입니다. DRM으로 보호된 blob의 경우 답변은 아니오이며 이것은 수정 가능한 제한이 아닙니다. 순수 JavaScript 생성 동영상 (드문)의 경우 MediaRecorder가 유일한 경로입니다.
blob 동영상 다운로드가 합법입니까?
다른 동영상 형식의 경우와 동일한 답변: 콘텐츠의 라이센스 및 관할권에 따라 달라집니다. blob URL 자체는 법적 상태를 변경하지 않습니다 — 단지 데이터가 브라우저에 전달되는 방식일 뿐입니다.
비교
| 상황 | 최고의 방법 |
|---|---|
| HLS/DASH 백업 blob (가장 일반적) | 브라우저 확장 |
| 기본 사항이 무엇인지 확인해야 함 | DevTools Network 탭 |
| 인브라우저 생성 콘텐츠 (드문) | MediaRecorder API |
| DRM으로 보호된 blob | 합법적으로 다운로드 불가능 |
요약
blob URL은 동영상이 아닙니다. 이것은 페이지가 메모리에 조합한 데이터에 대한 참조입니다 (보통 기본 HLS 또는 DASH 매니페스트에서). 올바른 전략은 blob URL을 무시하고 이를 구축한 매니페스트를 찾는 것입니다 — 브라우저 확장이 자동으로 수행하는 것입니다.
Video Downloader One-for-All 설치하면 blob 추상화가 투명해집니다: 확장은 사용 가능한 품질을 표시하고 이를 다운로드합니다 (blob 여부와 관계없이). 기본 HLS 프로토콜 세부 사항은 How to Download m3u8 / HLS Streams를 참조하세요.