在提供的示例中,我尝试使用 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 附带的单独组件。
关于FFMPEG - 如何识别硬件转码中的瓶颈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48994673/