최신목록

2018년 8월 24일 금요일

[FFMEPG] ffmpeg build with x264 (windows 10)

윈도우 개발자로 살면서 mingw 환경에서의 컴파일이 무척 혼란스러웠어서 정리를 해본다.
윈도우면 c 컴파일은 무조건 msvc로 해야한다는 편견에서 빠져나오는데 시간이 좀 걸렸다. ffmpeg이 msvc로 컴파일 가이드를 제공해서 더욱...혼란스러웠다.

실패 후기....
처음에 --toolchain=msvc로 주고 빌드를 완료하였다.

> ffmpeg_g.exe -framerate 1 -f image2 -i test%02d.bmp test.avi








동영상하나를 만들었더니 기본 코덱이 FMP4로 잡힌다.

FMP4가 먼지는 정확히 모르겠지만 원하던건 H.264이므로 다시 시도한다.

>ffmpeg_g.exe -framerate 1 -f image2 -i test%02d.bmp -c:v libx264 test.avi







libx264 encoder가 ffmpeg에는 없다.......음...그렇구나...

다시 x264를 다운받고 빌드를 하는데 msvc 빌드를 지원하지 않고(?) ㅠㅠ gcc로 빌드했다.
아......mingw 환경에서는 gcc로 빌드해서 리눅스용 윈도우용 바이너리가 다 나온다... 신기하다..

      



빌드 후 생긴 결과물들 .a 파일과 .exe파일이 다 나왔다 ㅋㅋ 아직도 혼란스럽다...
그래서 굳이 ffmpeg도 msvc로 빌드하지 않기로했다.
vs2015 native tool 실행하지 않고 --toolchain=msvc 옵션도 제거했다. --enable-libx264는 추가했다.

./configure --enable-shared --enable-gpl --enable-libx264 --extra-cflags='-I./x264/ffmpeg_build/include' --extra-ldflags='-L./x264/ffmpeg_build/lib' --bindir="./x264/ffmpeg_build/bin"

그랬더니 빌드는 잘되는데 ffmpeg.exe 실행하면 libiconv, liblzma, libwinpthread 등등 이상한 라이브러리를 찾는다. --disable-iconv, --disable lzma 등 다 disable이 되는데 libwinpthread는 disable-pthread, disable-win32thread 등 아무리해도 dependency 제거가 되지 않는다. ㅠ

결국 x264 와 ffmpeg 둘다 msvc 환경에서 빌드해서 성공했다.

잡담은 그만하고 이제부터 빌드방법을 정리해보겠다.(빌드환경은 64비트 기준으로 진행하였음)

1. MSYS2 설치(x86_64)
http://www.msys2.org/

2. YASM 설치
http://yasm.tortall.net/Download.html

win64.exe 를 C:\msys64\usr\bin 폴더에 다운받고 yasm.exe라고 이름을 변경한다.

3. ffmpeg 다운로드
https://www.ffmpeg.org/download.html

4. x264 다운로드
https://www.videolan.org/developers/x264.html
ffmpeg 소스 폴더 안에 압축풀어 놓음

5. VS2015 x64 Native Tools Command Prompt 실행(msvc 시 필요한 환경 셋팅됨) 후 mingw 환경 실행함.

>cd c:\msys64
>msys2_shell.cmd -mingw64 -full-path

6. mingw 환경에서 ffmpeg/x264 폴더로 이동해서 x264 빌드함
$CC=cl ./configure --enable-static --prefix=${PWD}/build
$make
$make install




7. ffmpeg 폴더로 이동해서 ffmpeg 빌드함
$./configure --enable-shared --enable-gpl --enable-libx264 --extra-cflags='-I./x264/build/include' --extra-ldflags='-L./x264/build/lib' --prefix=${PWD}/ffmpeg_build --toolchain=msvc
$make
$make install


빌드 성공하고

>ffmpeg -framerate 1 -f image2 -i test %02d.bmp -c:v libx264 -preset veryslow -qp 18 -pix_fmt yuv420p test_264.avi

avi 잘 만들어진다.

msvc로 빌드하면 pdb 파일이 생겨서 좋네요.
pdb 파일이 prefix 경로에 쌓이지 않아 configure 파일을 좀 수정했습니다.

mingw32*|mingw64*)
.....
SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.pdb)'
...
win32|win64)
...
SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.pdb)'
...

두개 추가해줬더니 bindir에 잘 모여있네요~

댓글 3개:

  1. 안녕하세요. 작성하신 게시글 보고 똑같이 따라하려고 하는데 ffmpeg configure 명령어에서 계속 libx264를 찾을수 없다고 나오는데 혹시 해결방법을 아시는지요?

    답글삭제
    답글
    1. --extra-cflags='-I./x264/build/include' --extra-ldflags='-L./x264/build/lib' 두개 상대경로가 x264 빌드후 결과물 폴더와 일치하나요?

      삭제
  2. 저는 왜 configure 명령어가 없다고 뜨는걸까요...

    답글삭제