FFmpeg转用NVENC HEVC编码器时滤镜格式转换失败问题求助
我最近想把原来的FFmpeg转码命令改成用RTX3060的NVENC HEVC编码器,让转码速度更快,结果改完后直接报错了,想请大家帮忙排查下问题在哪。
原可正常工作的命令(未启用硬件加速)
ffmpeg -i video.mkv -i logo.png -filter_complex "[1]format=rgba,colorchannelmixer=aa=0.4[logo];[logo][0]scale2ref=oh*mdar:ih*0.05[logo][video];[video][logo]overlay=(main_w-overlay_w)-10:10[AddedLogo];[AddedLogo]subtitles=subtitles.ass[EndVideo]" -map 0:a -map [EndVideo] -b:v 2400k output.mp4
我修改后的NVENC加速命令
ffmpeg -y -hwaccel cuda -hwaccel_output_format cuda -i video.mkv -i logo.png -filter_complex "[1]format=rgba,colorchannelmixer=aa=0.4[logo];[logo][0]scale2ref=oh*mdar:ih*0.05[logo][video];[video][logo]overlay=(main_w-overlay_w)-10:10[AddedLogo];[AddedLogo]subtitles=subtitles.ass[EndVideo]" -map 0:a -map [EndVideo] -c:v hevc_nvenc -fps_mode passthrough -preset slow -b:v 2400k output.mp4 out.flv 2> log.txt
关键报错信息
Stream #0:0 (hevc) -> scale2ref (graph 0)
Stream #1:0 (png) -> format:default (graph 0)
Stream #0:1 -> #0:0 (aac (native) -> aac (native))
subtitles:default (graph 0) -> Stream #0:1 (hevc_nvenc)
Stream #0:0 -> #1:0 (hevc (native) -> flv1 (flv))
Stream #0:1 -> #1:1 (aac (native) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
[Parsed_subtitles_4 @ 00000237222fa380] libass API version: 0x1701000
[Parsed_subtitles_4 @ 00000237222fa380] libass source: commit: 0.17.0-55-g5c15c883a4783641f7e71a6a1f440209965eb64f
[Parsed_subtitles_4 @ 00000237222fa380] Shaper: FriBidi 1.0.13 (SIMPLE) HarfBuzz-ng 8.1.1 (COMPLEX)
[Parsed_subtitles_4 @ 00000237222fa380] Using font provider directwrite (with GDI)
Impossible to convert between the formats supported by the filter 'Parsed_scale2ref_2' and the filter 'auto_scale_0'
[fc#0 @ 0000023721c200c0] Error reinitializing filters!
Failed to inject frame into filter network: Function not implemented
Error while filtering: Function not implemented
[out#0/mp4 @ 000002372237d180] Nothing was written into output file, because at least one of its streams received no packets.
[out#1/flv @ 000002372237d6c0] Nothing was written into output file, because at least one of its streams received no packets.
frame= 0 fps=0.0 q=0.0 Lq=0.0 size= 0kB time=00:00:00.23 bitrate= 0.0kbits/s speed=5.24x
[aac @ 00000237235307c0] Qavg: 65536.000
Conversion failed!
我自己猜测是不是硬件加速的视频流格式和CPU滤镜不兼容?毕竟加了-hwaccel cuda -hwaccel_output_format cuda后,视频流变成了CUDA设备格式,但scale2ref、overlay这些滤镜可能没法直接处理这种格式?有没有办法既能用上NVENC的编码加速,又能保留原来加logo和字幕的滤镜效果?
备注:内容来源于stack exchange,提问作者Candour

