# 동영상 구간 자르기 — 온라인에서 영상 자르기

재생하면서 남길 구간을 표시하세요. 그 구간들이 영상 하나로 돌아옵니다.

> 영상을 보면서 남길 만한 구간을 그때그때 표시하고, 그 구간들을 파일 하나로 저장합니다. 브라우저에서 돌아갑니다. 업로드 없음, 재인코딩 없음, 오프라인 동작.

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

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

영상을 읽고 표시하고 자르고 쓰는 일은 내 브라우저가 내 기기의 성능으로 합니다. 이 도구에는 네트워크 기능이 아예 없어서 무언가를 가져올 수도 보낼 수도 없습니다. 설령 있더라도 이 페이지 반대편에는 영상을 받아 줄 서버가 없습니다.

- ✗ 업로드 없음
- ✗ 가입 없음
- ✗ 워터마크 없음
- ✓ 구간은 몇 개든
- ✓ 화질 손실 없음
- ✓ 오프라인 동작

## 동영상을 자르는 방법

1. **동영상을 고릅니다.** MP4, MOV, M4V, WebM을 선택 영역에 끌어다 놓으세요. 브라우저가 디스크에서 곧바로 읽습니다. 그동안 어디로도 아무것도 나가지 않습니다. 여러 개를 놓으면 넣은 순서대로 이어 붙입니다.
2. **재생하면서 원하는 구간을 표시합니다.** 구간이 시작되어야 할 곳에서 `I`를, 끝나야 할 곳에서 `O`를 누르세요. 몇 번을 해도 됩니다. 짝이 맞을 때마다 아래 표에 한 줄이, 타임라인에 띠가 하나 생깁니다. `U`는 마지막 것을 되돌리고, `Space`는 재생과 일시정지, 방향키는 5초씩 건너뜁니다. 순간을 잡기 어렵다면 재생 속도를 늦추세요.
3. **표시를 다듬습니다.** 각 줄은 따로 재생해 볼 수 있고, 정확한 시각을 입력해 다시 잡을 수도 있고, 순서를 위아래로 옮기거나 지울 수도 있습니다. 선택한 구간의 양 끝은 타임라인 위에서 끌어 옮길 수도 있습니다. 위쪽의 합계가 완성된 영상의 길이입니다.
4. **남기거나, 도려냅니다.** 남기는 쪽이 보통입니다. 완성된 영상은 표시한 구간을 순서대로 이어 붙인 것이에요. 도려내기는 사람들이 원하면서도 좀처럼 찾지 못하는 반대쪽 일입니다. 광고나 침묵, 더듬은 시작 부분을 표시하면 그것들을 뺀 나머지가 이어 붙습니다.
5. **자르고, 내려받습니다.** "모든 바이트 그대로"는 프레임을 손대지 않고 옮깁니다. 빠르고 화질을 깎을 수 없지만, 각 구간이 표시한 지점 앞의 키프레임에서 시작합니다. "정확히 여기서 자르기"는 화면을 디코딩해 다시 쓰기 때문에 모든 구간이 고르신 프레임에서 시작합니다. 버튼을 누르기 전에, 어느 쪽을 받게 되고 그 대가가 무엇인지 페이지가 말해 줍니다.

## 자세한 설명

[다시 인코딩하지 않고 동영상을 자르는 방법](https://abox.tools/ko/가이드/동영상-구간-자르기/): 영상을 자르는 데 화질을 단 1바이트도 잃을 필요는 없습니다. 자른 지점이 가끔 표시한 곳보다 앞으로 가는 이유, 키프레임이 그것과 무슨 상관인지, 그리고 언제 재인코딩을 받아들일지.

## 상자 속 다른 도구

- [동영상 화면 자르기](https://abox.tools/ko/동영상-화면-자르기/): 필요한 부분만 남기고 화면을 도려냅니다.
- [동영상 거꾸로 재생](https://abox.tools/ko/동영상-거꾸로-재생/): 마지막 프레임부터, 소리까지 함께.
- [타임랩스 만들기](https://abox.tools/ko/타임랩스-만들기/): 한 시간짜리 영상을 20초로.
- [동영상 캡처](https://abox.tools/ko/동영상-캡처/): 어느 지점이든, 원본 화질 그대로 한 장.

## 자주 묻는 질문

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

아닙니다. 읽고 표시하고 자르고 쓰는 일은 내 기기에서 도는 내 브라우저가 합니다. 이 도구에는 서버 쪽이라는 것이 없고, 이 페이지의 `Content-Security-Policy`에 연결해도 되는 주소가 전부 적혀 있는데 그중 이 사이트 것은 하나도 없습니다. 말로 듣기보다 직접 확인하고 싶다면, 인터넷을 끊고 그냥 영상을 잘라 보세요.

### 같은 영상에서 여러 구간을 남길 수 있나요?

그러라고 만든 도구입니다. 재생하는 동안 `I`와 `O`를 원하는 만큼 누르세요. 짝마다 한 줄이 되고, 완성된 영상은 그 줄들을 순서대로 이어 붙인 것이며 나머지는 전부 사라집니다. 대부분의 온라인 커터는 손잡이 한 쌍만 주고 어느 한 구간을 남길지 묻습니다. 클립의 앞뒤를 다듬는 데는 괜찮지만, 한 시간짜리 영상을 한 번 보면서 건질 만한 여섯 순간을 남기는 데는 전혀 쓸모가 없지요.

### 자르면 화질이 떨어지나요?

일반 경로에서는 떨어지지 않고, 중요한 의미에서도 그렇지 않습니다. 자른다고 어느 프레임의 모습도 달라지지 않으므로 프레임을 있던 그대로 새 파일로 옮깁니다. 같은 바이트, 같은 인코더 설정, 무엇 하나 다르지 않습니다. 여기서 무언가를 다시 인코딩하는 경로는 정확히 자르기뿐이고, 그건 버튼에 적혀 있습니다.

### 왜 구간이 표시한 곳보다 앞에서 시작하나요?

영상이 저장되는 방식 때문이고, 형식의 표준적인 부분을 무시하는 플레이어에서만 그렇습니다. 대부분의 프레임은 이웃 프레임과 무엇이 다른지를 적어 둔 형태라 이웃 없이는 디코딩할 수 없습니다. 혼자 설 수 있는 것은 키프레임뿐이고, 키프레임은 보통 1초에서 10초 간격입니다. 그래서 프레임을 복사하는 방식의 자르기는 표시한 지점 앞의 키프레임부터 구간을 실어 와야 합니다. 대신 파일에는 *표시한 지점부터 재생하라*고 적히고, 주요 플레이어는 전부 그걸 지킵니다. 어느 플레이어에서든 정확해야 한다면 다시 인코딩하는 "정확히 여기서 자르기"를 고르세요. 내보내기 전에 지금이 어느 경우이고 차이가 얼마인지 페이지가 알려 줍니다.

### 광고를 도려낼 수도 있나요?

됩니다. 광고를 표시한 다음 "도려내기"를 고르세요. 표시하지 *않은* 부분이 대신 순서대로 이어 붙습니다. 같은 표시 목록이 두 질문에 다 답하므로, 두 번 표시할 필요 없이 오가면서 길이가 어떻게 달라지는지 볼 수 있습니다.

### 표시를 저장해 두었다가 나중에 이어서 할 수 있나요?

됩니다. "표시 저장"은 구간 하나가 한 줄이고 시작과 끝을 쉼표로 나눈 평범한 텍스트 파일을 쓰고, "표시 불러오기"가 그걸 다시 읽습니다. 형식은 두 가지, 초 단위와 `HH:MM:SS.mmm`이고, 둘 다 이런 방식으로 동작하는 다른 도구들이 이미 쓰는 배치를 따릅니다. 그래서 여기서 쓴 파일을 그쪽에 건넬 수 있고, 그쪽에서 쓴 파일을 이 페이지에 놓을 수도 있습니다. 표시는 공들여야 하는 일이고, 아무도 그것을 두 번 해서는 안 되니까요.

### 어떤 영상 형식을 자를 수 있나요?

MP4, M4V, MOV는 안에 무엇이 들었든 곧바로 읽습니다. H.264, HEVC, AV1, VP9 무엇이든요. 프레임을 복사하는 데는 디코딩이 필요 없으므로, 브라우저에 디코더가 아예 없는 코덱에도 이 경로는 통합니다. 브라우저가 재생할 수 있는 나머지, 대표적으로 WebM은 재생하면서 결과를 녹화하는 방식으로 잘립니다. 되기는 되지만 결과 길이만큼 시간이 걸리고, 구간도 하나만 남길 수 있습니다. 브라우저가 읽지도 재생하지도 못하는 파일, 실제로는 AVI, WMV, FLV와 대부분의 MKV는 중간에 실패하는 대신 그렇다는 메시지와 함께 거부합니다.

### 영상 용량이나 길이에 제한이 있나요?

도구에 정해 둔 제한은 없고, 복사 경로에서는 파일을 거의 읽지도 않습니다. 남기는 프레임은 불러오는 것이 아니라 가리키기만 하므로, 4기가바이트짜리 녹화에서 4분을 남기는 비용은 그 4분을 디스크에 쓰는 비용과 비슷합니다. 정확히 자르기는 파일을 몇 메가바이트씩 훑고 지나갑니다. 어느 쪽이든 현실적인 한계는 내려받기 전에 메모리에서 조립되는 완성 파일입니다.

### 소리는 살아남나요?

두 MP4 경로 모두에서 디코딩 없이 샘플 단위로 복사되므로 파일에 들어 있던 것과 바이트가 같고, 편집 표시가 모든 구간을 그 화면과 1000분의 1초 안쪽으로 맞춰 둡니다. 예외가 하나 있습니다. 소리가 서로 다르게 기술된 영상들, 예컨대 샘플 레이트가 다른 영상들을 이어 붙일 때는 디코딩하지 않고 둘을 한 트랙에 넣을 방법이 없습니다. 그런 경우에는 하기 전에 페이지가 말해 줍니다. 녹화 경로에서는 재생되는 소리를 받아 다시 인코딩합니다. 어느 쪽이든 소리를 아예 빼는 체크박스가 있습니다.

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

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

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

- **동영상은 나갈 곳이 없습니다.** 이 페이지가 연결해도 되는 주소는 Content-Security-Policy에 모두 적혀 있는데, 그중 이 사이트 것은 하나도 없습니다. 파일이 모일 만한 수신 지점이 없고, 설령 있더라도 거기로 파일을 보낼 코드가 없습니다.
- **여기서는 아무것도 가져오지 않습니다.** 이 도구에는 네트워크 기능이 아예 없습니다. 붙여 넣을 주소도, 내려받을 것도, 처음 쓸 때 가져오는 엔진도 없어요. 내 영상에 닿는 모든 바이트는 페이지를 불러올 때 이 출처에서 온 것입니다.
- **일반 경로에서는 디코딩조차 하지 않습니다.** 자른다고 해서 어느 프레임의 모습도 달라지지 않으므로, 표시한 구간의 인코딩된 프레임을 찾아낸 그 모습 그대로 새 파일로 옮깁니다. 각 프레임은 바이트 자체가 아니라 디스크의 어느 바이트인지를 적은 메모로 보관되고, 브라우저는 내려받기를 쓰는 순간에야 그것을 처음으로 읽습니다. 여기서 영상이 다시 그림으로 돌아가는 일은 없습니다.
- **표시 파일은 이 페이지에서 만들어집니다.** 표시를 저장하면 이미 화면에 있는 숫자로 텍스트 파일을 만들어 곧장 다운로드로 보냅니다. 불러올 때도 여기서 읽습니다. 어느 쪽도 네트워크 근처에 가지 않고, 어느 쪽도 시각 말고는 아무것도 싣지 않습니다.
- **소리는 복사만 할 뿐 듣지 않습니다.** 두 MP4 경로 모두에서 오디오 샘플이 디코딩조차 되지 않은 채로 옮겨집니다. 여기서는 그것을 소리로 되돌리는 일이 없고, 되돌린다 해도 어디로 넘길 방법이 없습니다.
- **프레임을 디코딩하는 자리도 여기입니다.** 정확히 자르는 경로와, 이 브라우저가 재생하지 못하는 파일의 미리보기는 내 기기에서 WebCodecs를 지나갑니다. 어차피 그 영상을 보여 줬을 바로 그 디코더가, 바로 그 자리에서 도는 것입니다.
- **구글이 불러오는 것과, 구글에게 주지 않는 것.** 광고와 측정 스크립트는 구글에서 옵니다. 어느 쪽에도 내 영상에 관한 것은 넘어가지 않습니다. 파일도, 프레임도, 이름도, 용량도, 길이도, 어디를 잘랐는지도요. 읽고 자르고 쓰는 코드는 한 줄도 빠짐없이 이 출처에서 제공되고 저장소에 공개되어 있습니다.
- **후원 버튼이 불러오는 것과, 후원 버튼이 받지 못하는 것.** 헤더의 "Buy me a coffee" 버튼은 cdnjs.buymeacoffee.com의 스크립트가 그리고, 글꼴은 Google Fonts에서 가져옵니다. 그저 링크일 뿐이에요. 방문을 보고하지도, 나에 관한 것이나 내 영상에 관한 것을 받아 가지도 않습니다.
- **오프라인에서도 동작합니다.** 네트워크를 끊어도 이 페이지의 기능이 전부 그대로 돌아갑니다. 가장 간단한 증거입니다.

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

먼저 읽어 볼 파일을 꼽자면, Content-Security-Policy는 `config/site.toml`, 표시와 그것이 저장되는 파일은 `src/segments.js`, MP4 안에서 프레임을 찾아내는 리더는 `src/shared/mp4-reader.js`, 표시 하나를 샘플의 구간으로 바꾸는 산술은 `src/ranges.js`, 그 샘플을 새 파일로 옮기는 반복문은 `src/copy.js`에 있습니다. 어느 것도 요청을 보낼 수 있는 무언가를 불러오지 않습니다.
