woonizzooni

FFmpeg Visual Studio 2019 컴파일-1 본문

FFmpeg

FFmpeg Visual Studio 2019 컴파일-1

woonizzooni 2019. 7. 10. 21:02

참고한 FFmpeg 빌드 가이드

    https://trac.ffmpeg.org/wiki/CompilationGuide/MSVC

    https://trac.ffmpeg.org/wiki/CompilationGuide/MinGW

    https://trac.ffmpeg.org/wiki/HWAccelIntro

 

ffmpeg 소스 컴파일 없이 실행파일과 dll파일만 필요할 경우 아래 경로에서 파일 다운로드/빌도옵션 참고.

    https://ffmpeg.zeranoe.com/builds/

    https://ffmpeg.zeranoe.com/builds/readme/win64/static/ffmpeg-20190708-f83b46e-win64-static-readme.txt

 

 

Visual Studio를 이용하는 방식(=MSVC)으로 진행해본다.

 

 

1. Visual Studio 설치 (난 Visual Studio 2019 Enterprise설치)

    (( 설치과정 생략 ))

   - cl.exe, link.exe : exe(실행)파일과 dll(동적라이브러리)파일 제작을 위해 사용됨. 

   - 내 경우 visual studio에서 ffmpeg 연동 프로그램 제작을 염두해서 진행한 것인데,

     커뮤니티 버전으로 설치하거나(무료?), 

     Microsoft Build Tools 2015 (https://www.microsoft.com/ko-kr/download/details.aspx?id=48159) 설치로

     시도해 볼 수 있겠다.

     

2. MSYS설치 & 패키지 업데이트 & 기본 패키지 설치 (이전 게시글 참고) & 패키지 추가(SDL2)

  - MSYS2로 진행한 이유 (https://i.stack.imgur.com/apNVx.png)

  - ffplay 실행 위해 했는데,

    이렇게 진행해도 sdl2가 auto detecting되지 않아 실행히 안되네... 일단 해놓는다.

  $ pacman -S mingw-w64-x86_64-SDL mingw-w64-x86_64-SDL_ttf

  $ pacman -S --neede mingw-w64-x86_64-SDL2 mingw-w64-x86_64-SDL2_mixer mingw-w64-x86_64-SDL2_ttf

$ pacman -S --neede mingw-w64-x86_64-SDL2 mingw-w64-x86_64-SDL2_mixer mingw-w64-x86_64-SDL2_ttf
의존성 해결 중...
꾸러미 충돌을 찾는 중...

꾸러미 (18) mingw-w64-x86_64-flac-1.3.2-1  mingw-w64-x86_64-fluidsynth-2.0.5-1
            mingw-w64-x86_64-libmodplug-0.8.9.0-1  mingw-w64-x86_64-libogg-1.3.3-1
            mingw-w64-x86_64-libsndfile-1.0.28-1  mingw-w64-x86_64-libtool-2.4.6-14
            mingw-w64-x86_64-libvorbis-1.3.6-1  mingw-w64-x86_64-mpg123-1.25.10-1
            mingw-w64-x86_64-opus-1.3.1-1  mingw-w64-x86_64-opusfile-0.11-2
            mingw-w64-x86_64-portaudio-190600_20161030-3  mingw-w64-x86_64-speex-1.2.0-1
            mingw-w64-x86_64-speexdsp-1.2.0-1  mingw-w64-x86_64-vulkan-headers-1.1.112-1
            mingw-w64-x86_64-vulkan-loader-1.1.112-1  mingw-w64-x86_64-SDL2-2.0.9-1
            mingw-w64-x86_64-SDL2_mixer-2.0.4-1  mingw-w64-x86_64-SDL2_ttf-2.0.15-1

총 다운로드 크기:   6.22 MiB
총 설치 크기:  36.60 MiB

:: 설치를 진행하시겠습니까? [Y/n] y

 

3. exe파일, dll파일 컴파일 쉘 환경 구성 (비주얼스튜디오 쉘 > msys쉘 진입)

   : Developer Command Prompt for VS 2019 쉘 실행 후 아래 명령 실행

   - msys쉘타입 지정, VS쉘 PATH그대로 사용

 C:\msys64\msys2_shell.cmd -msys -use-full-path

   * msys2_shell.cmd : 옵션 참고

C:\msys64>msys2_shell.cmd --help
Usage:
    msys2_shell.cmd [options] [login shell parameters]

Options:
    -mingw32 | -mingw64 | -msys[2]   Set shell type
    -defterm | -mintty | -conemu     Set terminal type
    -here                            Use current directory as working
                                     directory
    -where DIRECTORY                 Use specified DIRECTORY as working
                                     directory
    -[use-]full-path                 Use full current PATH variable
                                     instead of trimming to minimal
    -no-start                        Do not use "start" command and
                                     return login shell resulting
                                     errorcode as this batch file
                                     resulting errorcode
    -shell SHELL                     Set login shell
    -help | --help | -? | /?         Display this help and exit

Any parameter that cannot be treated as valid option and all
following parameters are passed as login shell command parameters.

  - line.exe 실행파일 경로 조정 (우선순위)

    MSYS 쉘의 PATH 최상단이 /usr/local/bin, /usr/bin여서 /usr/bin/link가 먼저 찾아지니, cl.exe파일 경로를 먼저 잡아주자.

$ which cl
/c/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.21.27702/bin/HostX86/x86/cl

$ which link
/usr/bin/link

$ export PATH="/c/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.21.27702/bin/HostX86/x86":$PATH 

$ which link
/c/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.21.27702/bin/HostX86/x86/link

  [참고] C:\msys64\msys2_shell.cmd 직접 실행 & c1.exe와 linker.exe

   msys쉘 실행 & cl.exe와 link.exe 파일 PATH추가

   아래 4개 경로에 파일 존재하나, HostX64/x64의 것으로 변경하니 컴파일이 되지 않더라 -_-; 나중에 살펴보자.

C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.21.27702\bin\
ㄴHostx64
    ㄴ\x64 : (1)
    ㄴ\x86 : (2)
ㄴHostx86
    ㄴ\x86 : (3)
    ㄴ\x64 : (4)

 

 

4. YASM 다운 & PATH경로 추가 (ffmpeg빌드시 어셈블러(x86, amd64지원) 필요)

   http://yasm.tortall.net/

   http://yasm.tortall.net/Download.html

   Win32.exe : http://www.tortall.net/projects/yasm/releases/yasm-1.3.0-win32.exe

   Win64.exe : http://www.tortall.net/projects/yasm/releases/yasm-1.3.0-win64.exe

   원하는 파일을 yasm.exe로 이름 변경해서 PATH경로에 추가.

$ wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0-win32.exe 
$ wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0-win64.exe 

$ ln -s $ ln -s yasm-1.3.0-win64.exe yasm.exe 

$ export PATH=/home/${USER}:$PATH

 

 

5. PKG_CONFIG_PATH 추가

  - ffplay 빌드 위해 아둥바둥(?) 하고 있으나, 아래와 같이 해도 (pkg-config에 sdl2가 보여도) ffplay가 빌드되지 않는다. 

   (나중으로 미루자.)

$ pkg-config --libs --cflags sdl2 
    Package sdl2 was not found in the pkg-config search path. 
    Perhaps you should add the directory containing `sdl2.pc' 
    to the PKG_CONFIG_PATH environment variable 
    No package 'sdl2' found 

$ echo $PKG_CONFIG_PATH 
    /usr/lib/pkgconfig:/usr/share/pkgconfig:/lib/pkgconfig 

$ export PKG_CONFIG_PATH=/mingw64/lib/pkgconfig:/mingw64/share/pkgconfig:$PKG_CONFIG_PATH; 

$ echo $PKG_CONFIG_PATH 
    /mingw64/lib/pkgconfig:/mingw64/share/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig:/lib/pkgconfig 

$ pkg-config --libs --cflags sdl2 
    -Dmain=SDL_main -I/mingw64/include/SDL2 -L/mingw64/lib -lmingw32 -lSDL2main -lSDL2 -mwindows -lmingw32 -lSDL2main -lSDL2 -mwindows -Wl,--no-undefined -lm -ldinput8 -ldxguid -ldxerr8 -luser32 -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lsetupapi -lversion -luuid -static-libgcc 

 

 

6. FFmpeg다운로드 & 컴파일

 - 버전 선택 (ex : https://ffmpeg.org/releases/ffmpeg-4.1.4.tar.bz2)

 - 스냅샷

  $ git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg

  $ cd ffmpeg

  $  ./configure --prefix=/home/${USER}/INSTALLED --target-os=win64 --arch=x86_64 --toolchain=msvc --enable-gpl --enable-asm --enable-shared 

    ** hw가속(dxva, nvenc/nvdec), x264, x265, openh264등의 연동/설정은 나중으로 미룸...

  - 컴파일이 끝나면 prefix경로의 bin폴더에 아래와 같이 dll, exe파일이 생성된다. (ffplay 없음)

    = 끝 =

 

※ SDL2 이슈!! (ffplay없는 현상 관련)

  $ ./configure .... -enable-ffplay --enable-sdl 으로 강제해보면, 아래와 같은 에러로 더이상 진행 불가.

    ....

    ERROR: sdl2 requested but not found 

  $ grep ffplay_deps ffbuild/config.log
    ffplay_deps='avcodec avformat swscale swresample sdl2'

 

   EXTERNAL_AUTODETECT_LIBRARY_LIST = "... sdl2" <-- 이게 안잡힌다....

   ffplay.exe 생성은 나중으로 미룬다...

 


[참고]

 

 

https://stackoverflow.com/questions/25019057/how-are-msys-msys2-and-msysgit-related-to-each-other

https://stackoverflow.com/questions/20422051/ffmpeg-ffplay-binary-not-getting-generated-on-compilation

 

 

MSYS2 : Libraries (optional) : SDL (for 64bit-toolchain)

    https://github.com/mangband/mangband/wiki/MSYS2

Comments