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 - 如何识别硬件转码的瓶颈?的主要内容,如果未能解决你的问题,请参考以下文章