동영상 압축기
브라우저에서 바로 동영상 압축 (무손실·소리 제거 지원)
처리 중…
0.0
멈춘 것이 아닙니다. 계산이 끝나면 결과가 표시됩니다.
동영상 압축기 소개
이 압축기는 FFmpeg를 WebAssembly로 옮긴 ffmpeg.wasm(0.12.10, 단일 스레드 코어)을 처음 실행할 때 CDN에서 내려받아 브라우저 안에서 돌립니다. 영상 파일은 어디에도 업로드되지 않지만, 대신 인코딩 속도는 컴퓨터의 CPU 한 코어에 달려 있습니다. 데스크톱용 FFmpeg보다 몇 배 느린 것이 정상이고, 1분짜리 1080p 영상도 몇 분 걸릴 수 있습니다.
모드는 세 가지입니다. 「화질 압축」은 H.264(libx264)로 다시 인코딩해 MP4로 저장하고, 「원본 그대로(재인코딩 없음)」는 재인코딩 없이 스트림을 그대로 옮겨 담으며, 「소리 제거」는 영상은 그대로 두고 오디오 트랙만 뺍니다. 실제로 용량이 크게 줄어드는 것은 첫 번째뿐입니다.
CRF: 목표 용량이 아니라 목표 화질
화질 압축 모드는 비트레이트를 지정하지 않고 CRF(Constant Rate Factor) 값으로 인코딩합니다. CRF는 0~51 범위의 화질 목표치로, 숫자가 작을수록 화질이 좋고 파일이 큽니다. 인코더는 움직임이 많은 장면에는 비트를 많이, 정지 장면에는 적게 써서 전체적으로 비슷한 체감 화질을 유지합니다. 그래서 같은 CRF라도 축구 경기 영상은 크고 슬라이드 녹화는 작게 나옵니다.
FFmpeg 위키의 경험칙은 CRF를 6 올리면 용량이 대략 절반, 6 내리면 약 두 배가 된다는 것입니다. 이 도구의 세 단계는 23(고화질), 28(기본), 33(고압축)으로 5씩 차이가 납니다. x264의 기본값이 23이므로 23은 원본과 구분이 어려운 수준, 33은 휴대폰 화면에서 볼 만한 수준으로 생각하면 됩니다.
CRF 방식의 단점은 결과 용량을 미리 정할 수 없다는 것입니다. 「10MB 이하」처럼 상한이 있는 곳에 올려야 한다면, 한 번 압축해 보고 넘치면 CRF를 올리거나 해상도를 낮춰 다시 돌리는 방법밖에 없습니다.
왜 H.264 MP4로만 저장하나
VP9나 AV1은 같은 화질에서 H.264보다 파일이 작지만, 인코딩이 훨씬 느립니다. 단일 스레드 WebAssembly에서 AV1을 인코딩하면 짧은 영상도 비현실적으로 오래 걸립니다. 재생 쪽 호환성도 차이가 납니다. H.264 MP4는 거의 모든 휴대폰, TV, 메신저, 오래된 윈도우 PC에서 하드웨어 디코딩으로 재생되지만, AV1은 비교적 최근 기기에서만 하드웨어로 풀립니다.
이 도구가 x264에 preset veryfast를 쓰는 것도 같은 이유입니다. preset은 압축 효율과 속도를 맞바꾸는 설정으로, 기본값 medium보다 빠른 대신 같은 CRF에서 파일이 조금 커집니다. 오디오는 AAC 128kbps로 다시 인코딩합니다.
해상도 낮추기가 CRF보다 먼저다
1080p(1920×1080)를 720p(1280×720)로 낮추면 픽셀 수가 44%로 줄어듭니다. 휴대폰 화면이나 메신저 미리보기에서는 차이가 잘 안 보이는데 용량은 크게 줄어, CRF를 33까지 올려 뭉개지게 만드는 것보다 대개 결과가 낫습니다.
해상도를 지정하면 세로 길이를 맞추고 가로는 비율에 따라 자동 계산합니다. H.264가 홀수 크기를 인코딩하지 못하므로 가로·세로 모두 짝수로 맞춥니다. 원본보다 작은 값만 의미가 있고, 세로 영상(1080×1920)에 720p를 고르면 세로가 720이 되어 생각보다 훨씬 작아진다는 점에 주의하세요.
「원본 그대로」와 「소리 제거」가 하는 일
「원본 그대로」 모드는 영상과 소리를 디코딩하지 않고 그대로 복사해 새 컨테이너에 담습니다(스트림 복사). 화질 손실은 전혀 없고 몇 초 만에 끝나지만, 압축을 다시 하지 않으므로 용량은 거의 그대로입니다. 쓸모는 컨테이너 정리에 있습니다. MP4·WebM·MKV·AVI는 같은 형식으로, MOV 등 그 밖의 입력은 MKV로 저장합니다. MP4로 저장할 때는 색인(moov)을 파일 앞으로 옮겨(faststart) 웹에 올렸을 때 다 받기 전에 재생이 시작됩니다.
소리 제거 모드도 영상 스트림을 복사하고 오디오만 뺍니다. 줄어드는 용량은 딱 오디오 트랙만큼입니다. 128kbps 오디오라면 1분에 약 0.96MB이므로, 화면 녹화처럼 소리가 필요 없는 영상에서 가볍게 쓰기 좋습니다.
예시
메신저 상한에 맞출 비트레이트 계산
- 입력
60초 영상을 8MiB 안에 넣고 싶다, 오디오 AAC 128kbps- 결과
영상에 쓸 수 있는 평균 비트레이트 약 0.99Mbps
8MiB = 67,108,864비트 ÷ 60초 ≈ 1,118,000bps에서 오디오 128,000bps를 빼면 약 990kbps입니다. 1080p에는 부족하고 720p나 480p에서 현실적인 값이므로, 해상도를 먼저 낮추고 CRF 28로 시도하는 것이 순서입니다.
해상도만 바꿨을 때
- 입력
1920×1080 → 720p 선택- 결과
1280×720, 픽셀 수 44.4%
1280×720 ÷ (1920×1080) = 921,600 ÷ 2,073,600 = 0.444. CRF가 같아도 인코딩할 정보가 절반 이하로 줄어듭니다.
화면 녹화에서 소리만 빼기
- 입력
10분 화면 녹화, 오디오 128kbps, 「소리 제거」- 결과
약 9.6MB 감소, 영상은 원본 그대로
128,000bps × 600초 ÷ 8 = 9,600,000바이트. 영상 트랙은 재인코딩하지 않아 화질과 처리 시간 모두 손해가 없습니다.
사용 방법
- 동영상 파일을 선택합니다(300MB를 넘으면 메모리 부족 경고가 뜹니다).
- 모드를 고르고, 화질 압축이라면 화질 단계와 해상도를 정합니다.
- 처음 실행 시 엔진(약 30MB)을 내려받은 뒤 인코딩이 시작됩니다.
- 결과를 미리 보고 용량을 확인한 뒤 내려받습니다.
자주 묻는 질문
압축이 너무 오래 걸려요.
ffmpeg.wasm은 CPU 한 코어만 쓰는 단일 스레드 빌드라 데스크톱 FFmpeg보다 많이 느립니다. 해상도를 720p나 480p로 낮추면 인코딩할 픽셀이 줄어 시간도 크게 단축됩니다.
「원본 그대로」 모드로 했는데 용량이 그대로예요.
정상입니다. 이 모드는 스트림을 그대로 복사하므로 압축이 일어나지 않습니다. 용량을 줄이려면 화질 압축 모드를 쓰세요.
결과를 정확히 10MB로 맞출 수 있나요?
CRF 방식이라 목표 용량을 지정할 수 없습니다. 한 번 돌려 보고 넘치면 CRF를 높이거나 해상도를 낮춰 다시 압축하세요.
AV1이나 VP9로 저장할 수는 없나요?
지원하지 않습니다. 브라우저 안 단일 스레드 인코딩에서는 너무 느리고, H.264가 재생 호환성이 가장 넓기 때문입니다.
아이폰 HDR 영상을 압축했더니 색이 달라 보여요.
HDR 정보를 SDR 기기용으로 변환하는 톤 매핑을 하지 않기 때문에 색이 물 빠지거나 어둡게 보일 수 있습니다. HDR 영상은 아이폰에서 내보낼 때 「가장 호환성 높은」 형식을 고르는 편이 안전합니다.
출처
- FFmpeg Wiki — H.264 Video Encoding Guide (CRF, presets)
- ffmpeg.wasm — official documentation
- MDN — Web video codec guide
- Can I use — AV1 video format
기준일: