Ffmpeg 无法在筛选器“…”支持的格式之间转换-重新初始化筛选器时出错

Ffmpeg 无法在筛选器“…”支持的格式之间转换-重新初始化筛选器时出错,ffmpeg,cuda,gpu,Ffmpeg,Cuda,Gpu,为了简单起见,我使用了这个ffmpeg命令 ffmpeg -hwaccel cuvid -c:v h264_cuvid -y -ss 1 -i "FILE0001.MOV" -ss 0 -i "GOPR0621.MP4" -filter_complex [0:v][1:v] midequalizer [al]; [al] yadif lenscorrection scale [vl]; [1:v] lenscorrection s

为了简单起见,我使用了这个ffmpeg命令

ffmpeg -hwaccel cuvid -c:v h264_cuvid -y -ss 1 -i "FILE0001.MOV" -ss 0 -i "GOPR0621.MP4" -filter_complex 
[0:v][1:v]
  midequalizer
[al];
[al]
  yadif
  lenscorrection
  scale
[vl];
[1:v]
  lenscorrection
  scale
[vr];
[vl][vr]
  hstack=shortest=1 
-an -c:v h264_nvenc -preset slow "output.mp4"
在带有cuda图形卡的机器上

我明白了

不使用CUDA的同一命令也可以工作,即

ffmpeg -y -ss 1 -i "FILE0001.MOV" -ss 0 -i "GOPR0621.MP4" -filter_complex 
[0:v][1:v]
  midequalizer
[al];
[al]
  yadif
  lenscorrection
  scale
[vl];
[1:v]
  lenscorrection
  scale
[vr];
[vl][vr]
  hstack=shortest=1 
-an "output.mp4"

如何使其在装有cuda的Windows 10计算机上工作?

没有可用于测试的cuda设备,但应该是

ffmpeg -hwaccel cuvid -c:v h264_cuvid -y -ss 1 -i "FILE0001.MOV" -ss 0 -i "GOPR0621.MP4" -filter_complex 
[0:v]hwdownload,format=nv12,format=yuv420p[0v];
[0v][1:v]
  midequalizer
[al];
[al]
  yadif
  lenscorrection
  scale
[vl];
[1:v]
  lenscorrection
  scale
[vr];
[vl][vr]
  hstack=shortest=1 
-an -c:v h264_nvenc -preset slow "output.mp4"

2020年的解决方案:您需要将hwupload_cuda与过滤器一起传递,以明确告诉FFmpeg要做什么

因此,您的命令应该如下所示:

ffmpeg -hwaccel cuvid -c:v h264_cuvid -vsync 0 -y -i input.mp4 -vf "hwupload_cuda,scale_npp=w=1280:h=-2" -c:v h264_nvenc ...

关于这个问题的详细信息在这里描述:

不要使用cuvid,它在2020年不是更好的解码器。只需让ffmpeg自己选择解码器即可。您需要指定要使用硬件加速

您的piplene应该如下所示:

ffmpeg -hwaccel nvdec -hwaccel_device 0 -hwaccel_output_format cuda -i input_file.mp4 -map 0:0 -map 0:1 -c:v:0 h264_nvenc -b:v:0 650000 -filter:v:0 scale_npp=-2:360:interp_algo=super,hwdownload,format=nv12 -c:a:0 aac -b:a:0 96000 -ac:a:0 2 -max_muxing_queue_size 9999 -movflags +faststart -f mp4 /home/uploads/tmp.mp4

当在硬件中解码,然后使用软件滤波器(如中间均衡器)时,帧必须传输到系统RAM。GPU支持有限数量的像素格式,ffmpeg还不支持从GPU格式到s/w格式的像素格式自动转换。相反,cuvid使用-hwaccel nvdec-hwaccel_output_格式cuda他更喜欢各种格式
ffmpeg -hwaccel nvdec -hwaccel_device 0 -hwaccel_output_format cuda -i input_file.mp4 -map 0:0 -map 0:1 -c:v:0 h264_nvenc -b:v:0 650000 -filter:v:0 scale_npp=-2:360:interp_algo=super,hwdownload,format=nv12 -c:a:0 aac -b:a:0 96000 -ac:a:0 2 -max_muxing_queue_size 9999 -movflags +faststart -f mp4 /home/uploads/tmp.mp4