作为音视频领域具有决定话语权的FFmpeg,是国内各大厂商音视频处理的首选解决方案。本位以FFmpeg-3.4.2版本为例,介绍如何通过使用FFmpeg来进行基于GPU的转码, 进而对GPU硬件转码能力进行一个摸底,初步了解GPU并发转码的能力。
本文使用的GPU型号:NVIDIA GeForce RTX 3060 12G显存
测试视频:h264_aac_1080x1920_3000k_30fps_4gop_300s.flv
测试视频属性:h264-1080P-30fps
测试内容:测试RTX3060 在转码成H265/H264码流过程中的最大并发能力。
测试项1:转码产出H265, 1080P、30fps的目标视频
测试命令(硬解硬编):
ffmpeg -y -hide_banner -hwaccel cuvid -vcodec h264_cuvid -i "/home/Videos/h264_aac_1080x1920_3000k_30fps_4gop_300s.flv" -c:v $codec_name -preset medium -rc cbr -b:v 3000000 -ar 44100 -b:a 128K -c:a libfdk_aac -f flv "output_${codec_name}_$i.flv" 2>&1 &
并发1路转码时,GPU使用率:1%,平均转码158fps 如下图所示:
并发5路时,GPU使用率:2%, 平均转码31fps 如下图所示:
测试项2:转码产出H264, 1080P、30fps的目标视频
测试命令(硬编硬解):
ffmpeg -y -hide_banner -hwaccel cuvid -vcodec h264_cuvid -i "/home/Videos/h264_aac_1080x1920_3000k_30fps_4gop_300s.flv" -c:v h264_nvenc -preset medium -rc cbr -b:v 3000000 -ar 44100 -b:a 128K -c:a libfdk_aac -f flv "output_${codec_name}_$i.flv" 2>&1 &
并发1路转码时,GPU使用率:4%,平均转码465fps。
并发5路转码时,GPU使用率:7%,平均转码94fps。
2.3 并发10路转码时,GPU使用率:7%,平均转码46fps。
2.4 并发15路转码时,GPU使用率:7%,平均转码31fps。
结论:
RTX-3060显卡在转码能力方面, 差异较大;对于转出H265码流时,按照30fps的帧率,最大并发5路, 对于转出H264码流,按照30fps的帧率,最大可并发15路,具体如下:
- 针对H265转码(转出:H265 1080P、30fps), RTX3060 单卡拥有 158fps的并发转码能力, 支持 158 / 30 ≈ 5 路并发。
- 针对H264转码 (转出:H264 1080P、30fps), RTX3060单卡拥有 465fps的并发转码能力, 支持 465/30 ≈ 15路并发。
- 转码时,RTX3060卡是共享并发能力的,按照 158fps来说, 它可以支持多于5路的转码,但是帧率fps会相应的降低。比如:如果并发到10路的话, 158 / 10 ≈ 16 fps,最高能支持16fps;