일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- service
- 행정구역분류
- dart
- Android
- Flutter
- spring cloud config
- kubectl
- namespace
- Kubernetes
- VSCode
- Windows10
- nginx-media-server
- RTMP
- aws
- HLS
- deployment
- aws cli
- docker
- ffmpeg
- wireshark
- ebpf
- configmap
- golang
- Pod
- Sysinternals
- android studio
- Python
- Shell script
- macos
- Java
- Today
- Total
woonizzooni
FFmpeg Visual Studio 2019 컴파일-1 본문
참고한 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/
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/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
MSYS2 : Libraries (optional) : SDL (for 64bit-toolchain)
https://github.com/mangband/mangband/wiki/MSYS2
'FFmpeg' 카테고리의 다른 글
[Windows] ffmpeg으로 화면캡처(capture desktop)해서 rtmp송출 (0) | 2020.11.08 |
---|---|
[macos] ffmpeg으로 화면캡처(capture desktop)해서 rtmp송출 (0) | 2020.03.29 |
macOS ffmpeg 설치 (0) | 2020.01.27 |
ffplay 분석 (0) | 2019.07.24 |
FFmpeg Visual Studio 2019 컴파일-2 (동영상 플레이어, C++/MFC, C#/WPF) (4) | 2019.07.24 |