无法在过滤器'...'支持的格式之间进行转换-重新初始化过滤器时出错

时间:2018-08-26 19:10:37

标签: ffmpeg

我正在使用此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图形卡的计算机上。

我知道

ffmpeg version N-90979-g08032331ac Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 7.3.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-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth
  libavutil      56. 18.100 / 56. 18.100
  libavcodec     58. 19.100 / 58. 19.100
  libavformat    58. 13.101 / 58. 13.101
  libavdevice    58.  4.100 / 58.  4.100
  libavfilter     7. 21.100 /  7. 21.100
  libswscale      5.  2.100 /  5.  2.100
  libswresample   3.  2.100 /  3.  2.100
  libpostproc    55.  2.100 / 55.  2.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 00000254a8afc0c0] st: 0 edit list: 1 Missing key frame while searching for timestamp: 6006
[mov,mp4,m4a,3gp,3g2,mj2 @ 00000254a8afc0c0] st: 0 edit list 1 Cannot find an index entry before timestamp: 6006.
....
Stream mapping:
  Stream #0:0 (h264_cuvid) -> midequalizer:in0
  Stream #1:0 (h264) -> midequalizer:in1
  Stream #1:0 (h264) -> lenscorrection
  hstack -> Stream #0:0 (h264_nvenc)

Impossible to convert between the formats supported by the filter 'graph 0 input from stream 0:0' and the filter 'auto_scaler_0'
Error reinitializing filters!

没有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计算机上工作?

.............................. .. ..... ... ....。。。。。。。。。。。。。。。。。 ................................... .....。。。。。。。。。。。。。。。。。。。。。 .. .... ... ....。。。。。。。。。。。。。。。。。。 ..... ..... ... ....。。。。。。。。。。。。。。。 ....。。。。。。。。。。。。。。。。。。。。。。 ... .....。。。。。。。。。。。。。。。。。。。。。 .. ..... ... .... ...

3 个答案:

答案 0 :(得分:2)

截至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 ...

有关此问题的详细信息,请参见此处:https://trac.ffmpeg.org/ticket/5587

答案 1 :(得分:1)

没有用于测试的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"

答案 2 :(得分:0)

不要用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