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



>我正在使用这个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 机器上运行?

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

没有 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"

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

我通过限制用于编码的线程数来让它工作。

"-线程9"及更低版本工作,"-线程 10"或更高版本失败并出现错误。

最新更新