不支持编解码器 h264_cuvid
Codec h264_cuvid is not supported
======================= 环境 =========== ============
系统:ubuntu18.04
架构:x86_64
显卡:NVIDIA GeForce 820m
显卡驱动:NVIDIA-Linux-x86_64-390.87
海湾合作委员会:6.5.0
CUDA:9.1.85(也试过 9.0.176)
FFmpeg:3.4(也试过 4.0、4.1)
==================== FFmpeg编译 ============= =======
./configure \
--prefix="$DIR_BUILD" \
--bindir="$DIR_BIN" \
--enable-cuda \
--enable-cuvid \
--enable-nvenc \
--enable-nonfree \
--enable-libnpp \
--extra-cflags=-I/usr/local/cuda/include \
--extra-ldflags=-L/usr/local/cuda/lib64
======================= 验证 =========== ============
驱动程序验证:
(我已经把我的gcc从7.3降级到6.5了,不知道为什么还是显示gcc版本7.3)
$ cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module 390.87 Tue Aug 21 12:33:05 PDT 2018
GCC version: gcc version 7.3.0 (Ubuntu 7.3.0-27ubuntu1~18.04)
CUDA验证:
$nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Nov__3_21:07:56_CDT_2017
Cuda compilation tools, release 9.1, V9.1.85
$./deviceQuery
Rsult = PASS
$./bandwidthTest
Result = PASS
FFmpeg 解码器验证:
$ ffmpeg -codecs | grep cuvid
ffmpeg version 3.4.5 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 6.5.0 (Ubuntu 6.5.0-2ubuntu1~18.04) 20181026
configuration: --prefix=/home/cavalry/Downloads/compile_ffmpeg/ffmpeg_build --bindir=/home/cavalry/Downloads/compile_ffmpeg/bin --enable-cuda --enable-cuvid --enable-nvenc --enable-nonfree --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64
libavutil 55. 78.100 / 55. 78.100
libavcodec 57.107.100 / 57.107.100
libavformat 57. 83.100 / 57. 83.100
libavdevice 57. 10.100 / 57. 10.100
libavfilter 6.107.100 / 6.107.100
libswscale 4. 8.100 / 4. 8.100
libswresample 2. 9.100 / 2. 9.100
DEV.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_v4l2m2m h264_vdpau h264_cuvid ) (encoders: h264_nvenc h264_v4l2m2m h264_vaapi nvenc nvenc_h264 )
DEV.L. hevc H.265 / HEVC (High Efficiency Video Coding) (decoders: hevc hevc_cuvid ) (encoders: nvenc_hevc hevc_nvenc hevc_vaapi )
DEVIL. mjpeg Motion JPEG (decoders: mjpeg mjpeg_cuvid ) (encoders: mjpeg mjpeg_vaapi )
DEV.L. mpeg1video MPEG-1 video (decoders: mpeg1video mpeg1video_vdpau mpeg1_v4l2m2m mpeg1_cuvid )
DEV.L. mpeg2video MPEG-2 video (decoders: mpeg2video mpegvideo mpegvideo_vdpau mpeg2_v4l2m2m mpeg2_cuvid ) (encoders: mpeg2video mpeg2_vaapi )
DEV.L. mpeg4 MPEG-4 part 2 (decoders: mpeg4 mpeg4_v4l2m2m mpeg4_vdpau mpeg4_cuvid ) (encoders: mpeg4 mpeg4_v4l2m2m )
D.V.L. vc1 SMPTE VC-1 (decoders: vc1 vc1_vdpau vc1_v4l2m2m vc1_cuvid )
DEV.L. vp8 On2 VP8 (decoders: vp8 vp8_v4l2m2m vp8_cuvid ) (encoders: vp8_v4l2m2m vp8_vaapi )
DEV.L. vp9 Google VP9 (decoders: vp9 vp9_v4l2m2m vp9_cuvid ) (encoders: vp9_vaapi )
FFmpeg 编码器验证:
$ ffmpeg -codecs | grep nvenc
ffmpeg version 3.4.5 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 6.5.0 (Ubuntu 6.5.0-2ubuntu1~18.04) 20181026
configuration: --prefix=/home/cavalry/Downloads/compile_ffmpeg/ffmpeg_build --bindir=/home/cavalry/Downloads/compile_ffmpeg/bin --enable-cuda --enable-cuvid --enable-nvenc --enable-nonfree --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64
libavutil 55. 78.100 / 55. 78.100
libavcodec 57.107.100 / 57.107.100
libavformat 57. 83.100 / 57. 83.100
libavdevice 57. 10.100 / 57. 10.100
libavfilter 6.107.100 / 6.107.100
libswscale 4. 8.100 / 4. 8.100
libswresample 2. 9.100 / 2. 9.100
DEV.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_v4l2m2m h264_vdpau h264_cuvid ) (encoders: h264_nvenc h264_v4l2m2m h264_vaapi nvenc nvenc_h264 )
DEV.L. hevc H.265 / HEVC (High Efficiency Video Coding) (decoders: hevc hevc_cuvid ) (encoders: nvenc_hevc hevc_nvenc hevc_vaapi )
================== 执行ffmepg命令行 ============= ======
一切顺利,然后我执行了以下命令:
ffmpeg -c:v h264_cuvid -i ./holidy.mp4 output.mkv
但事实证明:
[h264_cuvid @ 0x55f93a512200] Codec h264_cuvid is not supported.
完整信息如下:
$ ffmpeg -c:v h264_cuvid -i ./holidy.mp4 output.mkv
ffmpeg version 3.4.5 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 6.5.0 (Ubuntu 6.5.0-2ubuntu1~18.04) 20181026
configuration: --prefix=/home/cavalry/Downloads/compile_ffmpeg/ffmpeg_build --bindir=/home/cavalry/Downloads/compile_ffmpeg/bin --enable-cuda --enable-cuvid --enable-nvenc --enable-nonfree --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64
libavutil 55. 78.100 / 55. 78.100
libavcodec 57.107.100 / 57.107.100
libavformat 57. 83.100 / 57. 83.100
libavdevice 57. 10.100 / 57. 10.100
libavfilter 6.107.100 / 6.107.100
libswscale 4. 8.100 / 4. 8.100
libswresample 2. 9.100 / 2. 9.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from './holidy.mp4':
Metadata:
major_brand : isom
minor_version : 1
compatible_brands: isomavc1iso6
creation_time : 2018-01-29T09:18:23.000000Z
album : Yinyuetai
artist : yinyuetai.com
comment : Yinyuetai-1TR1166
date : 01/29/18 17:18:23
Duration: 00:04:15.21, start: 0.000000, bitrate: 4210 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080, 4087 kb/s, 24 fps, 24 tbr, 24k tbn, 48 tbc (default)
Metadata:
creation_time : 2018-01-29T09:18:23.000000Z
handler_name : 264@GPAC0.5.1-DEV-rev5472
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 120 kb/s (default)
Metadata:
creation_time : 2018-01-29T09:17:31.000000Z
handler_name : Sound Media Handler
[h264_cuvid @ 0x55f3e05ca1c0] Codec h264_cuvid is not supported.
Stream mapping:
Stream #0:0 -> #0:0 (h264 (h264_cuvid) -> mpeg4 (native))
Stream #0:1 -> #0:1 (aac (native) -> ac3 (native))
Error while opening decoder for input stream #0:0 : Invalid argument
width CUDA9.0、CUDA9.1、FFmpeg3.4、FFmpeg4.0、FFmpeg 4.1都试过了,同样报错。谁能帮我?我会非常感谢你!
干脆放弃。
不幸的是,GeForce 820m 是一个基于 Fermi 的 GPU,根本没有 cuvid。
根据Nvidia Video Encode and Decode GPU Support Matrix(snapshot),
GeForce 820m 支持 NVENC 和 NVDEC。如果我的理解是正确的,支持 NVENC 和 NVDEC 的 Nvidia 显卡也应该支持 FFmpeg 中的 h264_cuvid 解码器。所以我觉得@halfelf的回答是错误的。
======================= 环境 =========== ============
系统:ubuntu18.04
架构:x86_64
显卡:NVIDIA GeForce 820m
显卡驱动:NVIDIA-Linux-x86_64-390.87
海湾合作委员会:6.5.0
CUDA:9.1.85(也试过 9.0.176)
FFmpeg:3.4(也试过 4.0、4.1)
==================== FFmpeg编译 ============= =======
./configure \
--prefix="$DIR_BUILD" \
--bindir="$DIR_BIN" \
--enable-cuda \
--enable-cuvid \
--enable-nvenc \
--enable-nonfree \
--enable-libnpp \
--extra-cflags=-I/usr/local/cuda/include \
--extra-ldflags=-L/usr/local/cuda/lib64
======================= 验证 =========== ============
驱动程序验证:
(我已经把我的gcc从7.3降级到6.5了,不知道为什么还是显示gcc版本7.3)
$ cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module 390.87 Tue Aug 21 12:33:05 PDT 2018
GCC version: gcc version 7.3.0 (Ubuntu 7.3.0-27ubuntu1~18.04)
CUDA验证:
$nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Nov__3_21:07:56_CDT_2017
Cuda compilation tools, release 9.1, V9.1.85
$./deviceQuery
Rsult = PASS
$./bandwidthTest
Result = PASS
FFmpeg 解码器验证:
$ ffmpeg -codecs | grep cuvid
ffmpeg version 3.4.5 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 6.5.0 (Ubuntu 6.5.0-2ubuntu1~18.04) 20181026
configuration: --prefix=/home/cavalry/Downloads/compile_ffmpeg/ffmpeg_build --bindir=/home/cavalry/Downloads/compile_ffmpeg/bin --enable-cuda --enable-cuvid --enable-nvenc --enable-nonfree --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64
libavutil 55. 78.100 / 55. 78.100
libavcodec 57.107.100 / 57.107.100
libavformat 57. 83.100 / 57. 83.100
libavdevice 57. 10.100 / 57. 10.100
libavfilter 6.107.100 / 6.107.100
libswscale 4. 8.100 / 4. 8.100
libswresample 2. 9.100 / 2. 9.100
DEV.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_v4l2m2m h264_vdpau h264_cuvid ) (encoders: h264_nvenc h264_v4l2m2m h264_vaapi nvenc nvenc_h264 )
DEV.L. hevc H.265 / HEVC (High Efficiency Video Coding) (decoders: hevc hevc_cuvid ) (encoders: nvenc_hevc hevc_nvenc hevc_vaapi )
DEVIL. mjpeg Motion JPEG (decoders: mjpeg mjpeg_cuvid ) (encoders: mjpeg mjpeg_vaapi )
DEV.L. mpeg1video MPEG-1 video (decoders: mpeg1video mpeg1video_vdpau mpeg1_v4l2m2m mpeg1_cuvid )
DEV.L. mpeg2video MPEG-2 video (decoders: mpeg2video mpegvideo mpegvideo_vdpau mpeg2_v4l2m2m mpeg2_cuvid ) (encoders: mpeg2video mpeg2_vaapi )
DEV.L. mpeg4 MPEG-4 part 2 (decoders: mpeg4 mpeg4_v4l2m2m mpeg4_vdpau mpeg4_cuvid ) (encoders: mpeg4 mpeg4_v4l2m2m )
D.V.L. vc1 SMPTE VC-1 (decoders: vc1 vc1_vdpau vc1_v4l2m2m vc1_cuvid )
DEV.L. vp8 On2 VP8 (decoders: vp8 vp8_v4l2m2m vp8_cuvid ) (encoders: vp8_v4l2m2m vp8_vaapi )
DEV.L. vp9 Google VP9 (decoders: vp9 vp9_v4l2m2m vp9_cuvid ) (encoders: vp9_vaapi )
FFmpeg 编码器验证:
$ ffmpeg -codecs | grep nvenc
ffmpeg version 3.4.5 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 6.5.0 (Ubuntu 6.5.0-2ubuntu1~18.04) 20181026
configuration: --prefix=/home/cavalry/Downloads/compile_ffmpeg/ffmpeg_build --bindir=/home/cavalry/Downloads/compile_ffmpeg/bin --enable-cuda --enable-cuvid --enable-nvenc --enable-nonfree --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64
libavutil 55. 78.100 / 55. 78.100
libavcodec 57.107.100 / 57.107.100
libavformat 57. 83.100 / 57. 83.100
libavdevice 57. 10.100 / 57. 10.100
libavfilter 6.107.100 / 6.107.100
libswscale 4. 8.100 / 4. 8.100
libswresample 2. 9.100 / 2. 9.100
DEV.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_v4l2m2m h264_vdpau h264_cuvid ) (encoders: h264_nvenc h264_v4l2m2m h264_vaapi nvenc nvenc_h264 )
DEV.L. hevc H.265 / HEVC (High Efficiency Video Coding) (decoders: hevc hevc_cuvid ) (encoders: nvenc_hevc hevc_nvenc hevc_vaapi )
================== 执行ffmepg命令行 ============= ======
一切顺利,然后我执行了以下命令:
ffmpeg -c:v h264_cuvid -i ./holidy.mp4 output.mkv
但事实证明:
[h264_cuvid @ 0x55f93a512200] Codec h264_cuvid is not supported.
完整信息如下:
$ ffmpeg -c:v h264_cuvid -i ./holidy.mp4 output.mkv
ffmpeg version 3.4.5 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 6.5.0 (Ubuntu 6.5.0-2ubuntu1~18.04) 20181026
configuration: --prefix=/home/cavalry/Downloads/compile_ffmpeg/ffmpeg_build --bindir=/home/cavalry/Downloads/compile_ffmpeg/bin --enable-cuda --enable-cuvid --enable-nvenc --enable-nonfree --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64
libavutil 55. 78.100 / 55. 78.100
libavcodec 57.107.100 / 57.107.100
libavformat 57. 83.100 / 57. 83.100
libavdevice 57. 10.100 / 57. 10.100
libavfilter 6.107.100 / 6.107.100
libswscale 4. 8.100 / 4. 8.100
libswresample 2. 9.100 / 2. 9.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from './holidy.mp4':
Metadata:
major_brand : isom
minor_version : 1
compatible_brands: isomavc1iso6
creation_time : 2018-01-29T09:18:23.000000Z
album : Yinyuetai
artist : yinyuetai.com
comment : Yinyuetai-1TR1166
date : 01/29/18 17:18:23
Duration: 00:04:15.21, start: 0.000000, bitrate: 4210 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080, 4087 kb/s, 24 fps, 24 tbr, 24k tbn, 48 tbc (default)
Metadata:
creation_time : 2018-01-29T09:18:23.000000Z
handler_name : 264@GPAC0.5.1-DEV-rev5472
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 120 kb/s (default)
Metadata:
creation_time : 2018-01-29T09:17:31.000000Z
handler_name : Sound Media Handler
[h264_cuvid @ 0x55f3e05ca1c0] Codec h264_cuvid is not supported.
Stream mapping:
Stream #0:0 -> #0:0 (h264 (h264_cuvid) -> mpeg4 (native))
Stream #0:1 -> #0:1 (aac (native) -> ac3 (native))
Error while opening decoder for input stream #0:0 : Invalid argument
width CUDA9.0、CUDA9.1、FFmpeg3.4、FFmpeg4.0、FFmpeg 4.1都试过了,同样报错。谁能帮我?我会非常感谢你!
干脆放弃。
不幸的是,GeForce 820m 是一个基于 Fermi 的 GPU,根本没有 cuvid。
根据Nvidia Video Encode and Decode GPU Support Matrix(snapshot), GeForce 820m 支持 NVENC 和 NVDEC。如果我的理解是正确的,支持 NVENC 和 NVDEC 的 Nvidia 显卡也应该支持 FFmpeg 中的 h264_cuvid 解码器。所以我觉得@halfelf的回答是错误的。