ffmpeg最简单方式支持nvidia硬编解码

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、nvidia硬编解码是什么?
  • 二、使用步骤
    • 1.安装
    • 2.确认
      • 1.硬件解码器
      • 2.硬件编码器
    • 3.测试
  • 总结


前言

因为工作内容的需要,之前写过一篇文章关于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 -decodersV..... h264_cuvid           Nvidia CUVID H264 decoder (codec h264)VFS..D hap                  Vidvox HapVFS..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 videoV....D hq_hqa               Canopus HQ/HQAVFS..D hqx                  Canopus HQXVF..BD huffyuv              Huffyuv / HuffYUVVF..BD hymt                 HuffYUV MTV....D idcinvideo           id Quake II CIN video (codec idcin)V....D idf                  iCEDraw textV....D iff                  IFF ACBM/ANIM/DEEP/ILBM/PBM/RGB8/RGBN (codec iff_ilbm)V....D imm4                 Infinity IMM4V....D indeo2               Intel Indeo 2V....D indeo3               Intel Indeo 3V....D indeo4               Intel Indeo Video Interactive 4V....D indeo5               Intel Indeo Video Interactive 5V....D interplayvideo       Interplay MVE videoVFS..D jpeg2000             JPEG 2000VF...D libopenjpeg          OpenJPEG JPEG 2000 (codec jpeg2000)V....D jpegls               JPEG-LSV....D jv                   Bitmap Brothers JV videoV....D kgv1                 Kega Game VideoV....D kmvc                 Karl Morton's video codecVF...D lagarith             Lagarith losslessV....D loco                 LOCOV....D lscr                 LEAD Screen CaptureV....D m101                 Matrox Uncompressed SDV....D eamad                Electronic Arts Madcow Video (codec mad)VFS..D magicyuv             MagicYUV videoVF...D mdec                 Sony PlayStation MDEC (Motion DECoder)VF...D mimic                MimicV....D mjpeg                MJPEG (Motion JPEG)V..... mjpeg_cuvid          Nvidia CUVID MJPEG decoder (codec mjpeg)V....D mjpegb               Apple MJPEG-BV....D mmvideo              American Laser Games MM VideoV....D motionpixels         Motion Pixels videoV.S.BD mpeg1video           MPEG-1 videoV..... mpeg1_v4l2m2m        V4L2 mem2mem MPEG1 decoder wrapper (codec mpeg1video)V..... mpeg1_cuvid          Nvidia CUVID MPEG1VIDEO decoder (codec mpeg1video)V.S.BD mpeg2video           MPEG-2 videoV.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 2V..... mpeg4_v4l2m2m        V4L2 mem2mem MPEG4 decoder wrapper (codec mpeg4)V..... mpeg4_cuvid          Nvidia CUVID MPEG4 decoder (codec mpeg4)

所有支持的解码器中后缀带_cuvid的都是英伟达的硬件解码格式,按照自己的需要选择。

2.硬件编码器

一般硬件差不多都是解码能力强过编码能力,英伟达也不例外,可能支持的编码格式没有解码那么多。

ffmpeg -encodersV..... 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 HapV..... 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文件编码,你需要把操作反过来。


总结

1、同时需要ffmpeg和nvidia的支持,不同的版本可能效果不一样。
2、也有可能ffmpeg早期版本就已经支持nvidia了,只不过我用的最低Ubuntu版本是18.04,所以没法确认。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/12205.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用SVM模型完成分类任务

SVM&#xff0c;即支持向量机&#xff08;Support Vector Machine&#xff09;&#xff0c;是一种常见的机器学习算法&#xff0c;用于分类和回归分析。SVM的基本思想是将数据集映射到高维空间中&#xff0c;在该空间中找到一个最优的超平面&#xff0c;将不同类别的数据点分开…

Jsp+Ssh+Mysql实现的简单的企业物资信息管理系统项目源码附带视频指导运行教程

由jspssh&#xff08;springstruts2mysql&#xff09;实现的企业物资信息管理系统&#xff0c;系统功能比较简单&#xff0c;实现了基本的管理员、操作员等用户管理、物品分类管理、物品管理、入库管理、出库管理、库存预警、客户管理、供应商管理等基本功能需要的可以联系我分…

接口参数设计原则

1. 不能太动态. 不相信客户端的原则 例如传递 filterFields , 推送一个表的某些字段给上游. 2. 可以服务端提供一些封装. 这个封装可以是写死的组合, 也可以是后端配置的. 最好的是 代码里的领域类bean 1,1对应一个名称. 可以是 classReference. 运营态有很多字段是给用户看的…

SpringMVC路径匹配

SpringMVC路径匹配 SpringMVC支持Ant风格的路径 Ant是Apache下的一个构建(编译、测试、部署等)工具。即Ant风格源于Ant这个构建工具。 关于如何配置SpringMVC的各种配置文件和其中的注解使用可以参考 种类 1、?&#xff1a;表示任意的单个字符 controller RequestMapping…

[JavaWeb]SQL介绍-DDL语句

SQL介绍-DDL语句 一.SQL简介1.简介2.SQL通用语法3.SQL语言的分类 二.DDL-操作数据库与表1.DDL操作数据库2.DDL操作表①.查询表(Retrieve)②.创建表(Create)③.修改表(Update)④.删除表(Delete) 一.SQL简介 1.简介 SQL: Structured Query Language–结构化查询语言用来操作关系…

prometheus和cAdvisor组合

文章目录 docker内部署PromethuesPrometheuscAdvisorPrometheus和cAdvisor关系配置 docker内部署Promethues Prometheus Prometheus是一个开源的系统监控和报警工具&#xff0c;由SoundCloud开发并在2012年捐赠给了Cloud Native Computing Foundation (CNCF)。它被广泛用于监…

打卡一个力扣题目

目录 一、问题 二、解题办法一 三、解题方法二 四、对比分析 关于 ARTS 的释义 —— 每周完成一个 ARTS&#xff1a; ● Algorithm: 每周至少做一个 LeetCode 的算法题 ● Review: 阅读并点评至少一篇英文技术文章 ● Tips: 学习至少一个技术技巧 ● Share: 分享一篇有观点…

视频转化为图片或灰度视频

1.视频转化为图片 import cv2video_pathr"D:\Dataset\video/7.mp4" capturecv2.VideoCapture(video_path) # print(capture.get(5))if capture.isOpened():ret,imgcapture.read()index0while ret:if index%200:imgidr"D:\Dataset\image/6/""%07d&quo…

dataTable转成对象、json、list

datatable转换成list集合 public static T TableToEntity<T>(DataTable dt, int rowindex 0, bool isStoreDB true){Type type typeof(T);T entity Activator.CreateInstance<T>();if (dt null){return entity;}DataRow row dt.Rows[rowindex];PropertyInfo…

List中交集的使用

前言 新增了一个需求&#xff0c;需要将所有药品和对应数量库存的药房查询出来&#xff0c;要求&#xff1a;‘所有药品该药房都要有&#xff0c;并且库存大于购药数量’&#xff1b; 这就得考虑一个问题&#xff0c;有的药房有该药品&#xff0c;有的药房没有该药品&#xf…

前端常用的条件限制方法小笔记

手机号的正则表达式(以1开头的11位数字) function checkPhone(){ var phone document.getElementById(phone).value;if(!(/^1[3456789]\d{9}$/.test(phone))){ alert("手机号码有误&#xff0c;请重填"); return false; } }限制输入大于0且最小值要小于最大值 c…

php项目内存飚高处理与优化

公司服务器最近内存占用超过阈值一直报警 经过排查,内存占用很多&#xff0c;剩余很少 free -m 排查代码无太多冗余和缓存 最后和运维一起排查&#xff0c;发现宝塔安装后带的gitlab的进程很吃内存&#xff0c;赶紧停用&#xff0c;并卸载无用的软件 最后内存降下来了

16.Netty源码之ChannelPipeline

highlight: arduino-light 服务编排层:ChannelPipeline协调ChannelHandlerHandler EventLoop可以说是 Netty 的调度中心&#xff0c;负责监听多种事件类型&#xff1a;I/O 事件、信号事件、定时事件等&#xff0c;然而实际的业务处理逻辑则是由 ChannelPipeline 中所定义的 Cha…

Vue-Router基本使用

1 安装&#xff1a; vue2项目要安装vue-router3版本 npm i vue-router3 2 src下创建router目录&#xff0c;router文件夹下创建index.js 在vue.config.js中 配置src路径别名 3 在main.js中引入 4 在app.vue中配置 5 即可看到内容

Elasticsearch 常用 HTTP 接口

本文记录工作中常用的关于 Elasticsearch 的 HTTP 接口&#xff0c;以作备用&#xff0c;读者也可以参考&#xff0c;会持续补充更新。开发环境基于 Elasticsearch v5.6.8、v1.7.5、v2.x。 集群状态 集群信息 1 2 3 4 5 6 7http://localhost:9200/_cluster/stats?pretty http…

okhttp原理分析

工程目录图 请点击下面工程名称&#xff0c;跳转到代码的仓库页面&#xff0c;将工程 下载下来 Demo Code 里有详细的注释 01okhttp module里 包含的设计模式&#xff1a;建造者设计模式、责任链设计模式 CustomInject 演示自定义注解 代码&#xff1a;okhttp原理分析、Andro…

掌握Python的X篇_13_Python条件语句实例:判断闰年、成绩评定

前面学习了条件语句以及调试的基本技巧&#xff0c;本篇介绍两个与条件语句有关的实例&#xff0c;对前面的知识又深刻认识。 文章目录 1. 判断闰年1.1 版本11.2 版本21.3 一行代码太长的处理方法 2. 根据成绩评级 1. 判断闰年 用户输入年份&#xff0c;判断该年份是否为闰年…

Perl:命令行参数的处理

相关阅读 Perl&#xff1a;正则表达式 Perl&#xff1a;什么是其特有的autovivafacation性质&#xff1f; Perl&#xff1a;匿名数组嵌套的解引用相关问题 命令行参数是shell和perl交互的一个重要媒介&#xff0c;本文介绍了如何在Perl中对命令行参数进行处理。 首先我们给出…

esp32_arduino的开发库安装笔记

1.1 Arduino软件下载与安装 Arduino官网下载地址&#xff1a;https://www.arduino.cc/en/software。 1.2在线安装 选择文件 - 首选项。 在附加开发板管理器网址中添加以下链接中的一个。 (1)Stable release link: https://raw.githubusercontent.com/espressif/arduino-es…

【Linux后端服务器开发】MAC地址与其他重要协议

目录 一、以太网 二、MAC地址 三、MTU 四、ARP协议 五、DNS系统 六、ICMP协议 七、NAT技术 八、代理服务器 一、以太网 “以太网”不是一种具体的网路&#xff0c;而是一种技术标准&#xff1a;既包含了数据链路层的内容&#xff0c;也包含了一些物理层的内容&#xf…