FFmpeg集成到GPU

GPU加速视频处理集成到最流行的开源多媒体工具中。

FFmpeg是最流行的开源多媒体操作工具之一,它有一个插件库,可以应用于音频和视频处理管道的各个部分,并在世界各地得到广泛采用。

视频编码、解码和转码是FFmpeg最流行的应用之一。由于FFmpeg和libav社区的支持以及NVIDIA工程师的贡献,这两个工具现在都支持本机NVIDIA GPU硬件加速的视频编码和解码,通过整合NVIDIA视频编解码器SDK。

利用FFmpeg的音频编解码器、流muxing和RTP协议,FFmpeg与NVIDIA视频编解码器SDK的集成实现了高性能硬件加速的视频管道。

FFmpeg uses Video Codec SDK

FFmpeg支持由NVIDIA GPU上的视频硬件加速的以下功能:

H.264和HEVC的硬件加速编码*

H.264、HEVC、VP9、VP8、MPEG2和MPEG4的硬件加速解码***

对编码设置(如编码预设、速率控制和其他视频质量参数)进行精确控制

使用FFmpeg中的内置过滤器创建高性能的端到端硬件加速视频处理、1:N编码和1:N转码管道

能够使用FFmpeg中的共享CUDA上下文实现添加自定义的高性能CUDA过滤器

Windows/Linux支持

*支持取决于硬件。有关支持的GPU和格式的完整列表,请参阅可用的GPU支持列表。

**在不久的将来,libav将增加对HW解码的支持。

What's New in FFmpeg

  • Includes Video Codec SDK 9.0 headers (both encode/decode)
  • 10-bit hwaccel accelerated pipeline
  • Support for fractional CQ
  • Support for Weighted Prediction
  • CUDA Scale filter (supports both 8 and 10 bit scaling).
  • Decode Capability Query

FFmpeg GPU HW-Acceleration Support Table

有关NVIDIA GPU加速视频编码/解码性能的指南,请访问视频编解码器SDK页面了解更多详细信息。

Getting Started with FFmpeg/libav using NVIDIA GPUs

Using NVIDIA hardware acceleration in FFmpeg/libav requires the following steps

  • Download and install ffnvcodec:

    git clone
    https://git.videolan.org/git/ffmpeg/nv-codec-headers.git


    cd nv-codec-headers && sudo make install
    && cd –
  • Download
    the latest FFmpeg or libav source code, by cloning the
    corresponding GIT repositories
  • Download
    and install the compatible driver from NVIDIA web site
  • Download
    and install the CUDA Toolkit CUDA toolkit
  • Use
    the following configure command (Use correct CUDA library path in config
    command below) 

    ./configure --enable-cuda-sdk --enable-cuvid
    --enable-nvenc --enable-nonfree --enable-libnpp 


    --extra-cflags=-I/usr/local/cuda/include
    --extra-ldflags=-L/usr/local/cuda/lib64
  • Use
    the following command to compile: make -j 10
  • Use
    FFmpeg/libav binary as required. To start with FFmpeg, try the below
    sample command line for 1:2 transcoding

    ffmpeg -y -hwaccel cuvid -c:v h264_cuvid -vsync 0 -i
    <input.mp4> -vf scale_npp=1920:1072


    -vcodec h264_nvenc <output0.264>
    -vf scale_npp=1280:720 -vcodec h264_nvenc <output1.264>

有关FFmpeg许可的详细信息,请参阅本页。有关构建过程和构建windows的更多信息,请参阅使用FFmpeg with NVIDIA
GPU硬件加速指南。

FFmpeg in Action

FFmpeg被许多项目使用,包括googlechrome和VLC播放器。通过配置FFmpeg将NVIDIA gpu用于视频编码和解码任务,您可以轻松地将NVIDIA硬件加速集成到这些应用程序中。

HandBrake是一个开源视频转码器,可用于Linux、Mac和Windows。

HandBrake使用最常见的视频文件和格式,包括由消费者和专业摄像机创建的视频文件和格式、手机和平板电脑等移动设备、游戏和电脑屏幕录制以及DVD和蓝光光盘。HandBrake利用Libav、x264和x265等工具从这些工具创建新的MP4或MKV视频文件。

Plex Media Server是一个客户端服务器媒体播放器系统和软件套件,运行在Windows、macOS、Linux、FreeBSD或NAS上。Plex从您计算机的个人媒体库中组织所有的视频、音乐和照片,并允许您流式传输到您的设备。

Plex转码器使用FFmpeg处理媒体并将其转换为客户端设备支持的格式。

How to use
FFmpeg/libav with NVIDIA GPU-acceleration

Decode a single H.264 to
YUV

To decode a single H.264 encoded elementary bitstream file into
YUV, use the following command:

FFMPEG: ffmpeg -vsync 0 -c:v h264_cuvid -i <input.mp4>
-f rawvideo <output.yuv>


LIBAV: avconv -vsync 0 -c:v h264_cuvid -i <input.mp4>
-f rawvideo <output.yuv>

Example applications:

  • Video
    analytics, video inferencing
  • Video
    post-processing
  • Video
    playback

Encode a single YUV file to a bitstream

To encode a single YUV file into an H.264/HEVC bitstream, use
the following command:

H.264

FFMPEG: ffmpeg -f rawvideo -s:v 1920x1080 -r 30 -pix_fmt
yuv420p -i <input.yuv> -c:v h264_nvenc -preset slow -cq 10 -bf 2 -g 150
<output.mp4>


LIBAV: avconv -f rawvideo -s:v 1920x1080 -r 30 -pix_fmt
yuv420p -i <input.yuv> -c:v h264_nvenc -preset slow -cq 10 -bf 2 -g 150
<output.mp4>

HEVC (No B-frames)

FFMPEG: ffmpeg -f rawvideo -s:v 1920x1080 -r 30 -pix_fmt
yuv420p -i <input.yuv> -vcodec hevc_nvenc -preset slow -cq 10 -g 150
<output.mp4>


LIBAV: avconv -f rawvideo -s:v 1920x1080 -r 30 -pix_fmt
yuv420p -i <input.yuv> -vcodec hevc_nvenc -preset slow -cq 10 -g 150
<output.mp4>

Example applications:

  • Surveillance
  • Archiving
    footages from remote cameras
  • Archiving
    raw captured video from a single camera

Transcode a single video file

To do 1:1 transcode, use the following command:

FFMPEG: ffmpeg -hwaccel cuvid -c:v h264_cuvid -i
<input.mp4> -vf scale_npp=1280:720 -c:v h264_nvenc <output.mp4>


LIBAV: avconv -hwaccel cuvid -c:v h264_cuvid -i
<input.mp4> -vf scale_npp=1280:720 -c:v h264_nvenc <output.mp4>

Example applications:

  • Accelerated
    transcoding of consumer videos

Transcode a single video file to N streams

To do 1:N transcode, use the following command:

FFMPEG: ffmpeg -hwaccel cuvid -c:v h264_cuvid -i
<input.mp4> -vf scale_npp=1280:720 -vcodec h264_nvenc <output0.mp4>
-vf scale_npp 640:480 -vcodec h264_nvenc <output1.mp4>


LIBAV: avconv -hwaccel cuvid -c:v h264_cuvid -i
<input.mp4> -vf scale_npp=1280:720 -vcodec h264_nvenc <output0.mp4>
-vf scale_npp 640:480 -vcodec h264_nvenc <output1.mp4>

Example applications:

  • Commercial
    (data center) video transcoding

FFmpeg集成到GPU的更多相关文章

  1. 为 Android 编译并集成 FFmpeg 的尝试与踩坑

    前言与环境说明 随着 FFmpeg.NDK 与 Android Studio 的不断迭代,本文可能也会像我参考过的过期文章一样失效(很遗憾),但希望本文中提到的问题排查以及步骤说明能够帮到你,如果发现 ...

  2. FFmpeg再学习 -- 硬件加速编解码

    为了搞硬件加速编解码,用了一周时间来看 CUDA,接下来开始加以总结. 一.什么是 CUDA (1)首先需要了解一下,什么是 CUDA. 参看:百度百科 -- CUDA 参看:CUDA基础介绍 参看: ...

  3. 【ARM-Linux开发】【CUDA开发】【视频开发】关于Linux下利用GPU对视频进行硬件加速转码的方案

    最近一直在研究Linux下利用GPU进行硬件加速转码的方案,折腾了很久,至今没有找到比较理想的硬加速转码方案.似乎网上讨论这一方案的文章也特别少,这个过程中也进行了各种尝试,遇到很多具体问题,以下便对 ...

  4. 【腾讯优测干货分享】安卓专项测试之GPU测试探索

    本文来自于Dev Club 开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57c7ffdc0569a1191bce8a63 作者:章未哲——腾讯SNG质 ...

  5. 被解放的GPU CSS3动画加速

    概念 图形处理器( Graphics Processing Unit ) 专门用来处理在个人电脑.工作站或游戏机上图像运算工作 显卡的“心脏” 90%以上的新型台式电脑和笔记本型电脑拥有集成图形处理器 ...

  6. FFmpeg在Android上的移植之第一步

    http://blog.sina.com.cn/s/blog_69a04cf40100x1fr.html 从事多媒体软件开发的人几乎没有不知道FFmpeg的,很多视频播放器都是基于FFmpeg开发的. ...

  7. linux 下ffmpeg和mencoder安装

    ffmpeg和mencoder是进行视频转换和视频抽帧的重要开源工具,支持linux和windows环境下的视频转换和视频抽帧操作.本文章记录在linux这两者工具的安装过程.ffmpeg集成视频编码 ...

  8. GPU的线程模型和内存模型

    遇见C++ AMP:在GPU上做并行计算 Written by Allen Lee I see all the young believers, your target audience. I see ...

  9. 视频流GPU解码在ffempg的实现(二)-GPU解码器

    1.gpu解码器的基本调用流程 要做视频流解码,必须要了解cuda自身的解码流,因为二者是一样的底层实现,不一样的上层调用 那cuda的解码流程是如何的呢 在https://developer.nvi ...

随机推荐

  1. hdu4450 不错的贪心

    题意: 卡片游戏 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total S ...

  2. WIN64内核编程-的基础知识

    WIN64内核编程基础班(作者:胡文亮)   https://www.dbgpro.com/x64driver 我们先从一份"简历"说起: 姓名:X86或80x86 性别:? 出生 ...

  3. Portswigger web security academy:Clickjacking (UI redressing)

    Portswigger web security academy:Clickjacking (UI redressing) 目录 Portswigger web security academy:Cl ...

  4. Docker搭建开发环境(Nginx+MySQL+PHP)

    注意事项 1.像MySQL配置文件.Nginx配置文件.网站根目录这种比较经常操作的需要先使用 docker cp 将文件从容器里复制到主机目录,docker run的时候直接挂载目录就可以了 2.d ...

  5. 异常检测算法Robust Random Cut Forest(RRCF)关键定理引理证明

    摘要:RRCF是亚马逊发表的一篇异常检测算法,是对周志华孤立森林的改进.但是相比孤立森林,具有更为扎实的理论基础.文章的理论论证相对较为晦涩,且没给出详细的证明过程.本文不对该算法进行详尽的描述,仅对 ...

  6. Codeforces Round #660 (Div. 2)

    A. Captain Flint and Crew Recruitment 题意:定义了一种数(接近质数),这种数可以写成p*q并且p和q都是素数,问n是否可以写成四个不同的数的和,并且保证至少三个数 ...

  7. C++ primer plus读书笔记——第11章 使用类

    第11章 使用类 1. 运算符重载是一种形式的C++多态. 2. 不要返回指向局部变量或临时对象的引用.函数执行完毕后,局部变量和临时对象将消失,引用将指向不存在的数据. 3. 运算符重载的格式如下: ...

  8. 【二】Kubernetes 集群部署-kubeadm方式(亲测)

    一.概述 本次部署 Kubernetes 集群是通过 kubeadm 工具来进行部署, kubeadm 是 Kubernetes 官⽅提供的⽤于快速部署 Kubernetes 集群的⼯具,利⽤其来部署 ...

  9. [DB] Spark Core (2)

    RDD WordCount处理流程 sc.textFile("/root/temp/data.txt").flatMap(_.split(" ")).map(( ...

  10. [bug] eclipse 点击new菜单后没有新建java project或class选项

    参考 https://blog.csdn.net/u013001763/article/details/54405758