내용 요약은 후반부에, 일단 생각나는 대로 작성 

※ 본 글은 Windows 10 64bit에서 MinGW-w64를 이용해서 ffmpeg 3.0.1를 64bit build 하는 과정을 설명합니다. 2016-04-21

※ PATH 관련 내용 수정 2016-04-22

※ build 결과를 이용해서 IP카메라에서 H.264로 streaming 되는 것을 정상적으로 decoding 및 display하는 것 까지 확인.


근 10년만에 ffmpeg을 빌드해야하는 일이 생겼다. 그것도 64bit용으로..


Windows에서 오픈소스를 빌드하는 건 상당히 피곤하고 괴로운 일이다.

Web에서 검색해보면 보통 필요한 시점보다 1~2년 전 글들이 대부분이고, 그 동안 오픈소스들은 보통 변경된 것이 많다. 

그말은 즉슨, 검색으로 얻은 정보를 따라하다보면 에러가 발생할 확률이 높다는 것이다. -_-; 매번 할때마다 속이 터진다.


각설하고,

Windows에서 Unix 개발 환경을 만들어주는 것으로 Cygwin, MSYS가 대표적인데,  Cygwin은 호환성에 중점을 둔 것으로 결과물 사용 시 Cygwin DLL을 필요로 하므로 탈락. MSYS를 쓰자.


MSYS에 MinGW를 사용할 것인데, MSYS도 1.0이 있고, 2.0이 있다.

http://www.mingw.org/ 에서 배포하는게 1.0이고 https://sourceforge.net/projects/msys2/ 에서 배포하는 게 2.0 이다.

"2.0이 1.0보다 상위 버전이고 좋겠지?" 라고 흔히 생각할 수 있는데, 함정이다 -_-;

MSYS2 . MSYS 2.0은 Cygwin의 파생 프로젝트다. MSYS2의 결과물들은 "msys-2.0.dll"이란 DLL을 필요로 한다.  MSYS2를 통해 빌드하면 과정이 훨신 수월한데 나중에 사용할때 당황하고 그 때서야 "아, 내가 당했구나.." 할거다.


인터넷을 뒤지다가 결과물이 정상적으로 동작하는 것을 확인하자 마자 쓰는 글이므로 MSYS 1.0은 정식 배포처인 MinGW.org 것이 아닌 sourceforge에서 배포하는 MinGW-builds 버전을 사용할 것이다. (솔직히 2개의 버전의 차이는 모르겠다..)


https://sourceforge.net/projects/mingwbuilds/files/external-binary-packages/

여기에 가서 가장 최근 것(현 시점에서 2013-05-15일자)을 다운받아서 로컬에 압축 해제 한다. 예) c:\msys


http://www.drangon.org/mingw/ 

그리고 여기로 가서 MinGW-w64 를 다운받아서 msys 아래에 압축을 해제 한다. 웹페이지 하단에 다운로드 링크가 있다. (현 시점 최신 버전은 2016-03-20)

msys를 c:\msys에 설치했고, 거기다가 압축을 풀었으면 c:\msys\mingw64 로 풀렸을 것이다.


이제 windows에서 환경변수에 msys\bin 경로를 추가한다.

" 제어판>시스템>고급 시스템 설정> 고급 > 환경 변수" 에 가서 "PATH"를 편집

C:\msys\bin을 추가한다.

(다음에 나오는 터미널에서의 PATH 추가를 수행한다면 이 과정은 필요 없다.)


그리고 c:\msys에 가서 msys.bat 실행

msys터미널에서 다음 3줄을 실행한다.


1
2
3
echo 'export PATH=.:/local/bin:/bin:/mingw64/bin' > .profile
echo 'git config --global core.autocrlf false' >> .profile
source .profile

이제 ffmpeg 소스를 다운 받아서 c:\msys\home 아래에 설치하자
최신 소스를 쓸려면 git으로 받고(좌측 상단), 내 경우에는 Release버전을 
사용하기로 해서 하단 Release 부분에 있는 Release 압축 파일을 다운받아서 사용했다.


ffmpeg에서는 추가로 여러가지 외부 라이브러리를 사용할 수 있다.
configure도 사용 목적에 따라 방법이 무진장 많지만
내 경우에는 기본 상태로 빌드해도 문제가 없으므로 기본적인 것으로 
configure를 수행한다. ( LPGL 3.0 사용, 외부라이브러리 없음 )

./configure --arch=x86_64 --enable-stripping --disable-w32threads 
--enable-memalign-hack --disable-static --enable-shared --enable-version3 
--disable-doc

그리고 make

내 컴퓨터는 I7 4코어니까 make -j4

끗.

----------------------------------------------------------------------------------
이하 요약

 MSYS 다운받고 C:\msys에 압축 해제

2. http://www.drangon.org/mingw/ 에 가서 MinGW-w64 다운받고 c:\msys에 압축 해제

3. windows 시스템 환경 변수에 c:\msys\bin 등록 (6번 내용을 수행할 경우 필요없음)

4. ffmpeg 소스를 c:\msys\home 아래에 설치

5. msys.bat 실행

6. echo 'export PATH=.:/local/bin:/bin:/mingw64/bin' > .profile
echo 'git config --global core.autocrlf false' >> .profile
source .profile

7. ffmpeg 경로로 가서 configure 진행.  (아래 예시는 LPGL 3.0 사용, 외부 라이브러리 없음)
ex) ./configure --arch=x86_64 --enable-stripping --disable-w32threads --enable-memalign-hack 
--disable-static --enable-shared --enable-version3 --disable-doc

8. make

9. ffmpeg root와 하위 lib 폴더에 결과물이 생성됨

추가로 configure를 다시해서 빌드 할때는 make clean, make distclean을 수행하고 다시 configure.

끗.

<출처 - http://www.helyar.net/2014/compile-ffmpeg-64-bit-on-windows-with-msysmingw-w64/ 그리고 본인>



[추가]

무슨 차이인지 모르겠지만, 글 작성 전에 사용하던 2.5.11 과 다르게 3.0으로는 

decoding과정을 분할하지 않으면 화면이 매끄럽게 나오지 않음.

API 사용 방식이 일부 바꼈는데, 그부분의 문제인가.. libx264를 포함하지 않아서 인가?


'ffmpeg' 카테고리의 다른 글

libmingwex 관련 내용  (0) 2016.05.12
ffmpeg 32bit windows build (MSYS 1.0, MinGW-w64 사용)  (0) 2016.04.22
Posted by 아..몰라 ㅡ.ㅡ+
,