abox.tools

언어: 한국어

동영상을 GIF로 만드는 방법

GIF는 움직임이 아니라 그림 전체를 저장하는 1987년의 형식이라, 영상으로 만든 GIF는 언제나 큽니다. 너무 클 때 세 가지 설정 중 무엇을 움직여야 하는지, 그리고 각각이 얼마를 벌어 주는지 정리했습니다.

동영상을 GIF로 열기 구간과 크기, 초당 프레임 수를 고르세요.

Markdown으로 보기

짧은 답

동영상을 GIF로를 열고 영상을 넣은 다음, 원하는 초를 표시하고 너비는 480, 레이트는 초당 12프레임 그대로 두세요. 대부분의 GIF가 원하는 설정입니다. 파일이 너무 크게 나오면 다른 무엇보다 먼저 너비를 내리세요. 두 배로 값을 치러 주는 설정이니까요.

이 페이지의 나머지에서는 그 이유를 다룹니다. “내 GIF가 14 MB”야말로 실제로 모두가 겪는 문제인데, 어느 손잡이를 돌려야 하는지가 분명하지 않기 때문입니다.

영상으로 만든 GIF가 그렇게 어마어마한 이유

영상 코덱은 움직임을 저장합니다. 몇 초에 한 번 완전한 그림을 하나 쓰고, 그 사이의 모든 프레임에 대해서는 그 그림이 어떻게 움직였는지를 적습니다. 이 픽셀 덩어리가 왼쪽으로 넷 미끄러졌다, 이 영역이 조금 어두워 졌다. 5초짜리 클립이 수백 킬로바이트에 그칠 수 있는 것은, 그 대부분이 이미 손에 쥔 그림을 어떻게 움직일지 적은 지시이기 때문입니다.

GIF에는 그런 것이 하나도 없습니다. 1989년에 완성되었고, 그 무엇도 존재하기 전입니다. 모든 프레임이 그림이고, 스프레드시트 스크린샷을 염두에 두고 만든 방식으로 각자 압축됩니다. 이 형식 어디에도 움직임 추정이 없고, 덧붙일 방법도 없습니다.

그러니 예상하실 숫자는 원본 영상의 열 배이고, 어떤 변환기도 그 사실을 말로 물리칠 수 없습니다. 좋은 변환기가 할 수 있는 일은 그 위에 낭비를 얹지 않는 것, 그리고 실제로 크기를 정하는 세 가지 설정을 주는 것입니다.

구간 카드. 타임코드가 있는 영상 프레임과, 20초짜리 영상 안에서 4초가 표시되었음을 보여 주는 막대.
구간이 먼저입니다. 아래의 모든 설정이 남긴 초 수만큼 곱해지기 때문입니다.

세 가지 설정과 각각의 대가

GIF 크기에 관한 모든 것은 그것이 담고 있는 픽셀 수로 귀결되는데, 그건 길이 곱하기 레이트 곱하기 한 프레임의 면적입니다.

계산해 보겠습니다. 휴대폰 클립 6초를 원래의 ⁦1080×1920⁩, 30 fps 그대로 두면 200만 픽셀짜리 프레임 180장, 약 3억 5천만 픽셀입니다. 그건 GIF가 아니라 인질극입니다. 같은 6초를 너비 480, 12 fps로 하면 40만 픽셀짜리 프레임 72장, 그러니까 3천만 픽셀로 12분의 1쯤이 되고, 사람들이 GIF라고 할 때 떠올리는 그것처럼 보입니다.

내보내기 카드. 너비 480, 프레임률, 디더링 선택, 그리고 프레임 수와 용량을 어림한 요약.
설정 셋과 그에 맞춰 움직이는 어림값입니다. 어느 것부터 쓸지가 이 절의 주제입니다.

어느 프레임 레이트를 고를지

여기 기본값은 12이고, 놀랄 만큼 자주 맞는 답입니다. 손으로 그리는 애니메이션이 백 년 동안 써 온 레이트입니다. 눈이 이어지는 움직임으로 읽을 만큼 빠르고, 아무도 볼 수 없는 프레임에 값을 치르지 않을 만큼 느립니다.

알아 두셔도 좋을 딱딱한 천장이 하나 있습니다. GIF는 각 프레임이 화면에 얼마나 머무는지를 100분의 1초 단위로 저장하는데, 모든 브라우저가 100분의 2초 미만의 지연을 100분의 10으로 취급합니다. 그래서 초당 50프레임이 진짜 최대치이고, 100을 요구하는 파일은 조용히 10으로 재생됩니다. 60 fps를 제시하는 변환기는 그걸 무시하고 있거나, 곧 놀랄 일을 안겨 줄 참입니다.

256색, 그리고 디더링이 하는 일

이 형식이 오래되었다는 사실의 나머지 절반입니다. GIF는 최대 256색짜리 표 하나를 싣고, 모든 픽셀은 그 표를 가리키는 번호입니다. 영상 프레임에는 최대 1600만 색이 있습니다. 그 거의 전부가 버려지고, 어떻게 버려지느냐가 GIF의 생김새 대부분을 결정합니다.

좋은 변환기는 고정된 묶음을 쓰는 대신 그 영상에 든 색을 세어 어울리는 256색을 고릅니다. 숲을 찍은 장면에는 256가지 초록이, 노을을 찍은 장면에는 256가지 주황이 갑니다. 여기 도구가 하는 일이 그것이고, 첫 프레임만이 아니라 구간의 모든 프레임에 걸쳐 셉니다. 그래서 끝에만 나오는 색도 자리를 얻습니다.

디더링은 필요한 색이 그래도 없는 자리에서 일어나는 일입니다. 영역 전체를 가장 가까운 색으로 반올림하면 매끈한 하늘이 눈에 보이는 계단을 사이에 둔 평평한 네 개의 띠가 됩니다. 그 대신 가장 가까운 두 색을 고운 무늬로 번갈아 놓으면, 보통의 시청 거리에서 눈이 그 둘을 없는 색 하나로 섞어 봅니다.

변환기를 비교해 보실 거라면 알아 둘 만한 세부가 하나 있습니다. 디더링의 뻔한 방식은 대부분의 이미지 편집기가 쓰는 오차 확산인데, 이건 각 픽셀의 결과가 둘레 픽셀에 달려 있게 만듭니다. 애니메이션에서는 움직이지 않는 배경도 프레임마다 다르게 디더링된다는 뜻이라 눈에 띄게 기어 다니고, 기술적으로 모든 픽셀이 바뀌었으므로 모든 프레임을 통째로 저장해야 합니다. 대안인 정렬 디더링은 픽셀이 어디 있는지에만 달려 있어서, 가만히 있는 배경은 완전히 가만히 있습니다. 이 도구가 쓰는 방식이고, 그 파일이 더 차분할 뿐 아니라 더 작기도 한 이유입니다.

애초에 GIF를 만들지 말아야 할 때

물어볼 만합니다. 정직한 답이 흔히 “만들지 마세요”니까요. 소리 없이 반복되는 MP4나 WebM은 같은 움직임을 GIF로 만든 것의 10분의 1쯤 크기이고, 똑같이 재생되며, 어차피 GIF를 올리면 모든 소셜 플랫폼이 그걸로 바꿔 놓는 바로 그 형식입니다.

도착지가 정말로 GIF를 필요로 할 때만 GIF로 두세요.

소리가 중요하다면 질문은 스스로 답합니다. GIF에는 오디오가 있었던 적도 없고 앞으로도 없을 겁니다. 대신 영상을 자르세요. 동영상 구간 자르기가 프레임 하나 다시 인코딩하지 않고 원하는 구간을 꺼내 줍니다.

용량 제한 아래로 내려가기

사람들이 GIF를 손보는 이유는 대개 받는 쪽의 제한 때문입니다. 대략 매서운 순서대로.

초과했을 때 시도할 순서는 이렇습니다. 구간을 줄이고, 너비를 절반으로 하고, 레이트를 낮추고, 디더링을 끄기. 앞의 둘이 뒤의 둘을 합친 것보다 값어치가 큽니다.

이 중 무엇에도 업로드는 필요 없습니다

영상을 GIF로 바꾸는 일은 디코딩하고, 크기를 줄이고, 색을 세고, 압축하는 네 가지입니다. 브라우저가 오래전부터 혼자 할 수 있던 것들이고요. 맨 위에 링크한 도구는 그 전부를 내 기기에서 합니다. 파일을 디스크에서 읽고, 프레임을 브라우저가 디코딩하고, GIF를 메모리에서 조립해 다운로드로 넘깁니다.

여기서는 평소보다 더 신경 쓸 만합니다. 사람들이 GIF로 만드는 영상은 개인적인 것들이니까요. 가족 영상의 한 순간, 회사에서 뭔가를 찍은 화면 녹화, 통화 몇 초. 그것을 올리라고 하는 변환기는 그 사본을 달라고 하는 것이고, 이제 그래야 할 기술적 이유는 남아 있지 않습니다.