FFMPEG - 如何识别硬件转码的瓶颈?

Posted

技术标签:

【中文标题】FFMPEG - 如何识别硬件转码的瓶颈?【英文标题】:FFMPEG - how to identify a bottleneck in hardware transcoding? 【发布时间】:2018-08-06 06:34:00 【问题描述】:

在提供的示例中,我尝试使用 Nvidia 的硬件加速将 4K h264 源代码转码为 1080p h264 输出。

相关信息:

ffmpeg version git-2017-12-25-613f789 Copyright (c) 2000-2017 the FFmpeg developers
  built with gcc 7.2.0 (GCC)
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-amf --enable-cuda --enable-cuvid --enable-d3d11va --enable-nvenc --enable-dxva2 --enable-avisynth --enable-libmfx
  libavutil      56.  7.100 / 56.  7.100
  libavcodec     58.  9.100 / 58.  9.100
  libavformat    58.  3.100 / 58.  3.100
  libavdevice    58.  0.100 / 58.  0.100
  libavfilter     7.  7.100 /  7.  7.100
  libswscale      5.  0.101 /  5.  0.101
  libswresample   3.  0.101 /  3.  0.101
  libpostproc    55.  0.100 / 55.  0.100

使用的命令:

ffmpeg -c:v h264_cuvid -i "4K_input.mp4" -c:v h264_nvenc -preset slow -s 1920x1080 -c:a copy output.mkv

相关电脑规格:

GPU: (Gigabyte) GeForce GTX 1070 Ti
CPU: Intel Core i7 7700K
Memory: 8GB DDR4 2400MHz Single Channel.
SSD: Crucial CT525MX3

虽然 Nvidia Desktop 录制以高达 50Mbps 的比特率录制实时 h264 视频绝对没有问题,但这种低于 2600kbps 的编码在仅使用 35% 的 GPU 时非常慢。 我无法在任何视频参数上使用 100% 的 GPU。

这就是为什么我可以就如何识别(疑似)瓶颈提出一些建议。

【问题讨论】:

【参考方案1】:

“GPU”转码不能这样工作。 Nvidia GPU 上有专门用于 h264 编码的固定功能电路,它们不属于矢量单元池。这就是为什么您指定 h264_nvenc(nvenc 是 Nvidia 特定的)而不是通用的 gpu 编码器的原因。

TLDR,您不会达到 100% GPU,因为它并没有真正使用 GPU。它使用 GPU 附带的单独组件。

【讨论】:

这几乎就是关于硬件编码的 FFMPEG 手册(发现 trac.ffmpeg.org/wiki/HWAccelIntro)指定为“使用 CUVID 和 NVENC 的完整硬件转码”。我应该尝试使用我的 GPU 支持的不同硬件加速解决方案吗? (如果它不是瓶颈的话。) 我添加了图像以可视化您的答案 - 随时回滚。多个视频同时编码可以达到100%

以上是关于FFMPEG - 如何识别硬件转码的瓶颈?的主要内容,如果未能解决你的问题,请参考以下文章

【FFMPEG做视频转码】

找不到用于FFmpeg转码的x264编解码器设备

FFmpeg入门详解之71:获取ffmpeg转码的实时进度

使用ffmpeg转码的MP4文件需要加载完了才能播放的解决办法

FFMPEG实现的转码程序

FFmpeg使用显卡进行转码硬件加速的记录,以及和软压的比较