# 동영상 캡처 — 영상의 한 장면을 그림으로

어느 지점이든, 원본 화질 그대로 한 장.

> MP4, MOV, WebM의 어느 프레임이든 원본 크기 PNG나 JPEG으로 저장합니다. 한 프레임씩 넘기거나, 몇 초마다 한 장씩 뽑을 수도 있습니다. 브라우저에서 돌아가고 업로드는 없습니다.

이 페이지는 브라우저 안에서만 동작하는 대화형 도구입니다(https://abox.tools/ko/동영상-캡처/). 도구에 넘긴 어떤 것도 업로드되지 않습니다. 아래는 이 페이지가 도구에 대해 글로 설명하는 내용 전부입니다. 도구를 쓰려면 이 주소를 여세요.

## 동영상은 **절대 업로드되지 않습니다**. 서버가 아예 없으니까요.

프레임을 찾고 풀고 그리는 일은 전부 내 브라우저가 내 하드웨어에서 합니다. 이 도구에는 네트워크 기능이 아예 없어서 가져올 것도 보낼 것도 없고, 설령 길이 있다 해도 이 페이지 반대편에는 동영상을 받아 줄 서버 자체가 없습니다.

- ✗ 업로드 없음
- ✗ 가입 없음
- ✗ 워터마크 없음
- ✓ 원본 해상도
- ✓ 오프라인 동작

## 동영상에서 한 장면을 저장하는 방법

1. **동영상을 고릅니다.** MP4, MOV, M4V, WebM을 선택 영역에 끌어다 놓거나 직접 찾아 주십시오. 브라우저가 디스크에서 바로 읽고, 그동안 무엇도 어디로 나가지 않습니다.
2. **장면을 찾습니다.** 재생하다 원하는 곳에서 멈추거나, 슬라이더를 끄십시오. MP4라면 슬라이더가 한 칸에 정확히 한 프레임씩 움직이므로, 보이는 것과 저장되는 것 사이에 반올림이 없습니다. 화살표 키가 한 프레임씩, `Shift`를 누르면 열 프레임씩 넘어갑니다.
3. **형식을 고릅니다.** PNG는 디코딩된 그대로의 프레임을 담고, 여기서 말하는 '원본 화질'이 그 뜻입니다. JPEG와 WebP는 더 작지만 동영상 자체 압축 위에 한 번 더 압축이 얹힙니다. 미리 보기용으로는 충분하고, 나중에 편집할 그림에는 맞지 않습니다.
4. **한 장을 뽑거나, 여러 장을 뽑습니다.** 한 장이면 그대로 다운로드로 갑니다. 'N초마다'는 영상을 한 번 훑으면서 지점마다 한 장씩 뽑습니다. 한눈에 보는 시트나 썸네일을 만들 때 쓸모가 있고, 저장 확인이 백 번 뜨는 대신 하나의 ZIP으로 나옵니다.

## 자세한 설명

[동영상의 한 프레임을 이미지로 저장하는 법](https://abox.tools/ko/가이드/동영상-캡처하는-법/): 영상에서 원래 해상도 그대로 스틸을 뽑는 방법. 일시정지한 플레이어를 찍은 스크린샷이 왜 같은 그림이 아닌지, 어떤 형식으로 저장할지, 그리고 원하던 그 프레임에 정확히 멈추는 법.

## 상자 속 다른 도구

- [동영상을 GIF로](https://abox.tools/ko/동영상-gif-변환/): 구간과 크기, 초당 프레임 수를 고르세요.
- [GIF 만들기](https://abox.tools/ko/gif-만들기/): 여러 장의 사진을 움직임 하나로.
- [GIF 프레임 분리](https://abox.tools/ko/gif-프레임-분리/): 모든 프레임을 PNG 한 장씩으로.
- [GIF 분석](https://abox.tools/ko/gif-분석/): 프레임, 재생 시간, 팔레트, 그리고 바이트가 어디로 갔는지.

## 자주 묻는 질문

### 제 동영상이 어딘가로 업로드되나요?

아닙니다. 읽고 푸는 일은 내 브라우저가 내 하드웨어에서 합니다. 이 도구에는 서버 쪽이 없고, 페이지의 `Content-Security-Policy`에는 연결할 수 있는 주소가 전부 적혀 있는데 그중 이 사이트 것은 없습니다. 듣는 것보다 확인이 낫다면 인터넷을 끊고 그냥 한 장 캡처해 보십시오.

### '원본 화질'이란 정확히 무슨 뜻인가요?

두 가지입니다. 하나는 페이지의 미리 보기 크기가 아니라 동영상 자체 해상도로 저장된다는 것입니다. 4K 영상이면 ⁦3840 x 2160⁩짜리 그림이 나옵니다. 다른 하나는 PNG를 고르면 디코더에서 나온 그대로 프레임이 저장된다는 것입니다. 파일이 담는 그림이 동영상이 담고 있는 그림 그 자체이고, 그 위에 두 번째 압축이 얹히지 않습니다. 재생 창을 화면 캡처하면 둘 다 얻지 못합니다. 크기는 창 크기이고, 플레이어가 크기를 조절하고 색을 처리한 뒤의 그림이니까요.

### 어떤 동영상 형식에서 프레임을 뽑을 수 있나요?

MP4, M4V, MOV는 안에 무엇이 들었든 바로 읽습니다. H.264든 HEVC든 AV1이든 VP9이든, 브라우저가 그 코덱을 풀 수 있으면 됩니다. 그것이 개별 프레임을 직접 짚을 수 있는 정확한 경로입니다. 그 밖에 브라우저가 재생할 수 있는 것들, 대표적으로 WebM은 플레이어를 그 지점으로 옮기고 보이는 화면을 그리는 방식으로 처리합니다. 원본 크기 그림은 여전히 저장되지만, 내가 요청한 프레임이 아니라 플레이어가 고른 프레임에 내려앉습니다. 브라우저가 읽지도 재생하지도 못하는 파일, 실제로는 AVI, WMV, FLV와 대부분의 MKV는 그렇다고 알려 주며 받지 않습니다.

### 한 프레임씩 넘길 수 있나요?

MP4라면 정확히 그렇습니다. 이 도구는 파일 자체의 프레임 목록을 읽으니 화살표 키가 실제로 그 안에 있는 그림들 사이를 움직입니다. 프레임 속도가 들쭉날쭉한 영상에서도 마찬가지인데, 30분의 1초씩 고정으로 움직였다면 조금씩 어긋났을 자리입니다. 재생 경로에는 그런 목록이 없어서 한 번 누르면 대략 한 프레임쯤 움직이고, 페이지도 그렇게 알려 줍니다.

### 세로로 찍은 휴대폰 영상이 여기서는 왜 똑바로 나오나요?

회전을 일부러 적용했기 때문입니다. 휴대폰은 가로로 찍고, 픽셀을 돌리는 대신 '90도 회전'이라는 정보를 파일에 적습니다. 그래서 디코더가 건네주는 프레임은 옆으로 누워 있고, 모든 플레이어가 화면에 띄우는 길에 그것을 세웁니다. 이 단계를 건너뛰는 도구는 맞는 순간의 그럴듯한 그림을 옆으로 누운 채 저장합니다. 이 도구는 트랙에서 회전값을 읽어 무엇을 그리기 전에 먼저 적용합니다.

### 동영상 크기나 길이에 제한이 있나요?

도구에 박아 둔 제한은 없고, 파일을 한 번에 메모리로 올리지도 않습니다. 몇 메가바이트씩 훑고 지나가기 때문에 긴 영상도 짧은 영상만큼 빨리 열립니다. 뽑아 둔 그림들은 내려받을 때까지 페이지에 남아 있으니, 실제 한계는 영상이 아니라 4K PNG 몇백 장쯤입니다.

### 캡처한 그림을 나중에 크기 조절하거나 잘라낼 수 있나요?

여기서는 안 되지만 옆에서 됩니다. 이 도구는 프레임을 있는 그대로 저장합니다. 크기나 모양을 바꾸는 것은 나름의 판단이 필요한 별개의 일이고, [이미지 크기 조절](https://abox.tools/ko/이미지-크기-조절/)이 둘 다 해 줍니다. 역시 아무것도 올리지 않습니다. 그림은 그대로 두고 파일만 작게 만들려면 [이미지 압축](https://abox.tools/ko/이미지-압축/)입니다.

### 무료인가요? 가입해야 하나요?

무료이고 계정도, 로그인도, 체험판도, 워터마크도 없습니다. 이 사이트는 광고로 유지되는데, 그 광고에도 내 동영상에 관한 것은 넘어가지 않습니다.

## 이 약속을 직접 확인하는 방법

- **내 동영상은 나갈 곳이 없습니다.** Content-Security-Policy에는 이 페이지가 연결할 수 있는 주소가 전부 적혀 있고, 그중 이 사이트 것은 하나도 없습니다. 파일이 모일 수 있는 수신처가 여기엔 없고, 있다 한들 그리로 보낼 코드도 없습니다.
- **여기서는 아무것도 가져오지 않습니다.** 이 도구에는 네트워크 기능이 아예 없습니다. 붙여 넣을 주소도 없고, 내려받을 것도 없고, 처음 쓸 때 들어오는 엔진도 없습니다. 내 동영상에 닿는 코드는 한 바이트도 빠짐없이 페이지를 불러올 때 이 출처에서 온 것입니다.
- **디코딩은 내 기기에서 일어납니다.** 프레임은 내 브라우저의 WebCodecs를 지나거나, 어차피 영상을 보여 줬을 그 재생 엔진을 지납니다. 그림은 이 기기의 캔버스에 그려져서 그대로 다운로드로 넘어갑니다.
- **파일은 몇 메가바이트씩 나눠 읽습니다.** 동영상은 여기서 다루는 파일 중 유일하게 메모리에 확실히 들어간다고 장담할 수 없는 종류라서, 통째로 올리는 일이 없습니다. 판독기는 요청한 프레임 주변만 창처럼 잘라서 읽습니다. 2GB짜리 영상이 작은 영상만큼 빨리 열리는 이유이기도 합니다.
- **구글이 불러오는 것과, 구글에게 주지 않는 것.** 광고와 측정 스크립트는 구글에서 옵니다. 둘 중 어느 쪽에도 내 동영상에 관한 것은 넘어가지 않습니다. 파일도, 프레임도, 이름도, 크기도, 길이도, 내가 멈춘 지점도 마찬가지입니다. 읽고 풀고 그리는 코드는 한 줄도 빠짐없이 이 출처에서 제공되고 저장소에 공개되어 있습니다.
- **후원 버튼이 불러오는 것과, 거기에 주지 않는 것.** 머리글의 'Buy me a coffee' 버튼은 cdnjs.buymeacoffee.com의 스크립트가 그리고 글꼴은 Google Fonts에서 가져옵니다. 그것은 링크 이상은 아닙니다. 방문을 알리지도 않고, 나에 대해서도 내 동영상에 대해서도 건네받는 것이 없습니다.
- **오프라인에서도 동작합니다.** 네트워크를 끊어도 이 페이지의 모든 것이 그대로 동작합니다. 가장 간단한 증거입니다.

**직접 확인해 보세요.** 위에 적은 어느 것도 그냥 믿으실 필요는 없습니다. 이 페이지는 저장소 안의 템플릿과 설정을 빌드 스크립트가 찍어 낸 결과이고, 그 스크립트는 누구나 읽고 직접 돌려 볼 수 있습니다. 결과물은 `dist` 브랜치에 그대로 올라가 있고요. 그래서 실제로 제공되는 파일과 소스를 빌드한 결과를 나란히 놓고 비교해 보실 수 있습니다: https://github.com/A-Box-of-Tools/website

먼저 읽어 볼 파일을 꼽자면, Content-Security-Policy는 `config/site.toml`, MP4 안에서 프레임을 찾아내는 판독기는 `src/shared/mp4-reader.js`, 요청한 프레임을 푸는 쪽은 `src/frames.js`입니다. 둘 다 요청을 보낼 수 있는 것은 아무것도 들여오지 않습니다.
