ffmpeg으로 동영상을 송출하기에 이어서 NVIDIA 멀티 GPU를 이용하여 인코딩을 추가하여 고속으로 송출하는 방법을 알아보겠습니다.
https://yongeekd01.tistory.com/163
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의 상태와 인덱스 번호를 볼 수 있습니다.
'IT > 리눅스' 카테고리의 다른 글
nvidia GPU power limit 설정하기 (Unable to determine the device handle for GPU, Unknown Error) (0) | 2024.02.27 |
---|---|
cpu, ram 사용량 및 gpu, gpu ram 사용량 실시간 확인하기 (0) | 2024.02.26 |
다양한 포맷의 동영상 파일을 mpegts, udp multicast로 송출하기(mp4, mov, mpegts..) (0) | 2024.02.22 |
리눅스 파일의 상세정보 확인하기(file, stat 생성, 변경, 수정, 엑세스 정보) (0) | 2024.02.15 |
docker ifconfig 설치(net-tools) (0) | 2024.02.15 |