동영상 용량은 어떻게 정해질까 — 비트레이트 계산법

같은 1분인데 20MB와 200MB가 갈리는 이유. 용량 = 비트레이트 × 길이, 해상도와 비트레이트를 함께 낮춰야 하는 이유, "25MB 이하"를 맞추는 계산.

1분짜리 영상인데 어떤 파일은 20MB, 어떤 파일은 200MB다. 동영상 용량은 길이만으로 정해지지 않는다. 1초에 몇 비트를 쓰느냐(비트레이트)가 정하고, 그걸 알면 "25MB 이하로 줄여 주세요" 같은 요청을 계산기 하나로 풀 수 있다.

용량 = 비트레이트 × 길이

동영상 파일의 크기는 거의 정확히 이 식을 따른다.

용량(바이트) = (영상 비트레이트 + 소리 비트레이트) × 길이(초) ÷ 8

8로 나누는 이유는 비트레이트가 "비트" 단위이고 파일 크기는 "바이트" 단위이기 때문이다. 예를 들어 영상 3Mbps(초당 300만 비트)에 소리 128kbps인 1분 영상은 (3,000,000 + 128,000) × 60 ÷ 8 = 약 2,350만 바이트, 22~23MB다. 같은 1분이라도 비트레이트가 30Mbps면 열 배인 220MB쯤 된다.

폰으로 찍은 영상이 유난히 큰 이유

휴대폰 카메라는 나중에 편집할 여유를 두려고 비트레이트를 넉넉히 쓴다. 4K로 찍으면 초당 수십 메가비트가 흔하다. 이 영상을 카톡이나 메신저로 보거나, 작은 화면으로 재생할 때는 그만한 정보가 필요 없다. 그래서 줄일 여지가 크다.

줄이는 두 가지 손잡이

  • 해상도를 낮춘다. 1080p(1920×1080)에서 720p(1280×720)로 가면 화면의 점 수가 절반 이하로 준다. 점이 적으니 같은 화질을 더 적은 비트로 낼 수 있다. 폰 화면에서는 차이를 느끼기 어렵다.
  • 비트레이트를 낮춘다. 1초에 쓸 수 있는 비트를 줄이면 인코더가 덜 중요한 정보부터 버린다. 너무 낮추면 움직임이 많은 장면에서 네모난 깍두기(블록)가 보인다.

둘은 함께 가야 한다. 1080p 화면에 비트레이트만 크게 낮추면 점 하나하나에 쓸 비트가 모자라 뭉개진다. 비트레이트를 낮출 때는 해상도도 같이 내리는 편이 결과가 깨끗하다.

"25MB 이하"를 맞추는 계산

제한 용량과 길이를 알면 쓸 수 있는 비트레이트가 나온다.

영상 비트레이트 ≈ 목표 용량(바이트) × 8 ÷ 길이(초) − 소리 비트레이트

2분(120초) 영상을 25MB 안에 넣으려면 25 × 1,048,576 × 8 ÷ 120 ≈ 1.75Mbps다. 소리 128kbps를 빼면 영상에 1.6Mbps쯤 쓸 수 있다 — 720p에 알맞은 값이다. 5분짜리라면 같은 25MB에 영상 0.57Mbps뿐이라 480p로 내려야 볼 만하다. 길이가 길수록 같은 용량 안에서 화질이 떨어지는 이유다.

실제 인코더는 장면이 복잡하면 정한 비트레이트를 조금 넘기기도 한다. 그래서 계산값보다 몇 % 여유를 두는 것이 안전하다. 동영상 용량 줄이기의 "목표 용량에 맞추기"는 이 계산을 대신 하고, 결과가 넘치면 넘친 비율만큼 낮춰 한 번 더 인코딩한다.

소리는 줄여도 별 효과가 없다

보통 소리는 128~256kbps로, 1분에 1~2MB 정도다. 영상 쪽이 수십 배 크기 때문에 소리를 줄여서 얻는 용량은 적고 음질만 나빠진다. 용량을 줄일 때는 소리를 그대로 두고 영상만 다시 인코딩하는 편이 낫다.

다시 인코딩하면 원본보다 좋아지지 않는다

용량을 줄이는 인코딩은 정보를 버리는 과정이다. 한 번 줄인 영상을 다시 키워도 버린 정보는 돌아오지 않는다. 원본은 따로 보관하고, 보낼 사본만 줄이자. 길이를 줄이는 것도 좋은 방법이다 — 필요한 부분만 잘라 내면 화질을 건드리지 않고 용량이 준다(자를 때 화질이 바뀌는 경우는 키프레임 가이드에 따로 정리했다).