동영상으로 GIF 만들기 (FFmpeg 사용)
1. FFmpeg 설치
1) 설치 확인
ffmpeg -version
2) brew로 설치
brew install ffmpeg
만약 homebrew도 설치되지 않았다면,
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
2. 동영상을 GIF로 변환하기
mac에서는 'Command + Shift + 5' 단축키로 영상을 촬영할 수 있습니다. FFmpeg를 사용하면 macOS에서 녹화한 MOV 파일이나 MP4 동영상을 GIF 애니메이션으로 변환할 수 있습니다.
동영상 전체를 변환하거나 특정 구간만 잘라서 GIF로 만들 수 있으며, 프레임 수와 해상도를 조절하여 파일 크기를 줄일 수도 있습니다.
GitHub README, Pull Request, 기술 문서에 사용할 GIF라면 fps=10~15, 가로 800~960px, 재생 시간 3~10초를 시작 설정으로 권장합니다.

기본 변환 명령어
ffmpeg -i input.mov -vf "fps=15,scale=960:-1:flags=lanczos" -loop 0 output.gif
옵션 설명
- ffmpeg: 동영상 및 이미지 변환 도구
- -i input.mov: 변환할 원본 동영상 지정
- -vf: Video Filter, 영상 필터 적용
- fps=15: 초당 15프레임으로 변환
- scale=960:-1: 가로 960px, 세로는 비율에 맞게 자동 계산
- flags=lanczos: 고품질 이미지 크기 조정 알고리즘
- -loop 0: GIF 무한 반복
- output.gif: 생성할 GIF 파일 이름
1) -ss — 동영상 시작 위치 지정
Seeking: 영상에서 원하는 시간 위치로 이동하는 기능입니다. 동영상의 처음부터 변환하지 않고, 특정 시점부터 GIF를 만들 때 사용합니다.
ffmpeg -ss 00:00:05 -i input.mov \
-vf "fps=15,scale=960:-1:flags=lanczos" \
-loop 0 output.gif
영상의 5초 지점부터 변환합니다.
| -ss 00:00:00 | 0초 지점부터 변환 |
| -ss 00:00:05 | 5초 지점부터 변환 |
| -ss 00:00:10 | 10초 지점부터 변환 |
| -ss 00:01:00 | 1분 지점부터 변환 |
| -ss 00:01:30 | 1분 30초 지점부터 변환 |
2) -t — 변환할 동영상 길이 지정
Time: 변환할 영상의 재생 시간을 설정합니다.
ffmpeg -i input.mov -t 5 \
-vf "fps=15,scale=960:-1:flags=lanczos" \
-loop 0 output.gif
동영상의 처음부터 5초 분량만 GIF로 변환합니다.
| -t 1 | 1초 분량만 변환 |
| -t 3 | 3초 분량만 변환 |
| -t 5 | 5초 분량만 변환 |
| -t 10 | 10초 분량만 변환 |
| -t 00:01:00 | 1분 분량만 변환 |
3) -ss + -t — 특정 구간만 GIF로 변환
두 옵션을 함께 사용하면 원하는 구간만 추출할 수 있습니다.
ffmpeg -ss 00:00:05 -i input.mov -t 3 \
-vf "fps=15,scale=960:-1:flags=lanczos" \
-loop 0 output.gif
5초 지점에서 시작하여 3초 동안의 영상만 GIF로 만듭니다.
4) fps — 동영상 프레임 수 조절
FPS(Frames Per Second): 초당 표시하는 이미지 수
ffmpeg -i input.mov \
-vf "fps=10,scale=800:-1:flags=lanczos" \
-loop 0 output.gif
초당 10프레임, 가로 800px(-1: 세로는 자동)로 변환하여 GIF 용량을 줄입니다.
FPS가 높을수록 움직임이 부드러워지는 경향이 있지만, 이미지 수가 증가하여 파일 크기도 커질 수 있습니다. 원본 영상에 없는 프레임을 자동으로 보간하는 것은 아닙니다.
| fps=5 | 5장 | 움직임이 끊겨 보일 수 있음 |
| fps=10 | 10장 | 용량 절약 |
| fps=15 | 15장 | 일반적인 GIF에 적합 |
| fps=20 | 20장 | 비교적 부드러운 움직임 |
| fps=24 | 24장 | 부드럽지만 용량 증가 |
| fps=30 | 30장 | 높은 프레임 수, 용량 증가 |
참고로 이미지 여러 장을 GIF로 만들 때 사용했던 -framerate와는 차이가 있습니다.
- -framerate: 연속 이미지가 입력되는 속도 설정
- fps: 동영상에 적용하는 프레임 수 변환 필터
5) scale — GIF 해상도 조절
Scale: 이미지 크기를 확대하거나 축소하는 기능입니다.
scale=960:-1
| scale=640:-1 | 가로 640px |
| scale=800:-1 | 가로 800px |
| scale=960:-1 | 가로 960px |
| scale=1280:-1 | 가로 1280px |
| scale=-1:720 | 세로 720px |
-1은 원본의 비율을 유지하도록 크기를 자동 계산한다는 의미입니다.
GIF 인코딩 호환성을 고려하면 다음처럼 계산된 크기를 짝수로 맞출 수도 있습니다.
scale=960:-2
-2는 원본 비율을 유지하면서 자동 계산된 크기를 2의 배수로 맞춥니다.
6) -loop — GIF 반복 설정
Loop: 애니메이션 반복 횟수를 지정합니다.
| -loop 0 | 무한 반복 |
| -loop 1 | 1회 재생 |
| -loop 3 | 총 3회 재생 |
7) -y — 기존 파일 덮어쓰기
ffmpeg -y -i input.mov \
-vf "fps=15,scale=960:-1:flags=lanczos" \
-loop 0 output.gif
이미 같은 이름의 GIF 파일이 있을 때 덮어쓰기 동작을 설정합니다. 이 경우 기존 output.gif가 있다면 자동으로 덮어씁니다.
| -y | 기존 파일을 확인 없이 덮어쓰기 |
| -n | 기존 파일이 있으면 덮어쓰지 않음 |
| 생략 | 덮어쓰기 여부 확인 |
3. GIF 화질 개선하기
GIF는 최대 256색을 사용하는 형식이므로 원본 동영상에 비해 색상이 손실되거나 화면에 색상 띠가 생길 수 있습니다.
이러한 문제를 줄이기 위해 색상 팔레트를 생성하여 적용할 수 있습니다.
1) 색상 팔레트 생성
ffmpeg -i input.mov \
-vf "fps=15,scale=960:-1:flags=lanczos,palettegen" \
palette.png
palettegen은 원본 영상의 색상을 분석하여 GIF에 사용할 색상 팔레트를 생성하는 필터입니다.
2) 팔레트를 적용하여 GIF 생성
ffmpeg -i input.mov -i palette.png \
-lavfi "fps=15,scale=960:-1:flags=lanczos[x];[x][1:v]paletteuse" \
-loop 0 output.gif
- -lavfi: 복합 필터 그래프 적용
- paletteuse: 생성한 색상 팔레트를 이용하여 GIF 변환
- [x]: 필터 결과를 다음 필터로 전달하기 위한 이름
- [1:v]: 두 번째 입력 파일의 영상 스트림(팔레트 이미지) 참조
색상 표현이 중요한 GIF를 만들 때 유용합니다.