[FFmpeg] Windows 환경에서 FFmpeg 7.1 정적 빌드하기 – MinGW64 + H.264 인코딩 지원
"본 글은 과거 티스토리에서 발행했던 콘텐츠를 기반으로, 최신 정보를 반영해 새롭게 정리한 업데이트 버전입니다."
📚 목차
1. 빌드 목표 및 환경 개요
2. MSYS2 설치 및 초기 설정
3. MinGW64 개발 환경 설정
4. FFmpeg 빌드를 위한 패키지 설치
5. FFmpeg 소스 다운로드 및 설정
6. FFmpeg 정적 빌드 실행
7. 빌드 결과 확인 및 테스트
✔ 마무리

1. 빌드 목표 및 환경 개요
이 문서에서는 Windows 10 환경에서 H.264 인코딩을 지원하는 정적 FFmpeg 실행 파일(ffmpeg.exe)을 MinGW64를 활용해 직접 빌드하는 과정을 다룹니다.
정적 빌드는 외부 DLL 없이 실행 파일 하나만으로 동작하므로, 배포나 이식성 측면에서 유리한 방식입니다.
이번 실습에서는 다음과 같은 목표를 달성하는 것을 중심으로 진행합니다:
▸ 최신 FFmpeg 7.1 소스를 기반으로 정적 빌드 수행
▸ libx264를 포함해 H.264 인코딩 기능 활성화
▸ make install을 통해 최종 실행 파일 생성
▸ 이후 H.265, CUDA, RTSP 인증, SHA256 지원 등 기능 확장을 위한 기반 마련
🔷 주요 빌드 환경
| 항목 | 내용 |
| 운영체제 | Windows 10 64bit |
| 개발 도구 | MSYS2, MinGW64 |
| FFmpeg 버전 | 7.1 |
| 빌드 방식 | 정적(static) 빌드 |
| 필수 코덱 | libx264 (H.264) |
2. MSYS2 설치 및 초기 설정
🔷 설치 방법
FFmpeg를 Windows 환경에서 컴파일하려면, 리눅스 스타일의 패키지 관리 기능과 빌드 도구를 제공하는 MSYS2 환경을 먼저 구성해야 합니다.
MSYS2는 pacman 기반 패키지 시스템과 POSIX 호환 셸을 포함하고 있어, MinGW64와 함께 윈도우에서도 안정적인 개발 환경을 구축할 수 있습니다.
1. MSYS2 공식 사이트에 접속해 최신 설치 파일을 다운로드합니다.
2. 설치 경로는 기본값인 C:\msys64로 설치하는 것을 권장합니다.
3. 설치 후 msys2.exe를 실행하여 초기 설정을 시작합니다.
❗참고:
MSYS2를 처음 실행하면 구버전의 패키지 정보를 사용하므로, 반드시 업데이트 절차를 먼저 진행해야 합니다.
🔷 환경 업데이트
설치 직후에는 MSYS2 시스템 및 패키지 정보를 최신 상태로 맞춰야 합니다. 다음 명령어를 순서대로 실행합니다:
pacman -Syu # 1차 업데이트 (터미널 자동 종료)
▸ 위 명령어를 실행하면 MSYS2 터미널이 자동 종료됩니다.
▸ 다시 msys2.exe를 실행한 후 아래 명령어를 입력해 마무리합니다
pacman -Su # 2차 업데이트
업데이트가 완료되면, 기본 개발 도구를 설치합니다
pacman -S git base-devel
▸ git: FFmpeg 소스 코드를 클론할 때 사용합니다.
▸ base-devel: make, autoconf 등 컴파일 필수 도구들을 포함합니다.
✔️ pacman 명령어 요약
pacman은 MSYS2의 핵심 패키지 관리자입니다. 패키지 설치뿐 아니라 정보 확인, 삭제 등 다양한 작업을 할 수 있습니다.
실무에서 자주 사용하는 명령어는 다음과 같습니다
| 명령어 예시 | 설명 |
| pacman -Qi mingw-w64-x86_64-x264 | 패키지 설치 여부, 버전, 설명 등을 확인합니다 |
| pacman -Ql mingw-w64-x86_64-x264 | 패키지에 포함된 전체 파일 목록을 확인합니다. |
| pacman -Qlq mingw-w64-x86_64-x264 | 패키지 간단한 설치 파일 목록만 출력합니다. |
| pacman -Qs x264 | 이름 또는 설명에 ‘x264’가 포함된 패키지를 검색합니다. |
| pacman -R mingw-w64-x86_64-x264 | 해당 패키지를 시스템에서 제거합니다. |
✔️ 실무 팁
MSYS2는 세 가지 실행 환경(msys2.exe, mingw64.exe, mingw32.exe)을 제공합니다.
FFmpeg를 64비트로 빌드하려면 반드시 mingw64.exe 환경에서 작업을 진행해야 합니다.
이 단계에서는 기본 셸인 msys2.exe를 사용해 초기 설정을 마칩니다.
3. MinGW64 개발 환경 설정
FFmpeg를 Windows 환경에서 안정적으로 컴파일하려면, MinGW64 기반의 개발 환경이 필수입니다.
MinGW는 GNU 툴체인(gcc, g++, ld 등)을 Windows용 네이티브 바이너리로 포팅한 도구이며, FFmpeg처럼 복잡한 프로젝트를 컴파일할 때에도 비교적 호환성과 안정성이 뛰어납니다.
MSYS2 설치가 완료된 후, 64비트 빌드를 위해 mingw64.exe를 실행합니다. 기본 경로는 아래와 같습니다:
C:\msys64\mingw64.exe
이 터미널은 msys2.exe와 달리 Windows 네이티브 애플리케이션을 위한 크로스 컴파일 환경을 제공합니다. 이후 모든 빌드 작업은 이 mingw64 환경에서 진행합니다.
🔷 필수 도구 설치
FFmpeg를 제대로 빌드하려면 컴파일러, 링커, 어셈블러, 빌드 시스템 등 다양한 도구가 필요합니다. 다음 명령어로 필요한 모든 도구를 한 번에 설치합니다
pacman -S mingw-w64-x86_64-toolchain \
mingw-w64-x86_64-crt-git \
mingw-w64-x86_64-cmake \
mingw-w64-x86_64-ninja \
mingw-w64-x86_64-nasm \
mingw-w64-x86_64-yasm
toolchain 패키지에는 make 도구도 포함되어 있으므로 별도 설치하지 않아도 됩니다.
또한, pacman은 이미 설치된 패키지를 중복 설치하지 않기 때문에, 위 명령은 안전하게 재실행할 수 있습니다.
| 패키지 | 설명 |
| mingw-w64-x86_64-toolchain | C/C++ 컴파일러(gcc, g++), 링커(ld), 아카이버(ar) 등 핵심 빌드 도구 모음입니다. |
| mingw-w64-x86_64-crt-git | MinGW 전용 런타임(C Runtime), 표준 라이브러리를 포함하며 FFmpeg처럼 복잡한 소스에 필수입니다. |
| mingw-w64-x86_64-cmake | cmake를 사용하는 외부 라이브러리(libx264 등) 구성 시 사용됩니다. |
| mingw-w64-x86_64-ninja | cmake를 빠르게 빌드할 수 있는 빌드 시스템(대체로 make보다 빠르고 경량) |
| mingw-w64-x86_64-nasm / yasm | 어셈블리 최적화를 사용하는 코덱(libx264, libvpx 등)을 빌드할 때 필요한 저수준 어셈블러입니다. |
4. FFmpeg 빌드를 위한 패키지 설치
FFmpeg는 기본적으로 다양한 멀티미디어 코덱과 컨테이너 포맷을 지원하지만, 고급 인코딩 기능을 활용하려면 외부 라이브러리들을 사전에 설치해야 합니다.
특히 H.264, MP3, AAC, VP9 등의 인코딩 기능은 기본 FFmpeg 빌드에는 포함되어 있지 않으며, 라이선스 정책이나 빌드 설정에 따라 수동 활성화가 필요합니다.
이번 빌드에서는 다음과 같은 대표적인 인코딩/디코딩 라이브러리를 포함합니다:
🔸 libx264: 고효율 H.264 비디오 인코딩
🔸 libmp3lame: MP3 오디오 인코딩
🔸 libvpx: VP8 / VP9 비디오 코덱 (Google/YouTube 호환)
🔸 libwebp: Google의 WebP 이미지 포맷 지원
🔸 fdk-aac: 고품질 AAC 오디오 인코더
아래 명령어를 mingw64 터미널에서 실행하여 필요한 라이브러리를 설치합니다
pacman -S \
mingw-w64-x86_64-zlib \
mingw-w64-x86_64-openssl \
mingw-w64-x86_64-libwebp \
mingw-w64-x86_64-libx264 \
mingw-w64-x86_64-libvpx \
mingw-w64-x86_64-lame \
mingw-w64-x86_64-libvorbis \
mingw-w64-x86_64-opus \
mingw-w64-x86_64-fdk-aac
위 라이브러리들은 대부분 --enable-xxx 옵션과 함께 FFmpeg configure 단계에서 명시적으로 활성화해 줘야 실제 빌드에 포함됩니다. 단순히 설치만 한다고 해서 자동 적용되지는 않습니다.
| 패키지명 | 주요 기능 | FFmpeg 빌드 옵션 |
| zlib | 데이터 압축 처리 | 내장 기능, 별도 옵션 없음 |
| openssl | 보안 통신 (HTTPS, HLS 등) | --enable-openssl |
| libwebp | WebP 이미지 입출력 | --enable-libwebp |
| libx264 | H.264 비디오 인코딩 | --enable-libx264 |
| libvpx | VP8 / VP9 비디오 인코딩 | --enable-libvpx |
| lame | MP3 오디오 인코딩 | --enable-libmp3lame |
| libvorbis | OGG/Vorbis 오디오 인코딩 | --enable-libvorbis |
| opus | Opus 오디오 인코딩 | --enable-libopus |
| fdk-aac | 고품질 AAC 오디오 인코딩 | --enable-libfdk-aac + --enable-nonfree |
fdk-aac와 libx264는 비자유 라이선스(non-free)로 분류되므로, configure 단계에서 --enable-nonfree 옵션을 반드시 함께 지정해야 합니다. 그렇지 않으면 빌드가 실패하거나 라이브러리가 무시됩니다.
5. FFmpeg 소스 다운로드 및 설정
FFmpeg를 빌드하려면 먼저 공식 저장소에서 소스 코드를 내려받고, 원하는 버전으로 체크아웃한 뒤 빌드 설정을 준비해야 합니다.
FFmpeg는 Git으로 관리되며, 버전별로 태그(tag)가 지정되어 있어 특정 릴리스를 정확하게 선택하여 사용할 수 있습니다.
아래 명령어를 통해 최신 FFmpeg 소스를 클론하고, 안정적인 7.1 릴리스 버전으로 체크아웃합니다
cd ~
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
cd ffmpeg
git checkout n7.1
| 명려어 | 설명 |
| cd ~ | 홈 디렉토리(예: /home/사용자명)로 이동합니다. 소스는 이 경로 아래에 받는 것을 권장합니다. |
| git clone ... ffmpeg | FFmpeg 공식 Git 저장소에서 소스를 클론합니다. 디렉토리 이름은 ffmpeg로 설정됩니다. |
| cd ffmpeg | 클론한 디렉토리로 진입합니다. |
| git checkout n7.1 | n7.1 태그가 붙은 정식 릴리스 버전으로 소스 코드를 맞춥니다. 최신 master 브랜치가 아닌, 안정성이 검증된 버전을 기준으로 빌드할 수 있습니다. |
FFmpeg의 master 브랜치는 실험적인 커밋이 포함되어 있을 수 있으므로, 공식 릴리스 버전(nX.X)을 명시적으로 선택하는 것을 권장합니다.
6. FFmpeg 정적 빌드 실행
이제 FFmpeg 소스를 내려받고 빌드 환경을 구성했으므로, 실제로 컴파일을 수행할 준비가 되었습니다.
이번 단계에서는 정적(static) 빌드 방식으로 FFmpeg를 빌드하며, 이를 통해 외부 DLL 없이 ffmpeg.exe 단독으로 실행 가능한 파일을 생성하게 됩니다.
🔷 configure 명령어 구성
빌드 설정은 ./configure 스크립트를 통해 이루어지며, 여기서 활성화할 라이브러리와 비활성화할 기능, 최적화 플래그 등을 지정합니다.
아래는 실무에서 널리 사용하는 정적 빌드 설정 예시입니다
./configure --prefix=/home/ubuntu/dist \
--arch=x86_64 \
--enable-static \
--disable-shared \
--disable-debug \
--disable-doc \
--enable-gpl \
--enable-version3 \
--enable-nonfree \
--enable-libx264 \
--enable-libwebp \
--enable-libvpx \
--enable-libfdk-aac \
--enable-libvorbis \
--enable-libmp3lame \
--enable-libopus \
--enable-openssl \
--disable-iconv \
--disable-w32threads \
--extra-cflags="-static -static-libgcc -static-libstdc++" \
--extra-ldflags="-static -static-libgcc -static-libstdc++" \
--pkg-config-flags="--static"
🔷 빌드 및 설치
설정이 완료되면 make를 통해 본격적인 컴파일을 진행하고, make install로 실행 파일을 설치합니다:
make -j$(nproc)
make install
▸ -j$(nproc)
현재 시스템의 CPU 코어 수를 자동으로 감지하여 병렬 컴파일을 수행합니다.
예를 들어 8코어 CPU라면 make -j8과 동일하게 작동합니다. 빌드 속도 향상에 매우 효과적입니다.
▸ make install
앞서 --prefix 옵션에서 지정한 경로(/home/ubuntu/dist)에 다음과 같은 파일들이 설치됩니다

7. 빌드 결과 확인 및 테스트
빌드가 정상적으로 완료되었는지 다음 명령으로 확인할 수 있습니다
cd /home/ubuntu/dist/bin
ls

▸ ffmpeg.exe: 멀티미디어 변환의 핵심 실행 파일
▸ ffprobe.exe: 입력 미디어 파일의 정보(코덱, 해상도, 프레임 수 등)를 출력하는 도구
🔷 정적 링크 여부 검사
빌드된 실행 파일이 실제로 정적(static) 링크 방식인지 확인하려면 ldd 명령어를 사용합니다
ldd ffmpeg.exe

🔷 기능 테스트: RTSP 스트림 저장
설치된 ffmpeg.exe가 실질적으로 작동하는지 확인하기 위해, RTSP 스트림을 입력받아 mp4 파일로 저장해 보는 테스트를 진행합니다.
./ffmpeg.exe -i rtsp://example.com/live.sdp -c copy output.mp4


✔ 마무리
이번 과정을 통해 **libx264 기반 H.264 인코딩 기능이 포함된 정적 FFmpeg 실행 파일(ffmpeg.exe)**을 성공적으로 생성하였습니다.
생성된 실행 파일은 외부 DLL 파일 없이도 단독으로 동작하므로, 다음과 같은 실무적 이점을 가집니다
| 항목 | 설명 |
| 배포 및 이식 용이 | 타인의 PC나 서버에 별도 DLL 설치 없이 그대로 실행 가능 |
| 보안 및 안정성 향상 | 외부 동적 링크에 따른 런타임 충돌이나 보안 취약점 감소 |
| 운영 환경 일관성 유지 | CI/CD, 서버 자동화 배포 시 버전 충돌 없이 사용 가능 |
| 멀티 플랫폼 대응 유리 | 동일 환경에서 동일 실행 파일로 테스트/배포 가능 |
또한, 이번 빌드 환경은 향후 H.265, CUDA 가속, RTSP 인증 확장에도 그대로 활용할 수 있어, 장기적으로 개발/운영 효율성을 높이는 기반이 됩니다.
👉 관련 글 링크
1. [FFmpeg] Windows 환경에서 FFmpeg 7.1 정적 빌드하기 – MinGW64 + H.264 인코딩 지원
2. [FFmpeg] FFmpeg 7.1 + H.265(libx265) 지원 정적 빌드 – 기존 MinGW64 환경 확장
3. [FFmpeg] CUDA 가속 포함 FFmpeg 7.1 정적 빌드 – MinGW64 + libx264/x265 + NVENC
4. [FFmpeg] SHA-256 Digest 인증 대응 FFmpeg 7.1 정적 빌드 – MinGW64 + CUDA + 인증 로직 패치
5. [FFmpeg] RTSP 스트림을 fMP4로 변환해 초저지연 TCP 전송하기
6. [FFmpeg] 인코딩 실습: CPU(libx264)와 CUDA(h264_nvenc) 비교
※ 게시된 글 및 이미지 중 일부는 AI 도구의 도움을 받아 생성되거나 다듬어졌습니다.
'1.시스템&인프라 > 스트리밍' 카테고리의 다른 글
| [FFmpeg] 인코딩 실습: CPU(libx264)와 CUDA(h264_nvenc) 비교 (0) | 2025.11.05 |
|---|---|
| [FFmpeg] RTSP 스트림을 fMP4로 변환해 초저지연 TCP 전송하기 (0) | 2025.11.05 |
| [FFmpeg] SHA-256 Digest 인증 대응 FFmpeg 7.1 정적 빌드 – MinGW64 + CUDA + 인증 로직 패치 (0) | 2025.11.05 |
| [FFmpeg] CUDA 가속 포함 FFmpeg 7.1 정적 빌드 – MinGW64 + libx264/x265 + NVENC (0) | 2025.11.05 |
| [FFmpeg] FFmpeg 7.1 + H.265(libx265) 지원 정적 빌드 – 기존 MinGW64 환경 확장 (0) | 2025.11.05 |