ffmpeg硬件加速

一 ffmpeg硬件加速原理就是采用硬件GPU对编解码进行处理

hwaccel,cuvid,h264_cuvid,h264_nvenc

需依赖以下环境:

1 安装nvidia驱动:NVIDIA-Linux-x86_64-470.57.02.run

2 安装cuda:cuda_10.2.89_440.33.01_linux.run

安装完成后修改profile,将cuda中的bin目录写到path中

sudo vi /etc/profile

export PATH=/usr/local/cuda/bin:$PATH

nvcc -V 验证是否安装成功

3 编译ffmpeg

由于使用到了硬件加速,那么在配置configure中也需要将其加入进来

./configure --prefix=/usr/local/ffmpeg --enable-gpl --enable-nonfree --enable-pthreads --extra-cflags=-g --extra-cflags=-O0 --extra-libs=-lstdc++ --extra-cxxflags=-g --extra-cxxflags=-O0 --extra-cxxflags=-fpermissive --enable-debug=3 --disable-optimizations --disable-stripping --disable-x86asm --enable-cuda-nvcc --enable-cuvid --enable-shared --enable-nvenc --enable-shared
 

./ffmpeg -hwaccels 查看可以使用的hwaccels

二 命令详解

cpu解码:

./ffmpeg -i aa.mp4 output2.yuv -y

gpu解码:

./ffmpeg -c:v h264_cuvid -i aa.mp4 -c:v h264_nvenc output.yuv -y

cpu转码缩放:

./ffmpeg -i a.mp4 -vf scale=1280:720 2.mp4 -y

gpu转码缩放:

./ffmpeg -c:v h264_cuvid -i a.mp4 -c:a copy -vf "format=yuv420p,hwupload_cuda,scale_cuda=1280:720" -c:v h264_nvenc -b:v 5M 2.mp4 -y

gpu转码不缩放:

./ffmpeg -c:v h264_cuvid -i a.mp4 -c:a copy -vf "format=yuv420p,hwupload_cuda" -c:v h264_nvenc 2.mp4 -y

转为720p样例

ffmpeg -hwaccel cuvid -c:v hevc_cuvid -i input.mkv -c:a copy -vf scale_npp=1280:720 -c:v hevc_nvenc -b:v 5M output.mkv

-hwaccel cuvid 告诉ffmpeg使用cuvid加速,并且把视频的数据保留在显存而不是内存上
hevc_cuvid进行解码

scale_npp进行视频缩放,由于版权问题ffmpeg不自带scale_npp滤镜,需要自己编译。

注意:scale_npp滤镜无法处理10bit,此命令可能会失败

hevc_nvenc进行编码

ffmpeg -c:v hevc_cuvid -i input.mkv -c:a copy -vf "format=yuv420p,hwupload_cuda,scale_npp=1280:720" -c:v hevc_nvenc -b:v 5M output.mkv

因为scale_npp滤镜无法处理10bit,所以采用format滤镜把它转成8bit,将yuv420p10le转为yuv420p。

由于format是软件滤镜,因此取消-hwaccel cuvid 。这样解码的视频会自动转存到内存。

format处理好的内容使用hwupload_cuda上传到GPU,
//hwdownload  顾名思义,与hwupload相反,GPU下载到CPU

然后通过scale_npp缩放,

之后通过hevc_nvenc编码。

ffmpeg -hwaccel cuvid -c:v hevc_cuvid -i input.mkv -c:a copy -vf scale_cuda=1280:720 -c:v hevc_nvenc -b:v 5M output.mkv

scale_cuda支持10bit输入



ffmpeg -hwaccel cuvid -hwaccel_output_format cuda  -c:v hevc_cuvid -resize 1280x720 -i input.mkv -c:a copy -vf "hwdownload,format=p010le" -c:v hevc_nvenc  -pix_fmt yuv420p  -b:v 5M output.mkv

//resize比scale_cuda性能更好

固定码率
ffmpeg -hwaccel cuvid -c:v hevc_cuvid -resize 1280x720  -i input.mkv -c:a copy  -vf "hwdownload,format=p010le"  -c:v hevc_nvenc -pix_fmt yuv420p -rc:v vbr -cq:v 20 -qmin 20 -qmax 20 output.mkv

hevc_nvenc没有crf参数,可以通过将-rc:v 设置为vbr或者vbr_hq,从而启用VBR模式,
然后设置-cq:v、-qmin、-qmax

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

步基

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值