ffmpeg 命令行,可指定GPU运算:ffmpeg -hwaccel_output_format cuda -vcodec h264_cuvid -i input.mp4 -vcodec h264_nvenc -gpu 0 -acodec copy -f mp4 -y output.mp4

ffmpeg SDK调用:

av_find_encoder_by_name(“h264_nvenc”);
av_find_encoder_by_name(“hevc_nvenc”);

nvenc.c

av_cold int ff_nvenc_encode_init(AVCodecContext *avctx)

static av_cold int nvenc_setup_device(AVCodecContext *avctx)

static av_cold int nvenc_check_device(AVCodecContext *avctx, int idx)

static av_cold int nvenc_open_session(AVCodecContext *avctx){NV_ENC_OPEN_ENCODE_SESSION_EX_PARAMS params = { 0 };NvencContext *ctx = avctx->priv_data;NV_ENCODE_API_FUNCTION_LIST *p_nvenc = &ctx->nvenc_dload_funcs.nvenc_funcs;NVENCSTATUS ret;params.version    = NV_ENC_OPEN_ENCODE_SESSION_EX_PARAMS_VER;params.apiVersion = NVENCAPI_VERSION;if (ctx->d3d11_device) {params.device     = ctx->d3d11_device;params.deviceType = NV_ENC_DEVICE_TYPE_DIRECTX;} else {params.device     = ctx->cu_context;params.deviceType = NV_ENC_DEVICE_TYPE_CUDA;}ret = p_nvenc->nvEncOpenEncodeSessionEx(&params, &ctx->nvencoder);if (ret != NV_ENC_SUCCESS) {ctx->nvencoder = NULL;return nvenc_print_error(avctx, ret, "OpenEncodeSessionEx failed");}return 0;}

通过配置AVCodecContext 指定gpu:

av_opt_set_int(g_pVideoCodecCtx->priv_data, "gpu", g_sParam.iGpuID, 0); //指定GPU

参考:https://stackoverflow.com/questions/16435514/how-to-set-x264-encode-parameters-through-ffmpeg-avcodeccontext

Try calling av_opt_set with the codec context priv_data structure:

AVCodec *codec = avcodec_find_encoder(AV_CODEC_ID_H264);
AVCodecContext *codecContex = avcodec_alloc_context3(codec);
av_opt_set(codecContex->priv_data, "preset", "ultrafast", 0);
av_opt_set(codecContex->priv_data, "tune", "zerolatency", 0);

Nvidia nvenc cuvid + ffmpeg 硬编解码相关推荐

  1. ffmpeg硬编解码 Inter QSV

    另一篇:ffmpeg硬件编解码Nvidia GPU 硬编解码除了使用Nvidia的GPU之外,Inter的QSV也是一种不错的方案,跟Nvidia不同的是,如果希望使用ffmepg的Inter QSV ...

  2. 基于NVIDIA显卡的硬编解码的一点心得

    前提:小编只是个研究了2个月的NVIDIA硬编解码new guy, 有些写的不明白的地方可以相互交流. 目前因为项目需要,要对硬编解码的实时编码能力做个初步的调研test report. 下面我说下从 ...

  3. android ndk之opencv+MediaCodec硬编解码来处理视频动态时间水印

    android ndk之opencv+MediaCodec硬编解码来处理视频水印学习笔记 android视频处理学习笔记.以前android增加时间水印的需求,希望多了解视频编解码,直播,特效这一块, ...

  4. iOS硬编解码相关知识

    1.软编与硬编概念 1.1 软编码:使用CPU进行编码. 实现直接.简单,参数调整方便,升级易,但CPU负载重,性能较硬编码低,低码率下质量通常比硬编码要好一点. 1.2 硬编码:不使用CPU进行编码 ...

  5. ffmpeg H264 编解码配置

    ffmpeg H264编解码前面有文章介绍下,本文主要介绍一些参数配置. 编码: int InitEncoderCodec( int iWidth, int iHeight) {AVCodec * p ...

  6. 基于iOS/Mac平台实现H.265硬编解码

    本文我们会着重介绍如何在iOS/Mac上使用系统API进行H.265硬编硬解功能,读者需要有使用VideoToolBox进行硬编/解码的相关经验. 一般提到H.265,都难免要和H.264对比一番,以 ...

  7. Android硬编解码接口MediaCodec使用完全解析(一)

    使用异步读取编码(解码)后的数据,效率会大增. 可以直接起一个线程不断地读. ------------------------------------------------------------- ...

  8. ffmpeg常用编解码命令

    ffmpeg常用编解码命令 1 ffplay.exe (1) 播放MP4文件,指定标题以及播放分辨率 ffplay.exe -window_title "视频监控" -x 720 ...

  9. webrtc M66 华为手机h264硬编解码不支持问题

    webrtc M66 华为手机h264硬编解码不支持问题 最近使用webrtc的h264编码时,测试发现华为都不支持,而其他手机可以,通过阅读webrtc的代码发现如下问题 webrtc 会先检测手机 ...

最新文章

  1. 创建零填充JavaScript数组的最有效方法?
  2. 多语种下的卡萨帝故事
  3. 2016 博客导读总结 amp; 个人感悟
  4. 微软2013年笔试题详解及深入
  5. springboot1.5 和 2.0 引入 redis 并封装工具类
  6. T61|NV显卡门|根据售后维修部数据显示爆发期来临|预防显卡门|解决显卡门
  7. brew 安装pip_pip brew wget 安装
  8. 角度和弧度之间的转换
  9. window下postgresql启动服务失败 Access is denied
  10. Python | Web Crawler
  11. 20位大厂面试官推荐的Java面试八股文
  12. 三阶齐次线性方程求通解_三阶常系数齐次线性差分方程解的分类
  13. 西湖论剑——指鹿为马
  14. 动态主机配置协议(DHCP)
  15. 汇编———标志(flag)寄存器
  16. 进程管理 进程的调度
  17. RISC-V Linux 启动流程分析
  18. mysql 官网下载太慢了,来这里!!!
  19. Informatica PowerCenter 简介(三)
  20. Centos 7 ngrok服务器搭建

热门文章

  1. 智能语音助手调研【简单可行方案及开源代码】
  2. 百度地图 JS API Marker自定义图标
  3. java linux常用命令_Linux常用命令
  4. GPRS模块的TCP发送数据流程
  5. 用opencv实现两张半透明png图片以一定透明度叠加
  6. idea复制项目导致sources root复用了另一个项目
  7. 非本小伙花了两年从小公司到蚂蚁金服,面试经验分享
  8. 【网络】inux流量控制器TC(Traffic Control)
  9. 使用SpringBoot中出现Whitelabel Error Page 404 错误的几种原因
  10. 《52讲轻松搞定网络爬虫》读书笔记 - HTTP基本原理