ffmpeg硬件加速
一 ffmpeg硬件加速原理就是采用硬件GPU对编解码进行处理需依赖以下环境:1 安装nvidia驱动:NVIDIA-Linux-x86_64-470.57.02.run2 安装cuda:cuda_10.2.89_440.33.01_linux.run安装完成后修改profile,将cuda中的bin目录写到path中sudo vi /etc/profileexport PATH=/usr/loc
一 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
更多推荐
所有评论(0)