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

标签 ffmpeg nvidia hardware video-processing hardware-acceleration

在提供的示例中,我尝试使用 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 桌面录制完全没有问题,可以以高达 50Mbps 的比特率录制实时 h264 视频,但这种低于 2600kbps 的编码速度非常慢,仅占用 35% 的 GPU。 我无法在任何视频参数上使用 100% 的 GPU。

这就是为什么我可以使用一些有关如何识别(可疑的)瓶颈的建议。

最佳答案

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

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

enter image description here

关于FFMPEG - 如何识别硬件转码中的瓶颈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48994673/

相关文章:

hardware - 物理设备驱动程序和逻辑设备驱动程序有什么区别?

video - ffmpeg屏幕混合模式使透明png变成粉红色

android - 如何在 NDK 中加载视频文件(位于 Assets 文件夹中)?

objective-c - iOS 应用程序中的 FFMpeg 不同步音频/视频

file - ffmpeg:哪些文件格式支持标准输入使用?

cuda - 神秘的CUDA分析器错误

android - 要么..要么 Android <uses-feature> list 中的区别

tensorflow - Ubuntu 16.04 上 TensorFlow 的 NVIDIA cuDNN 版本类型

encode - 使用 nvenc 编码器时出现 "NV_ENC_ERR_INVALID_VERSION"错误

python - Python 进程和线程如何映射到硬件线程?