参考博客:
    1. 【ffmpeg入门】安装CUDA并使用gpu加速:https://blog.csdn.net/m0_62599305/article/details/140518620

首先在使用之前,你需要先检查下你的电脑是否支持 cuda 加速:
    输入 
ffmpeg -hwaccels
   输出如下信息表示支持 cuda 加速:
       
 Hardware acceleration methods:
        cuda
        dxva2
        qsv
        d3d11va
测试情况:
    1. 使用 GPU:        
ffmpeg -hwaccel_output_format cuda    -c:v h264_cuvid    -i fastX.mp4 -vf "scale=iw/2:-1" -b:v 500k  -c:v h264_nvenc fastX_small_0001_gpu.mp4
       
    2. 使用 CPU:        
ffmpeg 				  				  -c:v h264          -i fastX.mp4 -vf "scale=iw/2:-1" -b:v 500k  -c:v h264 		 fastX_small_0001_cpu.mp4
        

我的电脑环境情况:
    1. 显卡:NVIDIA GeForce RTX 4070 Ti
    2. cpu是 13th Gen Intel(R) Core(TM) i7-13700KF 3.40 GHz
    3. 内存32g
    4. gpu内存27.9g( 共享gpu内存15.9g,专用gpu内存 12g)
    5. cuda版本11.6
    6. ffmpeg版本:ffmpeg version 6.1.1-essentials_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developer
    7. fastX.mp4 的信息为:
        时长:02:20:50
        帧宽度:1920
        帧高度:1080
        数据速率:2997kbps
        总比特率:3377kbps
        帧速率:23.98 帧/秒

其他命令:
    1. 
ffmpeg -i input.mp4 -vf "scale=iw/2:-1" -b:v 1500k -c:v libx264 output.mp4
    2. 
ffmpeg -i fastX.mp4 -vf "scale=iw/2:-1" -b:v 500k -c:v libx264 fastX_small_0001.mp4

经测试发现gpu版本的 ffmpeg并为比cpu版本的 ffmpeg命令块多少,甚至更低,其实上述ffmpeg命令并未使用 cuda的全部能力,需要使用cuda的滤镜能力,完整的命令是:

ffmpeg -hwaccel cuda -hwaccel_output_format cuda -c:v h264_cuvid -i fastX.mp4 -vf "scale_npp=iw/2:-1" -c:v h264_nvenc -b:v 500k fastX_small_gpu.mp4

速度一下子干到了 30x,还有一个原因是视频的处理其实并不适合高并发提高性能,因为视频的存储并不是相当于n多张图片简单堆砌而成的,如果是这样的话,可以把视频比如切成10份,开10个线程分别处理每一份,速度很定杠杠的,但是不是这样的,如果视频是由图片简单度堆砌成的,虽然具有了前面的优点但是贼占空间,比如一个90分钟的电影就需要占几十甚至几百个G。你稍微知道一些关键帧,i帧,b帧什么的。就知道,视频需要顺序解析(可能说错了,反正是这个意思),所以后面的图片需要前面图片的结果才能推出其结果,比如第i帧图片和第i+1帧图片有很少的差异,所以第i+1帧存储的并不是完整的图片,而是其和第i帧图片的差异,所以很省空间,但是也意味着必须顺序执行,发挥不了高并发的优势

Logo

音视频技术社区,一个全球开发者共同探讨、分享、学习音视频技术的平台,加入我们,与全球开发者一起创造更加优秀的音视频产品!

更多推荐