Video Codec/Image使用指南 (v1.4.1)

更新时间:
复制为 MD 格式

1. 综述

PPU可兼容支持NVidia提供的相关视频图像编解码和前后处理的硬件加速库。主要包括:

  • Video Codec SDK:提供cuvid decodenv encode硬件加速支持,目前版本12.2。

  • nvJPEG:提供JPEG decodeJPEG encode硬件加速支持,目前版本12.3。

  • npp:提供2D图像后处理的硬件加速支持,目前版本11.6。

2. 应用生态

如下应用或框架可以比较容易地使用硬件加速能力。

除了以上比较流行的大型框架之外,如果想要直接使用Codec/Jpeg的相关接口,也可以使用:

3. 编译运行

Video Codec SDK

PPU Video Codec兼容Nvidia Video Codec SDK,NV官网:https://developer.nvidia.com/nvidia-video-codec-sdk/download

建议下载跟PPU SDKcuda兼容版本对应的Video Codec SDK版本,已知版本对应关系如下:

image

编译前准备

  • 因为PPU不支持OpenGLVulkan,所以编译前需要修改Samples/CMakeLists.txt文件,去掉不支持的工程,建议只保留编解码常用的一些工程:

    # 保留如下,其他都注释掉
    add_subdirectory(AppEncode/AppEncCuda)
    add_subdirectory(AppEncode/AppEncPerf)
    add_subdirectory(AppEncode/AppEncMultiInstance)
    
    add_subdirectory(AppEncode/AppEncDec)
    add_subdirectory(AppTranscode/AppTrans)
    add_subdirectory(AppTranscode/AppTransPerf)
    
    add_subdirectory(AppDecode/AppDec)
    add_subdirectory(AppDecode/AppDecMultiFiles)
    add_subdirectory(AppDecode/AppDecPerf)
  • VideoCodecSDK依赖于ffmpeg提供demux能力,所以需要预先安装ffmpeg,虽然它只是需要demux能力,不一定非要安装支持硬件加速的ffmpeg(可参考 《Video FFMPEG使用指南》),但为了避免混淆,建议还是统一编译安装支持硬件加速的ffmpeg。

    假设ffmpeg安装目录为FFMPEG_PATH,执行pkg-config --modversion libavcodec可以显示版本号;如果不显示,可以尝试先 export PKG_CONFIG_PATH=$FFMPEG_PATH/lib/pkgconfig:$PKG_CONFIG_PATH,然后再尝试执行pkg-config指令。

    说明

    如果编译时不指定,默认为/usr/local目录,否则为指定目录,ffmpeglib、include、bin内容会被拷贝到$FFMPEG_PATH/include$FFMPEG_PATH/lib$FFMPEG_PATH/bin

  • 指定CUDA_PATH

    export CMAKE_LIBRARY_PATH=${CUDA_HOME}/lib64

    这里CUDA_HOME指向PPU SDK目录下的CUDA_SDK。

  • 如果下载的Video Codec SDK版本和PPU SDK声明兼容的CUDA版本不一致,编译可能出错,此时可以执行如下命令:

    cp Interface/* ${CUDA_HOME}/include

    这里的Interface指下载的Video Codec SDK下的Interface目录。

编译

cd Samples  # Sample folder of the video-codec-sdk download path
mkdir build
cd build
cmake ..
make

运行

# 解码,同时运行12个线程可以打满性能
./AppDecode/AppDecPerf/AppDecPerf -thread 12 -i test_1920x1080_yuv420p_50fps_h264.mp4

# 编码,同时运行4个线程可以打满性能
./AppEncode/AppEncPerf/AppEncPerf -i crowd_run_1920x1088_nv12_8bit_50.0fps_n500.yuv -s 1920x1088 -if nv12 -fps 30  -preset p4 -gop 60 -rc cbr -bitrate 10000000 -codec h265 -thread 4
说明

PPU12video decode core,理论上12个线程可以达到最佳性能,继续增加线程可能会稍微提升性能,但不会有较大提升。7个以内的PPU进程可以达到理想性能,使用PPU的进程数量超过7个时,性能不会再提升。PPU4video encode core,所以理论上4个线程可以达到最佳性能。

nvJpeg:

PPU SDK完整兼容nvJPEG,可以直接通过nvJPEG sample来测试jpeg。nvJpeg官网:https://developer.nvidia.com/nvjpeg

nvJpeg samples: https://github.com/NVIDIA/CUDALibrarySamples/tree/master/nvJPEG/

编译:

(解码在nvJPEG-Decoder目录,编码在nvJPEG-Encoder目录)

$ mkdir build
$ cd build
$ cmake ..
$ make

运行:

# 解码,假设jpeg图片集在1080P目录下,batch size是128
./nvjpegDecoder -i 1080p/ -b 128

# 编码(sample实际是先解码再编码)
./nvJPEG_encoder -i input.jpg  -o output.jpg

说明:

PPU4个 jpeg encode core,所以理论上4个线程可以达到最佳性能;有8jpeg decode core,batch模式会自动内部enable 8个线程以达到最佳性能。

4. 详细规格

Video Decode

  • Support cuvid decoder。

  • Codecs:

    • HEVC (H.265) - ITU-T Rec. H.265 (04/2013), ISO/IEC 23008-2

      • Main Profile, Level 5.1, High Tier

      • Main10 Profile, Level 5.1, High Tier

      • Main Still Profile

    • VP9 - vp9-bitstream-specification-v0.6-20160331-draft

      • Profile 0, 8-bit

      • Profile 2, 10-bit

    • AVC (H.264) - ITU-T Rec. H.264 (03/2010) / ISO/IEC 14496-10

      • Main Profile, levels 1 - 5.2

      • High Profile, levels 1 - 5.2

      • High 10 Profile, levels 1 - 5.2

      • Baseline Profile, levels 1 - 5.2

    • AV1 Bitstream & Decoding Process Specification Version 1.0.0 with Errata 1

      • Main Profile, Level 5.1

    • AVS2

  • Resolution Up to 8192x8192

  • Up to FHD 192 streams

Video Encode

  • Support nvenc

  • Codecs:

    • AVC(H.264):Spec Version 12:ISO/IEC 14496-10 / ITU-T Rec. H.264 (03/2010)

      • Baseline Profile, levels 1 – 5.2

      • Main Profile, levels 1 - 5.2

      • High Profile, levels 1 – 5.2

      • High 10 Profile, levels 1 - 5.2

    • HEVC(H265):ITU-T Rec. H.265 (04/2013), ISO/IEC 23008-2

      • Main Profile, Level 5.1, High Tier

      • Main10 profile, Level 5.1, High Tier

      • Main Still Profile

    • AV1 Bitstream Specification Version 1.0.0 with Errata 1

      • Main Profile, Level 5.1

  • Resolution up to 4K support

  • Support input RGB format (converted to YUV420 via inlinePP)

  • Support crop, scale, rotate with inlinePP

  • Up to FHD 32 streams

Jpeg

  • Support nvjpeg decoder & encoder

  • Resolution up to 32Kx32K

  • Support RGB format input and output with inlinePP

  • Support crop, scale, rotate with inlinePP

  • Up to UHD 960FPS

Image Process

  • Support Nvidia 2D Image NPP

5. 已知问题

Video Decode

  • 支持cuvid decode模式,不支持raw nvdec模式(cuvid模式和nvdec模式有相同的硬件加速能力,cuvid模式使用更简单)。

  • 不支持MPEG1、MPEG2、MPEG4、VC1、VP8legacy格式。

Video Encode

  • 不支持YUV444 12bits

Jpeg

  • 不支持lossless

  • 不支持JPEG2000

2D Image

  • Npp只支持Image Process接口,不支持Signal Process接口