我正在尝试从视频中创建特定时间戳的图像缩略图。在执行此活动时,我想出了两个命令。一些视频通过第一个命令成功处理,一些视频通过第二个命令处理。
根据我的理解,一些视频正在通过硬件解码,一些视频正在通过 ffmpeg 软件解码,因此我使用scale_cuda
和hwdownload
将帧从 GPU 内存缩放和下载到主内存。
对于硬件可解码媒体:
ffmpeg -hwaccel cuvid -hwaccel_output_format cuda -ss 00:00:10.0 -i "intput.mp4" -vf "scale_cuda=1024:576,hwdownload,format=nv12,setsar=1:1" -frames:v 1 output.jpg
对于软件可解码媒体:
ffmpeg -hwaccel cuvid -hwaccel_output_format cuda -ss 00:00:10.0 -i "input.mp4" -vf "scale=1024:576,format=nv12,setsar=1:1" -frames:v 1 output.jpg
每个视频都可以使用上述两个命令之一,但使用另一个命令则无法正常工作。(这两个视频都具有相同的编解码器 h264,并且我的 nvidia gpu 支持硬件解码)
我在这里的疑问是为什么有些媒体是硬件解码的,而有些媒体是软件解码的。我如何才能预先知道哪些媒体是硬件可解码的,哪些是软件可解码的。