1.시스템&인프라/스트리밍

[FFmpeg]2.MinGW64로 FFmpeg 7.1 컴파일하기: H265, 정적 링크

쿼드큐브 2025. 3. 30. 19:46
728x90

FFmpeg 7.1을 Windows에서 정적(static)으로 빌드하여 H.265(libx265) 인코딩을 지원하는 실행 파일을 만드는 방법을 소개합니다.
기본 환경은 MinGW64이며, libx265는 별도로 소스 빌드하여 정적으로 연결합니다. 정적 링크 실패 시 문제 해결 팁도 포함되어 있습니다.

 

MinGW64로 FFmpeg 7.1 컴파일하기: H265, 정적 링크

 

목차

1. 목표 및 개요

2. mingw-w64-x86_64-x265 설치 실패 및 원인

3. libx265 소스 직접 빌드하기

4. FFmpeg에 H.265 코덱 추가하여 정적 빌드하기

5. 정적 링크 오류 해결하기: x265.pc 수정

6. 결과 확인 및 테스트

관련 글 링크

 

 

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 설정을 통해 해결할 수 있었습니다.

 

 

관련 글 링크

 

728x90