- WSL2 Ubuntu 환경에서 ffmpeg 를 사용할 일이 생김
- apt 저장소의 ffmpeg는 기본적으로 GPU가 아닌 CPU를 사용한다. (onyl WSL??)
- Nvidia 그래픽카드의 하드웨어 가속을 사용하려면 ffmpeg에 옵션을 추가해서 필요
- 아래 순서로 진행하니 큰 이슈 없이 완료되었음
wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/3bf863cc.pub
sudo add-apt-repository 'deb https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/ /'
sudo apt install cuda -y
sudo apt install nvidia-driver-525 nvidia-cuda-toolkit -y
내가 설치한 당시에는 525 버전이 최신이었다. 더 최신 버전이 apt 저장소에 있는지 찾아보자
wsl --shutdown
를 입력하면 WSL이 종료된다.sudo apt install build-essential yasm cmake libtool libc6 libc6-dev unzip wget libnuma1 libnuma-dev openssl libssl-dev libass-dev libfdk-aac-dev libmp3lame-dev libopus-dev libtheora-dev libvorbis-dev libvpx-dev libx264-dev libx265-dev -y
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git && cd nv-codec-headers && sudo make install
nvidia-driver-525
우분투 패키지를 설치한 경우nv-codec-header
의 버전을 하향설치 해야함n12.0.16.1
tag를 체크아웃하여 빌드하니 525 version 드라이버에서 ffmepg 정상 빌드됨
git clone https://git.ffmpeg.org/ffmpeg.git --depth=1 && cd ffmpeg
./configure \
--enable-nonfree \
--enable-cuda-nvcc \
--enable-libnpp \
--extra-cflags=-I/usr/local/cuda/include \
--extra-ldflags=-L/usr/local/cuda/lib64 \
--enable-openssl \
--enable-gpl \
--enable-libass \
--enable-libfdk-aac \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopus \
--enable-libtheora \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-libx265 \
--enable-nonfree \
--enable-libaom
sudo make install
# 재설치, 재컴파일 할 떄는 make clean, sudo make를 꼭 해주자
make install
이 완료되면 ffmpeg 디렉토리 하위에서 ffmpeg 바이너리 파일이 컴파일되었다.PATH
에 등록된 ffmpeg 말고) 컴파일된 ffmpeg을 실행시키고 아래 커맨드로 테스트할 수 있다.ffmpeg -y -hwaccel cuda -i input.file output.file
# ex) h264 코덱을 cuvid 로 디코딩하여, h265(hvec) nvenc 로 인코딩
ffmpeg -hwaccel cuda -c:v h264_cuvid -i input.mp4 -c:v hevc_nvenc -c:a copy -crf 28 output.mp4
nvidia-smi
커맨드를 사용하면 현재 그래픽 카드를 사용 현황을 확인할 수 있다.$ nvidia-smi
Sun Feb 19 19:53:48 2023
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.78.01 Driver Version: 528.49 CUDA Version: 12.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA GeForce ... On | 00000000:0A:00.0 On | N/A |
| 0% 43C P2 51W / 374W | 2375MiB / 16376MiB | 5% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 5287 G /ffmpeg N/A |
+-----------------------------------------------------------------------------+