FFmpeg 7.1을 Windows에서 정적(static)으로 빌드하여 H.265(libx265) 인코딩을 지원하는 실행 파일을 만드는 방법을 소개합니다.
기본 환경은 MinGW64이며, libx265는 별도로 소스 빌드하여 정적으로 연결합니다. 정적 링크 실패 시 문제 해결 팁도 포함되어 있습니다.
MinGW64로 FFmpeg 7.1 컴파일하기: H265, 정적 링크
목차2. mingw-w64-x86_64-x265 설치 실패 및 원인
1. 목표 및 개요
Windows 10 + MinGW64 환경에서 ffmpeg.exe를 정적으로 빌드하여 H.265 코덱을 지원하도록 합니다.
정적 빌드(static build)는 외부 DLL에 의존하지 않기 때문에 배포 시 유리합니다.
2. mingw-w64-x86_64-x265 설치 실패 및 원인
기존처럼 패키지 매니저를 통해 libx265를 설치하고 빌드하려 했으나, 다음과 같은 문제가 발생했습니다.
pacman -S mingw-w64-x86_64-x265
mingw에서 제공되는 x265라이브러리를 설치하여 ffmpeg를 컴파일을 시도하였으나 버전 문제로 실패하였습니다.
mingw-w64-x86_64-x265는 4.1.2 버전으로 설치되었으나(최신만 설치된다고 합니다.) ffmpeg 7.1 코드는 x265 4.0 코드와 호환이 된다고 합니다.
FFmpeg/libavcodec/libx265.c에서 다음 부분을 조건부로 수정하여 빌드는 가능해졌지만,
#if X265_BUILD >= 210
for (i = 0; i < MAX_SCALABLE_LAYERS; i++)
x265pic_lyrptr_out[i] = &x265pic_layers_out[i];
ret = ctx->api->encoder_encode(ctx->encoder, &nal, &nnal,
/* 주석처리 pic ? &x265pic : NULL, x265pic_lyrptr_out); */
/* 코드 추가 */ pic ? &x265pic : NULL, x265pic_lyrptr_out ? *x265pic_lyrptr_out : NULL);
#else
ret = ctx->api->encoder_encode(ctx->encoder, &nal, &nnal,
pic ? &x265pic : NULL, &x265pic_solo_out);
#endif
코드 수정후 x265 빌드는 문제가 없었으나 FFMpeg 정적 빌드시 동적라이브러리를 참조하는 문제가 발생하였습니다.
"5. 정적 링크 오류 해결하기: x265.pc 수정" 을 참고 해서 수정하면 됩니다.
3. libx265 소스 직접 빌드하기
정적 연결을 위해 x265 소스를 직접 4.0 버전으로 빌드합니다.
1. home 경로로 이동
cd
/home/ubuntu
2. git에서 소스 복제하기
git clone https://bitbucket.org/multicoreware/x265_git.git
3. 소스 경로로 이동
cd x265_git
4. 4.0 버전 전환
git checkout 4.0
x265 소스를 static 라이브러리로 빌드합니다.
1. build 경로로 이동
cd build
// 다시빌드할 경우 build 경로를 삭제하고 재 생성하여 작업하면 됩니다.
// rm -rf build
// mkdir build
// cd build
2. cmake로 static 빌드 설정
cmake -G Ninja \
-DCMAKE_INSTALL_PREFIX=/mingw64 \
-DENABLE_SHARED=off \
-DCMAKE_EXE_LINKER_FLAGS="-static -static-libgcc -static-libstdc++" \
../source
3. 컴파일 & 링크
ninja
ninja install
ldd 명령으로 x265.exe 가 참조하는 동적라이브러리를 확인합니다.
windows system 라이브러리 외 추가로 참조하는 동적라이브러리가 없음을 확인하였습니다.
코드 수정후 x265 빌드는 문제가 없었으나 FFMpeg 정적 빌드시 동적라이브러리를 참조하는 문제가 발생하였습니다.
"5. 정적 링크 오류 해결하기: x265.pc 수정" 을 참고 해서 수정하면 됩니다.
4. FFmpeg에 H.265 코덱 추가하여 정적 빌드하기
FFmpeg 소스 디렉토리로 이동:
cd /home/ubuntu/ffmpeg
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-libx265 \
--enable-libwebp \
--enable-libvpx \
--enable-libfdk-aac \
--enable-libvorbis \
--enable-libmp3lame \
--enable-libopus \
--enable-openssl \
--disable-libass \
--disable-iconv \
--disable-autodetect \
--disable-w32threads \
--extra-cflags="-static -static-libgcc -static-libstdc++" \
--extra-ldflags="-static -static-libgcc -static-libstdc++" \
--pkg-config-flags="--static"
빌드 및 설치:
make -j$(nproc)
make install
5. 정적 링크 오류 해결하기: x265.pc 수정
빌드는 완료되었지만 ldd ffmpeg.exe 실행 시 다음과 같이 외부 DLL이 남아 있는 것을 확인했습니다.
→ 원인은 pkg-config가 참조하는 x265.pc 설정 파일이 동적 라이브러리 기준으로 작성되어 있었기 때문입니다.
pkgconfig/x265.pc 파일은
- pkg-config 도구가 libx265 라이브러리를 찾고 사용할 수 있도록 정보를 제공하는 메타데이터 파일입니다
- 보통 ./configure, Makefile, 또는 CMake 빌드 시스템에서 사용됩니다
1. x265 pkg-config 설정파일 열기
// 파일탐색기에서 해당파일을 열어 직접 편집해도 됩니다.
cd /mingw64/lib/pkgconfig
nano x265.pc
수정전 x265.pc 파일내용
수정후 x265.pc 파일 내용
prefix=C:/msys64/mingw64
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
Name: x265
Description: H.265/HEVC video encoder
Version: 4.0
Libs: -L${libdir} -lx265
Libs.private: -lstdc++ -static-libgcc -static-libstdc++
Cflags: -I${includedir}
x265.pc 수정후 다시 빌드
cd /home/ubuntu/ffmpeg
make distclean
configure 명령어...
make -j $(nproc)
make install
6. 결과 확인 및 테스트
결과물 확인:
cd /home/ubuntu/dist/bin
ldd ffmpeg.exe
→ 시스템 라이브러리 외 링크 없음 = 정적 빌드 성공
RTSP 스트림 → x265 인코딩 MP4 저장 테스트:
./ffmpeg.exe -i rtsp://example.com/stream -c:v libx265 -c:a copy output.mp4
libx265 소스를 직접 빌드하고, FFmpeg에 정적으로 연결하여 H.265 인코딩을 지원하는 ffmpeg.exe를 만드는 과정을 정리했습니다.
중간에 발생하는 동적 링크 문제도 x265.pc 설정을 통해 해결할 수 있었습니다.
관련 글 링크
'1.시스템&인프라 > 스트리밍' 카테고리의 다른 글
[MistServer]2.MistServer 기본 설정하기: 계정등록, 프로토콜 설정 (0) | 2025.04.10 |
---|---|
[MistServer]1.MistServer 설치 및 서비스 등록: Ubuntu (0) | 2025.04.10 |
[FFmpeg]4.MinGW64로 FFmpeg 7.1 컴파일하기 : SHA-256 Digest 인증 지원, 정적 링크 (0) | 2025.03.30 |
[FFmpeg]3.MinGW64로 FFmpeg 7.1 컴파일하기 : CUDA, 정적 링크 (0) | 2025.03.30 |
[FFmpeg]1.MinGW64로 FFmpeg 7.1 컴파일하기: H.264, 정적 링크 (0) | 2025.03.30 |