提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
因为工作内容的需要,之前写过一篇文章关于ffmpeg支持英伟达的硬编解码,那个方法比较适合定制化的ffmpeg编译,如果你仅仅使用ffmpeg进行硬件编解码的话,其实不需要这么麻烦。
ffmpeg定制化编译支持cuda编解码
一、nvidia硬编解码是什么?
这个之前的文章已经说过,这里不再多做叙述。可以理解为一种专门的硬件,处理视频解码和编码。
二、使用步骤
首先你需要一张nvidia的卡,最好是GTX以上级别的,因为有些显卡没有硬件编解码器,比如GT920M这种早期笔记本显卡。
AV1在RTX30系列显卡上获得了硬件支持,因为手上没有30系显卡,所以今天只说H264和H265。
今天的比较简单,得益于ffmpeg-3.4
功能,让我们在不用编译的情况下就可以直接安装这个版本。
1.安装
确保你的分发版默认的ffmpeg版本支持3.4以上的版本,Ubuntu需要>=18.04
,Debian需要>=9
。其他的分发版请自行查看。
安装方法也比较简单,使用官方源安装即可。
Ubuntu&Debian:
sudo apt update
sudo apt install ffmpeg
2.确认
确认需要用到两个options
,一个是-decoders
,一个是-encoders
这里输出太长了,我只截取一部分。
1.硬件解码器
ffmpeg -decoders
V..... h264_cuvid Nvidia CUVID H264 decoder (codec h264)
VFS..D hap Vidvox Hap
VFS..D hevc HEVC (High Efficiency Video Coding)
V..... hevc_v4l2m2m V4L2 mem2mem HEVC decoder wrapper (codec hevc)
V..... hevc_cuvid Nvidia CUVID HEVC decoder (codec hevc)
V....D hnm4video HNM 4 video
V....D hq_hqa Canopus HQ/HQA
VFS..D hqx Canopus HQX
VF..BD huffyuv Huffyuv / HuffYUV
VF..BD hymt HuffYUV MT
V....D idcinvideo id Quake II CIN video (codec idcin)
V....D idf iCEDraw text
V....D iff IFF ACBM/ANIM/DEEP/ILBM/PBM/RGB8/RGBN (codec iff_ilbm)
V....D imm4 Infinity IMM4
V....D indeo2 Intel Indeo 2
V....D indeo3 Intel Indeo 3
V....D indeo4 Intel Indeo Video Interactive 4
V....D indeo5 Intel Indeo Video Interactive 5
V....D interplayvideo Interplay MVE video
VFS..D jpeg2000 JPEG 2000
VF...D libopenjpeg OpenJPEG JPEG 2000 (codec jpeg2000)
V....D jpegls JPEG-LS
V....D jv Bitmap Brothers JV video
V....D kgv1 Kega Game Video
V....D kmvc Karl Morton's video codec
VF...D lagarith Lagarith lossless
V....D loco LOCO
V....D lscr LEAD Screen Capture
V....D m101 Matrox Uncompressed SD
V....D eamad Electronic Arts Madcow Video (codec mad)
VFS..D magicyuv MagicYUV video
VF...D mdec Sony PlayStation MDEC (Motion DECoder)
VF...D mimic Mimic
V....D mjpeg MJPEG (Motion JPEG)
V..... mjpeg_cuvid Nvidia CUVID MJPEG decoder (codec mjpeg)
V....D mjpegb Apple MJPEG-B
V....D mmvideo American Laser Games MM Video
V....D motionpixels Motion Pixels video
V.S.BD mpeg1video MPEG-1 video
V..... mpeg1_v4l2m2m V4L2 mem2mem MPEG1 decoder wrapper (codec mpeg1video)
V..... mpeg1_cuvid Nvidia CUVID MPEG1VIDEO decoder (codec mpeg1video)
V.S.BD mpeg2video MPEG-2 video
V.S.BD mpegvideo MPEG-1 video (codec mpeg2video)
V..... mpeg2_v4l2m2m V4L2 mem2mem MPEG2 decoder wrapper (codec mpeg2video)
V..... mpeg2_cuvid Nvidia CUVID MPEG2VIDEO decoder (codec mpeg2video)
VF..BD mpeg4 MPEG-4 part 2
V..... mpeg4_v4l2m2m V4L2 mem2mem MPEG4 decoder wrapper (codec mpeg4)
V..... mpeg4_cuvid Nvidia CUVID MPEG4 decoder (codec mpeg4)
所有支持的解码器中后缀带_cuvid的都是英伟达的硬件解码格式,按照自己的需要选择。
2.硬件编码器
一般硬件差不多都是解码能力强过编码能力,英伟达也不例外,可能支持的编码格式没有解码那么多。
ffmpeg -encoders
V..... h264_nvenc NVIDIA NVENC H.264 encoder (codec h264)
V..... h264_omx OpenMAX IL H.264 video encoder (codec h264)
V..... h264_v4l2m2m V4L2 mem2mem H.264 encoder wrapper (codec h264)
V..... h264_vaapi H.264/AVC (VAAPI) (codec h264)
V..... nvenc NVIDIA NVENC H.264 encoder (codec h264)
V..... nvenc_h264 NVIDIA NVENC H.264 encoder (codec h264)
V..... hap Vidvox Hap
V..... libx265 libx265 H.265 / HEVC (codec hevc)
V..... nvenc_hevc NVIDIA NVENC hevc encoder (codec hevc)
V..... hevc_nvenc NVIDIA NVENC hevc encoder (codec hevc)
后缀或前缀带nvenc的都是硬件编码器,我的显卡只支持h264和hevc,也就是俗称的H264和H265,只是不同的组织叫法不一样。
3.测试
测试也很简单,只要使用h264解码+h265编码就行了,正常的话不会报错。
ffmpeg -rtsp_transport tcp -vcodec h264_cuvid -an -i <H264视频文件> -vcodec hevc_nvenc -an -t 100 -f mp4 -y output.mp4
特别说明:-an的意思是不要音频,因为只测试视频,要不然还要单独指定音频编码器
也可以用H265文件解码+H264文件编码,你需要把操作反过来。文章来源:https://www.toymoban.com/news/detail-613760.html
总结
1、同时需要ffmpeg和nvidia的支持,不同的版本可能效果不一样。
2、也有可能ffmpeg早期版本就已经支持nvidia了,只不过我用的最低Ubuntu版本是18.04,所以没法确认。文章来源地址https://www.toymoban.com/news/detail-613760.html
到了这里,关于ffmpeg最简单方式支持nvidia硬编解码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!