위에서 파일을 고르면 바로 열립니다.준비됨 — 인터넷을 끊어도 이대로 동작합니다.이 브라우저에서는 쓸 수 없습니다 (나머지는 그대로 동작합니다).오프라인 저장에는 https:// 또는 localhost가 필요합니다.여기서는 저장할 수 없지만, 어느 쪽이든 올라가는 것은 없습니다.파일은 어디로도 가지 않았습니다. 파일 {total}개를 불러왔고 모두 이 사이트의 것입니다. {platform}무언가가 {hosts}에 접속했는데, 이 도구는 절대 그러지 않습니다. 살펴볼 만합니다. {platform}광고와 측정과 후원 버튼을 위한 이 사이트 자신의 스크립트가 호스트 {hosts}곳에서 왔습니다. 그중 어느 쪽도 파일이나 그 1바이트도 받지 않았습니다.광고와 측정과 후원 버튼을 위한 이 사이트 자신의 스크립트가 호스트 {hosts}곳에서 왔습니다. 그중 어느 쪽도 파일이나 그 1바이트도 받지 않았습니다.문제가 생겼습니다: {detail}. 처음부터 다시 하려면 페이지를 새로 고치세요.파일 {count}개를 읽는 중…파일 {count}개를 읽는 중…예시로 해 보기예시를 만드는 중…이 브라우저에서는 예시를 만들지 못했습니다. 대신 파일을 골라 주세요.
모든 프레임을 디코딩하고 뒤집고 다시 인코딩하는 일은 내 브라우저가 내 기기의 성능으로 합니다. 이 도구에는 네트워크 기능이 아예 없어서 무언가를 가져올 수도 보낼 수도 없습니다. 설령 있더라도 이 페이지 반대편에는 영상을 받아 줄 서버가 없습니다.
✗ 업로드 없음
✗ 가입 없음
✗ 워터마크 없음
✓ 소리도 뒤집기
✓ 오프라인 동작
실시간 확인:확인 중…
오프라인:확인 중…
그냥 믿지 마시고 직접 확인해 보세요. 개발자 도구의 '네트워크' 탭을 켜 놓고 영상을 거꾸로 돌려 보십시오. 프레임도, 파일 이름도, 고른 파일의 단 1바이트도 실려 나가는 요청이 없습니다. 아니면 인터넷을 끊고 그냥 돌려 보셔도 됩니다. 영상을 어딘가로 보내서 처리하는 도구라면 그대로 멈출 테니까요.
이 약속을 직접 확인하는 방법
동영상은 나갈 곳이 없습니다. 이 페이지가 연결해도 되는 주소는 Content-Security-Policy에 모두 적혀 있는데, 그중 이 사이트 것은 하나도 없습니다. 파일이 모일 만한 수신 지점이 없고, 설령 있더라도 거기로 파일을 보낼 코드가 없습니다.
여기서는 아무것도 가져오지 않습니다. 이 도구에는 네트워크 기능이 아예 없습니다. 붙여 넣을 주소도, 내려받을 것도, 처음 쓸 때 가져오는 엔진도 없어요. 내 영상에 닿는 모든 바이트는 페이지를 불러올 때 이 출처에서 온 것입니다.
디코딩도 인코딩도 내 기기에서 합니다. 프레임은 브라우저 안에서 WebCodecs를 지나가거나, 어차피 그 영상을 보여 줬을 바로 그 재생 엔진을 지나갑니다. 완성된 파일은 이 기기의 메모리에서 만들어져 곧바로 내려받기로 넘어갑니다.
소리도 여기서 뒤집습니다. 음원을 뒤집으려면 디코딩해야 하고, 그 디코딩은 이 기기에서 도는 브라우저 자신의 것입니다. 아무도 그걸 듣지 않고, 아무것도 그걸 보관하지 않으며, 어디로 넘길 방법도 없습니다. 여기에는 1바이트라도 내보내는 코드 경로가 없습니다.
구글이 불러오는 것과, 구글에게 주지 않는 것. 광고와 측정 스크립트는 구글에서 옵니다. 어느 쪽에도 내 영상에 관한 것은 넘어가지 않습니다. 파일도, 프레임도, 이름도, 용량도, 길이도요. 읽고 디코딩하고 뒤집고 인코딩하는 코드는 한 줄도 빠짐없이 이 출처에서 제공되고 저장소에 공개되어 있습니다.
후원 버튼이 불러오는 것과, 후원 버튼이 받지 못하는 것. 헤더의 "Buy me a coffee" 버튼은 cdnjs.buymeacoffee.com의 스크립트가 그리고, 글꼴은 Google Fonts에서 가져옵니다. 그저 링크일 뿐이에요. 방문을 보고하지도, 나에 관한 것이나 내 영상에 관한 것을 받아 가지도 않습니다.
오프라인에서도 동작합니다. 네트워크를 끊어도 이 페이지의 기능이 전부 그대로 돌아갑니다. 가장 간단한 증거입니다.
직접 확인해 보세요. 위에 적은 어느 것도 그냥 믿으실 필요는 없습니다. 이 페이지는 저장소 안의 템플릿과 설정을 빌드 스크립트가 찍어 낸 결과이고, 그 스크립트는 누구나 읽고 직접 돌려 볼 수 있습니다. 결과물은 dist 브랜치에 그대로 올라가 있고요. 그래서 실제로 제공되는 파일과 소스를 빌드한 결과를 나란히 놓고 비교해 보실 수 있습니다:
먼저 읽어 볼 파일을 꼽자면, Content-Security-Policy는 config/site.toml, 어느 프레임이 언제 나올지를 정하는 산술은 src/timeline.js, 파일을 프레임 묶음 단위로 거슬러 올라가는 반복문은 src/reverse.js에 있습니다. 어느 것도 요청을 보낼 수 있는 무언가를 불러오지 않습니다.
회사 보안 소프트웨어가 업로드를 경고한다면. 그것은 브라우저에서 파일이 선택되는 순간을 지켜보며, 페이지가 그것을 보낼 생각인지는 알 수 없습니다 — 그래서 고르는 순간에 경고합니다. 여기서는 아무것도 보내지 않습니다. 브라우저 개발자 도구를 열고 네트워크 탭으로 옮긴 뒤 파일을 골라 보세요. 그것을 실어 나르는 요청은 없고, 이 페이지 자체의 로컬 미리보기 말고는 요청 자체가 없습니다. 같은 확인을 IT 팀도 삼십 초면 할 수 있습니다.
1 동영상 고르기
파일
—
용량
—
화면
—
길이
—
영상
—
소리
—
2 거꾸로 돌리기
화질 같은 화면에 원본이 쓴 것보다 더 쓰지는 않습니다. 거꾸로 된 영상도 같은 프레임을 담고 있으니, 더 써 봐야 파일만 커지니까요.
소리도 뒤집기 샘플 단위로 돌려놓은 다음 AAC로 다시 인코딩합니다. 소리 없는 영상이면 꺼 두세요. 그편이 빠릅니다.
파일을 읽는 중…프레임률을 재는 중…그 파일은 열지 못했습니다.이 브라우저는 이 파일을 재생하지 않아서 미리보기가 없습니다. 뒤집는 일은 재생기를 거치지 않으므로 그래도 됩니다.이 브라우저에는 영상 인코더(WebCodecs)가 없어서 거꾸로 된 영상을 쓰지 못합니다. Chrome, Edge, Safari 16.4 이상은 됩니다. Firefox 133 이상도 됩니다.이 브라우저에는 영상 인코더가 없어서 여기서는 어떤 것도 거꾸로 된 클립을 쓸 수 없습니다. 최근의 Chrome, Edge, Safari라면 됩니다.알 수 없음브라우저 자체 재생기로 읽음{codec} ({entry}){codec} ({entry}), {degrees}도 돌아감{entry}, {n}채널, {rate} Hz{entry}, {n}채널, {rate} Hz없음재생기가 찾는 대로거꾸로 된 클립에는 소리가 전혀 없습니다.디코딩해서 표본 단위로 뒤집고 AAC로 다시 인코딩합니다. 그 두 번째 인코딩은 피할 수 없습니다. 패킷을 반대 순서로 재생하는 것은 뒤집기가 아니기 때문입니다.브라우저가 읽고, 표본 단위로 뒤집고, AAC로 다시 인코딩합니다.{width} x {height}{width} x {height} (원래 {fromWidth} x {fromHeight}. H.264는 한 변이 홀수인 프레임을 담을 방법이 없습니다){groups}개 그룹에 {n}약 {n}, 초당 {fps}끝에서부터 그룹 단위로 디코딩해 MP4로재생기에서 거꾸로 짚어 가며 MP4로준비하는 중…소리를 읽는 중…소리를 뒤집는 중…마무리하는 중…{total}프레임 중 {done}번째를 뒤집는 중 ({percent}%)내부 오류: 오디오 설명이 예상보다 큽니다.이 파일에서 소리가 하나도 돌아오지 않았습니다.소리는 디코딩됐지만 인코더에서 아무것도 돌아오지 않았습니다.이 파일의 소리는 AAC가 아니라서 뒤집으려면 파일 전체를 브라우저에 넘겨 읽게 해야 합니다 — 그런데 이 파일은 그러기에 너무 큽니다. 영상은 소리 없이 뒤집었습니다.이 파일에서 소리를 읽지 못해서 뒤집은 영상에는 소리가 없습니다. 오디오 트랙이 없거나, 이 브라우저가 들어 있는 트랙을 디코딩하지 못하거나입니다.소리를 뒤집으려면 다시 인코딩해야 하는데 이 브라우저는 AAC를 인코딩하지 않습니다. 영상은 소리 없이 뒤집었습니다. Chrome, Edge, Safari는 소리와 함께 해 냅니다.브라우저가 이 클립을 더는 읽지 못하게 되었습니다.브라우저가 이 클립 안에서 자리를 옮기는 데 너무 오래 걸렸습니다.이 파일에서 프레임을 하나도 읽지 못했습니다.이 파일에서 프레임을 하나도 디코딩하지 못했습니다.이 브라우저는 {width}x{height}로 H.264를 인코딩하지 않습니다. 더 작은 클립은 되지만 이것은 안 됩니다.인코더가 디코더 설정을 한 번도 알려 주지 않았습니다.영상 디코더가 도중에 이유도 없이 응답을 멈췄습니다. 더 짧은 클립, 더 낮은 품질, 다른 브라우저를 시도해 볼 만합니다.영상 인코더가 도중에 이유도 없이 응답을 멈췄습니다. 더 짧은 클립, 더 낮은 품질, 다른 브라우저를 시도해 볼 만합니다.영상 디코더나 인코더가 도중에 이유도 없이 응답을 멈췄습니다. 더 짧은 클립, 더 낮은 품질, 다른 브라우저를 시도해 볼 만합니다.뒤집는 중에 문제가 생겼습니다.{n}프레임{n}프레임{a} · {b}{n} KB{n} MB{n} GB{minutes}분 {seconds}초{n}초파일이 프레임 한가운데에서 끝났습니다.H.264 설정 레코드가 너무 짧습니다.HEVC 설정 레코드가 너무 짧습니다.AV1 설정 레코드가 너무 짧습니다.샘플 크기가 이 리더는 풀지 않는 압축 표에 들어 있습니다.샘플 테이블이 온전하지 않습니다.청크 테이블이 비어 있습니다.그 트랙에는 샘플이 하나도 없습니다.비디오 트랙에 샘플 테이블이 없습니다.비디오 트랙에 샘플 설명이 없습니다.비디오의 샘플 설명이 비어 있습니다.비디오 트랙이 암호화되어 있습니다.이 영상은 “{type}” 형식으로 저장되어 있는데, 이 리더가 모르는 형식입니다.“{type}” 트랙은 디코더 설정을 함께 담고 있지 않습니다.MP4도 MOV도 아닙니다.파일에 무비 헤더가 없습니다.이 파일에는 이 리더가 쓸 수 있는 비디오 트랙이 없습니다.비디오 트랙에 타임스케일이 없습니다.이 파일의 프래그먼트에는 비디오 트랙의 프레임이 하나도 없습니다.이 파일은 MP4로 읽히지 않았습니다.이 형식은 이 브라우저가 재생하는 형식이 아닙니다.이 파일의 구성은 여기 리더가 이해하는 구성이 아닙니다.이 브라우저는 {codec}을 직접 디코딩하지 않습니다.이 브라우저에는 WebCodecs가 없어서 프레임을 하나씩 디코딩할 수 없습니다.이 파일은 돌아간 채로 저장되어 있고, 여기 리더와 브라우저의 재생기가 그 회전을 두고 서로 다르게 봅니다.오디오 트랙에 샘플 항목이 없습니다.비디오 트랙에 샘플 항목이 없습니다.내부 오류: 두 번의 패스 사이에서 moov 크기가 달라졌습니다.고른 것에 프레임이 하나도 없습니다.뒤집은 영상이 여기서 쓸 때 다룰 수 있는 4 GB 한계를 넘습니다. 더 짧은 클립을 고르세요.이 브라우저는 이 파일을 열지 못합니다. {reason}{reason} 그래서 이 파일은 브라우저 자신의 재생기를 한 걸음씩 뒤로 돌리는 방식으로 뒤집습니다. 파일을 직접 읽는 것보다 느립니다. {rate}클립은 초당 {fps}프레임으로 뽑습니다. 클립의 1초를 재서 얻은 값입니다.클립은 초당 {fps}프레임으로 뽑습니다. 이 브라우저가 프레임 레이트를 알려 주지 않아서 가정한 값입니다.동영상은 어디로도 가지 않았습니다. 파일 {total}개를 불러왔습니다. {platform}무언가가 {hosts}에 접속했는데, 이 도구는 절대 그러지 않습니다. {platform}광고와 측정과 후원 버튼을 위한 이 사이트 자신의 스크립트가 호스트 {hosts}곳에서 왔습니다. 그중 어느 쪽도 파일을 받지 않았습니다.광고와 측정과 후원 버튼을 위한 이 사이트 자신의 스크립트가 호스트 {hosts}곳에서 왔습니다. 그중 어느 쪽도 파일을 받지 않았습니다.
원하는 결과가 나왔나요?
무엇이 잘못됐나요?
고맙습니다 — 큰 도움이 됩니다.
보내지는 것은 답변뿐이고, 그것도 버튼을 눌렀을 때만입니다. 파일도, 파일 이름도, 파일에 관한 어떤 정보도 보내지 않습니다.
# 동영상 거꾸로 재생 — 영상 거꾸로 돌리기
마지막 프레임부터, 소리까지 함께.
> MP4, MOV, WebM을 거꾸로 재생합니다. 소리도 함께 뒤집습니다. 브라우저에서 돌아갑니다. 업로드 없음, 워터마크 없음, 오프라인 동작.
이 페이지는 브라우저 안에서만 동작하는 대화형 도구입니다(https://abox.tools/ko/동영상-거꾸로-재생/). 도구에 넘긴 어떤 것도 업로드되지 않습니다. 아래는 이 페이지가 도구에 대해 글로 설명하는 내용 전부입니다. 도구를 쓰려면 이 주소를 여세요.
## 동영상은 **절대 업로드되지 않습니다**. 서버가 아예 없으니까요.
모든 프레임을 디코딩하고 뒤집고 다시 인코딩하는 일은 내 브라우저가 내 기기의 성능으로 합니다. 이 도구에는 네트워크 기능이 아예 없어서 무언가를 가져올 수도 보낼 수도 없습니다. 설령 있더라도 이 페이지 반대편에는 영상을 받아 줄 서버가 없습니다.
- ✗ 업로드 없음
- ✗ 가입 없음
- ✗ 워터마크 없음
- ✓ 소리도 뒤집기
- ✓ 오프라인 동작
## 동영상을 거꾸로 돌리는 방법
1. **동영상을 고릅니다.** MP4, MOV, M4V, WebM을 선택 영역에 끌어다 놓거나 직접 골라 주세요. 브라우저가 디스크에서 곧바로 읽습니다. 그동안 어디로도 아무것도 나가지 않습니다.
2. **소리를 어떻게 할지 정합니다.** “소리도 뒤집기”는 트랙을 샘플 단위로 돌려놓습니다. 말소리가 침묵이 아니라 거꾸로 재생된 말소리로 나오게 하는 것이 그것입니다. 소리 없는 영상이라면 꺼 두세요. 그편이 빠릅니다.
3. **화질을 얼마나 쓸지 고릅니다.** 화면은 다시 인코딩해야 합니다. 프레임이 원본 파일의 어떤 것도 대비하지 않은 순서로 나오기 때문입니다. “균형”은 원본이 쓴 만큼에 가깝게 맞추고, “최고 화질”은 더 씁니다.
4. **거꾸로 돌리고 내려받습니다.** 작업이 내 기기에서 일어나므로, 걸리는 시간은 대기열이 아니라 기기 성능에 달려 있습니다. 완성된 영상은 브라우저의 다운로드로 바로 넘어갑니다.
## 자세한 설명
[동영상을 거꾸로 돌리는 방법](https://abox.tools/ko/가이드/동영상-거꾸로-돌리기/): 영상을 거꾸로 재생하기. 뒤집기가 화면과 소리에 무엇을 하는지, 왜 다시 인코딩하지 않고는 할 수 없는지, 왜 구간 자르기보다 느린지, 그리고 그 전에 무엇을 해야 하는지.
## 상자 속 다른 도구
- [타임랩스 만들기](https://abox.tools/ko/타임랩스-만들기/): 한 시간짜리 영상을 20초로.
- [동영상 캡처](https://abox.tools/ko/동영상-캡처/): 어느 지점이든, 원본 화질 그대로 한 장.
- [동영상을 GIF로](https://abox.tools/ko/동영상-gif-변환/): 구간과 크기, 초당 프레임 수를 고르세요.
- [GIF 만들기](https://abox.tools/ko/gif-만들기/): 여러 장의 사진을 움직임 하나로.
## 자주 묻는 질문
### 제 동영상이 어딘가로 업로드되나요?
아닙니다. 읽고 디코딩하고 뒤집고 인코딩하는 일은 내 기기에서 도는 내 브라우저가 합니다. 이 도구에는 서버 쪽이라는 것이 없고, 이 페이지의 `Content-Security-Policy`에 연결해도 되는 주소가 전부 적혀 있는데 그중 이 사이트 것은 하나도 없습니다. 말로 듣기보다 직접 확인하고 싶다면, 인터넷을 끊고 그냥 영상을 거꾸로 돌려 보세요.
### 어떤 영상 형식을 거꾸로 돌릴 수 있나요?
MP4, M4V, MOV는 안에 무엇이 들었든 곧바로 읽습니다. H.264, HEVC, AV1, VP9 가운데 무엇이든 브라우저가 그 코덱을 디코딩할 수 있으면 문제 없습니다. 브라우저가 재생할 수 있는 나머지, 대표적으로 WebM은 브라우저 자신의 플레이어를 거꾸로 한 걸음씩 옮겨 가며 뒤집습니다. 되기는 되지만 더 느립니다. 브라우저가 읽지도 재생하지도 못하는 파일, 실제로는 AVI, WMV, FLV와 대부분의 MKV는 중간에 실패하는 대신 그렇다는 메시지와 함께 거부합니다. 나오는 것은 언제나 MP4입니다.
### 소리도 함께 뒤집히나요?
끄지 않으시면 뒤집힙니다. 트랙 전체를 디코딩하고, 샘플을 반대 순서로 놓고, AAC로 다시 인코딩합니다. 그 두 번째 인코딩을 피할 방법은 없습니다. 오디오 패킷은 앞 패킷을 기준으로 코딩된 수십 밀리초짜리 소리 조각이라, 패킷을 뒤에서부터 그대로 써 내면 짧은 조각들이 앞으로 재생되면서 순서만 뒤바뀐 소리가 됩니다. 뒤집힌 소리가 아니라 고장 난 소리로 들리죠.
### 거꾸로 돌리면 화질이 떨어지나요?
화면이 두 번째로 인코딩되므로 조금 떨어집니다. 구간 자르기에서와 달리 여기서는 피할 수 없습니다. 거꾸로 된 영상은 원본 파일의 어떤 것도 대비하지 않은 순서로 프레임을 보여 주므로, 모든 프레임을 새로 써야 합니다. 다만 원본이 쓴 것보다 더 쓰지는 않습니다. 그 위로 인코딩해 봐야 파일만 커지고 더 좋아 보이지는 않으니까요.
### 영상 용량이나 길이에 제한이 있나요?
도구에 정해 둔 제한은 없고, 파일을 한 번에 메모리로 전부 읽지도 않습니다. 프레임 묶음 단위로 거슬러 올라가며 훑거든요. 현실적인 한계는 내려받기 전에 메모리에서 조립되는 완성 영상, 그리고 통째로 들고 있어야 하는 소리입니다. 뒤집으려면 첫 샘플을 쓰기 전에 마지막 샘플이 있어야 하니까요.
### 왜 어떤 파일에서는 더 느린가요?
들어가는 길이 둘이기 때문입니다. MP4나 MOV는 이 도구가 직접 읽어 프레임 묶음 단위로 디코딩하는데, 기기가 낼 수 있는 최고 속도입니다. 그 밖의 것은 브라우저 자신의 플레이어에 영상의 한 순간씩을 차례로 물어보는 방식으로 뒤집는데, 그 탐색 하나하나가 브라우저에게 앞선 키프레임부터 디코딩하게 만듭니다. 시작하기 전에 둘 중 어느 쪽을 쓰는지와 그 이유를 페이지가 알려 줍니다.
### 영상의 일부만 거꾸로 돌릴 수 있나요?
여기서는 안 됩니다. 이 도구는 전체를 뒤집습니다. 나오는 영상은 들어간 영상과 길이가 똑같고 마지막 프레임이 맨 앞에 옵니다. 원하는 부분을 먼저 [동영상 구간 자르기](https://abox.tools/ko/동영상-자르기/)로 잘라내세요. 프레임 하나 다시 인코딩하지 않고 해냅니다. 그렇게 나온 것을 거꾸로 돌리시면 됩니다.
### 무료인가요? 가입해야 하나요?
무료이고 계정도, 로그인도, 체험판도, 워터마크도 없습니다. 이 사이트는 광고로 유지되는데, 그 광고에도 내 영상에 관한 것은 넘어가지 않습니다.
## 이 약속을 직접 확인하는 방법
- **동영상은 나갈 곳이 없습니다.** 이 페이지가 연결해도 되는 주소는 Content-Security-Policy에 모두 적혀 있는데, 그중 이 사이트 것은 하나도 없습니다. 파일이 모일 만한 수신 지점이 없고, 설령 있더라도 거기로 파일을 보낼 코드가 없습니다.
- **여기서는 아무것도 가져오지 않습니다.** 이 도구에는 네트워크 기능이 아예 없습니다. 붙여 넣을 주소도, 내려받을 것도, 처음 쓸 때 가져오는 엔진도 없어요. 내 영상에 닿는 모든 바이트는 페이지를 불러올 때 이 출처에서 온 것입니다.
- **디코딩도 인코딩도 내 기기에서 합니다.** 프레임은 브라우저 안에서 WebCodecs를 지나가거나, 어차피 그 영상을 보여 줬을 바로 그 재생 엔진을 지나갑니다. 완성된 파일은 이 기기의 메모리에서 만들어져 곧바로 내려받기로 넘어갑니다.
- **소리도 여기서 뒤집습니다.** 음원을 뒤집으려면 디코딩해야 하고, 그 디코딩은 이 기기에서 도는 브라우저 자신의 것입니다. 아무도 그걸 듣지 않고, 아무것도 그걸 보관하지 않으며, 어디로 넘길 방법도 없습니다. 여기에는 1바이트라도 내보내는 코드 경로가 없습니다.
- **구글이 불러오는 것과, 구글에게 주지 않는 것.** 광고와 측정 스크립트는 구글에서 옵니다. 어느 쪽에도 내 영상에 관한 것은 넘어가지 않습니다. 파일도, 프레임도, 이름도, 용량도, 길이도요. 읽고 디코딩하고 뒤집고 인코딩하는 코드는 한 줄도 빠짐없이 이 출처에서 제공되고 저장소에 공개되어 있습니다.
- **후원 버튼이 불러오는 것과, 후원 버튼이 받지 못하는 것.** 헤더의 "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/timeline.js`, 파일을 프레임 묶음 단위로 거슬러 올라가는 반복문은 `src/reverse.js`에 있습니다. 어느 것도 요청을 보낼 수 있는 무언가를 불러오지 않습니다.
동영상을 거꾸로 돌리는 방법
동영상을 고릅니다. MP4, MOV, M4V, WebM을 선택 영역에 끌어다 놓거나 직접 골라 주세요. 브라우저가 디스크에서 곧바로 읽습니다. 그동안 어디로도 아무것도 나가지 않습니다.
소리를 어떻게 할지 정합니다. “소리도 뒤집기”는 트랙을 샘플 단위로 돌려놓습니다. 말소리가 침묵이 아니라 거꾸로 재생된 말소리로 나오게 하는 것이 그것입니다. 소리 없는 영상이라면 꺼 두세요. 그편이 빠릅니다.
화질을 얼마나 쓸지 고릅니다. 화면은 다시 인코딩해야 합니다. 프레임이 원본 파일의 어떤 것도 대비하지 않은 순서로 나오기 때문입니다. “균형”은 원본이 쓴 만큼에 가깝게 맞추고, “최고 화질”은 더 씁니다.
거꾸로 돌리고 내려받습니다. 작업이 내 기기에서 일어나므로, 걸리는 시간은 대기열이 아니라 기기 성능에 달려 있습니다. 완성된 영상은 브라우저의 다운로드로 바로 넘어갑니다.
자세한 설명
동영상을 거꾸로 돌리는 방법영상을 거꾸로 재생하기. 뒤집기가 화면과 소리에 무엇을 하는지, 왜 다시 인코딩하지 않고는 할 수 없는지, 왜 구간 자르기보다 느린지, 그리고 그 전에 무엇을 해야 하는지.
아닙니다. 읽고 디코딩하고 뒤집고 인코딩하는 일은 내 기기에서 도는 내 브라우저가 합니다. 이 도구에는 서버 쪽이라는 것이 없고, 이 페이지의 Content-Security-Policy에 연결해도 되는 주소가 전부 적혀 있는데 그중 이 사이트 것은 하나도 없습니다. 말로 듣기보다 직접 확인하고 싶다면, 인터넷을 끊고 그냥 영상을 거꾸로 돌려 보세요.
어떤 영상 형식을 거꾸로 돌릴 수 있나요?
MP4, M4V, MOV는 안에 무엇이 들었든 곧바로 읽습니다. H.264, HEVC, AV1, VP9 가운데 무엇이든 브라우저가 그 코덱을 디코딩할 수 있으면 문제 없습니다. 브라우저가 재생할 수 있는 나머지, 대표적으로 WebM은 브라우저 자신의 플레이어를 거꾸로 한 걸음씩 옮겨 가며 뒤집습니다. 되기는 되지만 더 느립니다. 브라우저가 읽지도 재생하지도 못하는 파일, 실제로는 AVI, WMV, FLV와 대부분의 MKV는 중간에 실패하는 대신 그렇다는 메시지와 함께 거부합니다. 나오는 것은 언제나 MP4입니다.
소리도 함께 뒤집히나요?
끄지 않으시면 뒤집힙니다. 트랙 전체를 디코딩하고, 샘플을 반대 순서로 놓고, AAC로 다시 인코딩합니다. 그 두 번째 인코딩을 피할 방법은 없습니다. 오디오 패킷은 앞 패킷을 기준으로 코딩된 수십 밀리초짜리 소리 조각이라, 패킷을 뒤에서부터 그대로 써 내면 짧은 조각들이 앞으로 재생되면서 순서만 뒤바뀐 소리가 됩니다. 뒤집힌 소리가 아니라 고장 난 소리로 들리죠.
거꾸로 돌리면 화질이 떨어지나요?
화면이 두 번째로 인코딩되므로 조금 떨어집니다. 구간 자르기에서와 달리 여기서는 피할 수 없습니다. 거꾸로 된 영상은 원본 파일의 어떤 것도 대비하지 않은 순서로 프레임을 보여 주므로, 모든 프레임을 새로 써야 합니다. 다만 원본이 쓴 것보다 더 쓰지는 않습니다. 그 위로 인코딩해 봐야 파일만 커지고 더 좋아 보이지는 않으니까요.
영상 용량이나 길이에 제한이 있나요?
도구에 정해 둔 제한은 없고, 파일을 한 번에 메모리로 전부 읽지도 않습니다. 프레임 묶음 단위로 거슬러 올라가며 훑거든요. 현실적인 한계는 내려받기 전에 메모리에서 조립되는 완성 영상, 그리고 통째로 들고 있어야 하는 소리입니다. 뒤집으려면 첫 샘플을 쓰기 전에 마지막 샘플이 있어야 하니까요.
왜 어떤 파일에서는 더 느린가요?
들어가는 길이 둘이기 때문입니다. MP4나 MOV는 이 도구가 직접 읽어 프레임 묶음 단위로 디코딩하는데, 기기가 낼 수 있는 최고 속도입니다. 그 밖의 것은 브라우저 자신의 플레이어에 영상의 한 순간씩을 차례로 물어보는 방식으로 뒤집는데, 그 탐색 하나하나가 브라우저에게 앞선 키프레임부터 디코딩하게 만듭니다. 시작하기 전에 둘 중 어느 쪽을 쓰는지와 그 이유를 페이지가 알려 줍니다.
영상의 일부만 거꾸로 돌릴 수 있나요?
여기서는 안 됩니다. 이 도구는 전체를 뒤집습니다. 나오는 영상은 들어간 영상과 길이가 똑같고 마지막 프레임이 맨 앞에 옵니다. 원하는 부분을 먼저 동영상 구간 자르기로 잘라내세요. 프레임 하나 다시 인코딩하지 않고 해냅니다. 그렇게 나온 것을 거꾸로 돌리시면 됩니다.
무료인가요? 가입해야 하나요?
무료이고 계정도, 로그인도, 체험판도, 워터마크도 없습니다. 이 사이트는 광고로 유지되는데, 그 광고에도 내 영상에 관한 것은 넘어가지 않습니다.