본문 바로가기

IT/리눅스

ffmpeg으로 nvidia gpu로 영상 인코딩 하면서 multicast 송출하기(멀티 GPU사용, hwaccel, cuda)

반응형

 

ffmpeg으로 동영상을 송출하기에 이어서 NVIDIA 멀티 GPU를 이용하여 인코딩을 추가하여 고속으로 송출하는 방법을 알아보겠습니다. 

 

https://yongeekd01.tistory.com/163

 

다양한 포맷의 동영상 파일을 mpegts, udp multicast로 송출하기(mp4, mov, mpegts..)

멀티캐스트로 동영상 파일을 송출할 수 있는 프로그램에는 여러 가지가 있습니다. 이러한 프로그램은 대체로 네트워크를 통해 비디오 콘텐츠를 여러 수신자에게 동시에 전송하는 데 사용됩니

yongeekd01.tistory.com

 

 

1. FFmpeg를 사용하여 비디오 크기 변경해서 인코딩 하면서 송출

 

먼저 인코딩 옵션을 추가하여 비디오 크기 변경해서 인코딩 하면서 송출 하는 방법을 보겠습니다.

 

ffmpeg -stream_loop -1 -re -i "inputfile.ts" -vf "scale=640:360" -c:v libx264 -preset ultrafast -c:a copy -f mpegts udp://239.0.0.1:1234?pkt_size=1316

 

-stream_loop -1: 입력 파일을 무한 반복
-re: 입력 파일을 실시간으로 ("real time") 처리
-i input.mp4: 입력 파일을 지정
-vf "scale=640:360": 비디오 필터로 해상도를 640x360으로 조정
-c:v libx264: 비디오 코덱으로 H.264를 사용
-preset ultrafast: 인코딩을 위한 프리셋으로, 'ultrafast'는 속도를 우선 설정 (superfast, veryfast, faster, fast, medium, slow, slower, veryslow)
udp://239.0.0.1:1234?pkt_size=1316: 멀티캐스트 주소와 포트를 지정. 패킷 크기를 1316으로 설정

 

2. FFmpeg를 사용하여 비디오 크기 변경해서 인코딩 하면서 송출

 

이제 HW 인코딩을 추가해 보겠습니다. 

 

ffmpeg -stream_loop -1 -re -hwaccel cuda -i "inputfile.ts" -vf "scale=640:360" -c:v h264_nvenc -preset fast -c:a copy -f mpegts udp://239.0.0.1:1234?pkt_size=1316

 

-hwaccel cuda: 하드웨어 가속을 위해 CUDA를 사용
-c:v h264_nvenc: 비디오 코덱으로 NVIDIA의 NVENC를 사용하여 H.264 인코딩을 수행
-preset fast: 인코딩 프리셋으로 fast를 사용

이렇게 해서 NVIDIA GPU를 사용하여 입력 비디오 파일을 디코딩하고, NVENC를 사용하여 H.264로 인코딩합니다. 이 과정은 비디오 트랜스코딩에 하드웨어 가속을 적용하여 처리 속도를 빠르게 하고, CPU 부하를 줄이는 데 도움이 됩니다.

 

 

3. 멀티 GPU가 있을때 FFmpeg이 사용할 디바이스를 지정해서 인코딩하기 

 

NVIDIA GPU가 여러 개 있는 시스템에서 특정 GPU를 선택하여 FFmpeg로 비디오 디코딩 또는 인코딩을 수행하려면, -hwaccel_device 옵션을 사용하여 대상 GPU를 지정할 수 있습니다. 이 옵션은 -hwaccel 옵션과 함께 사용되어, 하드웨어 가속을 수행할 구체적인 장치를 FFmpeg에 알려줍니다.

 

ffmpeg -stream_loop -1 -re -hwaccel cuda  -hwaccel_device 0 -i "inputfile.ts" -vf "scale=640:360" -c:v h264_nvenc -preset fast -c:a copy -f mpegts udp://239.0.0.1:1234?pkt_size=1316

 

-hwaccel_device 0: 하드웨어 가속에 사용할 GPU 장치를 지정합니다. 여기서 0은 시스템에서 첫 번째 GPU를 의미합니다. 여러 GPU가 있는 경우, 사용하고자 하는 GPU의 인덱스 번호(예: 1, 2, ...)로 변경합니다.

 

GPU 인덱스 번호는 시스템에 설치된 GPU의 순서에 따라 결정됩니다. 사용 가능한 GPU 목록과 각 GPU에 할당된 인덱스 번호를 확인하려면 NVIDIA의 nvidia-smi 유틸리티를 사용할 수 있습니다. 이 명령을 실행하면 현재 시스템에 설치된 NVIDIA GPU의 상태와 인덱스 번호를 볼 수 있습니다.

 

 

 

 

 

반응형