So, I've managed to figure out that this may be related to input streams having different resolutions.

In the meantime, I've also switched to VA-API because it seems more stable on my system, and uses less CPU. (No idea why it uses CPU at all, shouldn't it use GPU? The gputop utility does confirm the latter to be the case, at the very least.)

In any way. The following command-line will work if both inputs have the same resolution:

ffmpeg \
-hwaccel vaapi -hwaccel_output_format vaapi -i rtmp://localhost/stream1 \ -hwaccel vaapi -hwaccel_output_format vaapi -i rtmp://localhost/stream2 \
 -filter_complex "[0:v][1:v]overlay_vaapi=w=500" \
 -c:v h264_vaapi -global_quality 25 -g 50 -r 25 -an -f null -

However, it fails with the same error as before ("Impossible to convert..") if resolutions do not match.

Running with -loglevel verbose reveals some details:

[graph 0 input from stream 0:1 @ 0x7f3fc4005b40] w:2560 h:1440 pixfmt:vaapi tb:1/1000 fr:25/1 sar:0/1 csp:bt709 range:pc [graph 0 input from stream 1:1 @ 0x7f3fc4006600] w:2688 h:1520 pixfmt:vaapi tb:1/1000 fr:26/1 sar:1/1 csp:unknown range:pc
[auto_scale_0 @ 0x7f3fc40082c0] w:iw h:ih flags:'' interl:0
[Parsed_overlay_vaapi_0 @ 0x7f3fc4005500] auto-inserting filter 'auto_scale_0' between the filter 'graph 0 input from stream 1:1' and the filter 'Parsed_overlay_vaapi_0' Impossible to convert between the formats supported by the filter 'graph 0 input from stream 1:1' and the filter 'auto_scale_0'
[fc#0 @ 0x56490d7a1ec0] Error reinitializing filters!
[fc#0 @ 0x56490d7a1ec0] Task finished with error code: -38 (Function not implemented) [fc#0 @ 0x56490d7a1ec0] Terminating thread with return code -38 (Function not implemented)

Note this part: "...auto-inserting filter 'auto_scale_0' between the filter 'graph 0 input from stream 0:1' and the filter 'Parsed_overlay_vaapi_0". This is obviously not going to work because those are hardware frames, not software!

I've found an option called -noauto_conversion_filters, but it does not appear to do any better:

ffmpeg -loglevel verbose -noauto_conversion_filters \
-hwaccel vaapi -hwaccel_output_format vaapi -i rtmp://localhost/stream1 \ -hwaccel vaapi -hwaccel_output_format vaapi -i rtmp://localhost/stream2 \
 -filter_complex "[0:v][1:v]overlay_vaapi=w=500" \
 -c:v h264_vaapi -global_quality 25 -g 50 -r 25 -an test.h264

It says: "The filters 'graph 0 input from stream 1:1' and 'Parsed_overlay_vaapi_0' do not have a common format and automatic conversion is disabled."

Is this a bug that I should report?? It certainly does look like one to me...

---
Kind regards,
Vladimir

On 2025-02-21 10:12, Vladimir Mishonov via ffmpeg-user wrote:
Greetings everyone.

I am attempting to overlay 2 video streams in real-time with QuickSync hardware acceleration. I want to use both hardware decode and encode to make the most use out of the GPU and avoid excessive CPU usage.

I've found an example command-line here: https://github.com/intel/vaapi-fits/issues/173 and adapted it:

./ffmpeg \
 -hwaccel qsv -c:v h264_qsv -i rtmp://localhost/stream1 \
 -hwaccel qsv -c:v h264_qsv -i rtmp://localhost/stream2 \
 -filter_complex "[0:v][1:v]overlay_qsv=w=500" \
 -c:v h264_qsv -global_quality 25 -g 50 -r 25 -an test.h264

However, this gives me the following error:

ffmpeg version N-118510-gbc1a3bfd2c-20250220 Copyright (c) 2000-2025 the FFmpeg developers
  built with gcc 14.2.0 (crosstool-NG 1.26.0.120_4d36f27)
configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-ffbuild-linux-gnu- --arch=x86_64 --target-os=linux --enable-gpl --enable-version3 --disable-debug --enable-iconv --enable-zlib --enable-libfreetype --enable-libfribidi --enable-gmp --enable-libxml2 --enable-openssl --enable-lzma --enable-fontconfig --enable-libharfbuzz --enable-libvorbis --enable-opencl --enable-libpulse --enable-libvmaf --enable-libxcb --enable-xlib --enable-amf --enable-libaom --enable-libaribb24 --enable-avisynth --enable-chromaprint --enable-libdav1d --enable-libdavs2 --enable-libdvdread --enable-libdvdnav --disable-libfdk-aac --enable-ffnvcodec --enable-cuda-llvm --enable-frei0r --enable-libgme --enable-libkvazaar --enable-libaribcaption --enable-libass --enable-libbluray --enable-libjxl --enable-libmp3lame --enable-libopus --enable-librist --enable-libssh --enable-libtheora --enable-libvpx --enable-libwebp --enable-libzmq --enable-lv2 --enable-libvpl --enable-openal --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-librav1e --enable-librubberband --disable-schannel --enable-sdl2 --enable-libsnappy --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --enable-libdrm --enable-vaapi --enable-libvidstab --enable-vulkan --enable-libshaderc --enable-libplacebo --disable-libvvenc --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --enable-libzvbi --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-libs='-ldl -lgomp' --extra-ldflags=-pthread --extra-ldexeflags=-pie --cc=x86_64-ffbuild-linux-gnu-gcc --cxx=x86_64-ffbuild-linux-gnu-g++ --ar=x86_64-ffbuild-linux-gnu-gcc-ar --ranlib=x86_64-ffbuild-linux-gnu-gcc-ranlib --nm=x86_64-ffbuild-linux-gnu-gcc-nm --extra-version=20250220
  libavutil      59. 57.100 / 59. 57.100
  libavcodec     61. 33.102 / 61. 33.102
  libavformat    61.  9.107 / 61.  9.107
  libavdevice    61.  4.100 / 61.  4.100
  libavfilter    10.  9.100 / 10.  9.100
  libswscale      8. 13.100 /  8. 13.100
  libswresample   5.  4.100 /  5.  4.100
  libpostproc    58.  4.100 / 58.  4.100
[vist#0:1/h264 @ 0x562c70e48780] WARNING: defaulting hwaccel_output_format to qsv for compatibility with old commandlines. This behaviour is DEPRECATED and will be removed in the future. Please explicitly set "-hwaccel_output_format qsv".
Input #0, flv, from 'rtmp://localhost/stream1':
  Metadata:
    |RtmpSampleAccess: true
    Server          : NGINX RTMP (github.com/arut/nginx-rtmp-module)
    displayWidth    : 2560
    displayHeight   : 1440
    fps             : 25
    profile         :
    level           :
  Duration: 00:00:00.00, start: 138266.736000, bitrate: N/A
  Stream #0:0: Audio: aac (LC), 48000 Hz, stereo, fltp, 128 kb/s
Stream #0:1: Video: h264 (Main), yuvj420p(pc, bt709, progressive), 2560x1440, 25 fps, 25 tbr, 1k tbn [vist#1:1/h264 @ 0x562c70ef3b00] WARNING: defaulting hwaccel_output_format to qsv for compatibility with old commandlines. This behaviour is DEPRECATED and will be removed in the future. Please explicitly set "-hwaccel_output_format qsv".
Input #1, flv, from 'rtmp://localhost/stream2':
  Metadata:
    |RtmpSampleAccess: true
    Server          : NGINX RTMP (github.com/arut/nginx-rtmp-module)
    displayWidth    : 2688
    displayHeight   : 1520
    fps             : 26
    profile         :
    level           :
  Duration: 00:00:00.00, start: 138268.361000, bitrate: N/A
  Stream #1:0: Audio: aac (LC), 48000 Hz, stereo, fltp, 128 kb/s
Stream #1:1: Video: h264 (High), yuvj420p(pc, progressive), 2688x1520 [SAR 1:1 DAR 168:95], 26 fps, 26 tbr, 1k tbn
Stream mapping:
  Stream #0:1 (h264_qsv) -> overlay_qsv
  Stream #1:1 (h264_qsv) -> overlay_qsv
  overlay_qsv:default -> Stream #0:0 (h264_qsv)
Press [q] to stop, [?] for help
Impossible to convert between the formats supported by the filter 'graph 0 input from stream 1:1' and the filter 'auto_scale_0'
[fc#0 @ 0x562c70e30a40] Error reinitializing filters!
[fc#0 @ 0x562c70e30a40] Task finished with error code: -38 (Function not implemented) [fc#0 @ 0x562c70e30a40] Terminating thread with return code -38 (Function not implemented) [vost#0:0/h264_qsv @ 0x562c70ede940] [enc:h264_qsv @ 0x562c70edec40] Could not open encoder before EOF [vost#0:0/h264_qsv @ 0x562c70ede940] Task finished with error code: -22 (Invalid argument) [vost#0:0/h264_qsv @ 0x562c70ede940] Terminating thread with return code -22 (Invalid argument) [out#0/h264 @ 0x562c70e31240] Nothing was written into output file, because at least one of its streams received no packets. frame= 0 fps=0.0 q=0.0 Lsize= 0KiB time=N/A bitrate=N/A speed=N/A
Conversion failed!


If I remove the filter_complex and use just one input stream, it works without issue:

./ffmpeg \
 -hwaccel qsv -c:v h264_qsv -i rtmp://localhost/stream1 \
 -c:v h264_qsv -global_quality 25 -g 50 -r 25 -an test.h264

Could anyone please tell me what I'm doing wrong?

Thank you very much.

--
Kind regards,
Vladimir
_______________________________________________
ffmpeg-user mailing list
ffmpeg-user@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-user

To unsubscribe, visit link above, or email
ffmpeg-user-requ...@ffmpeg.org with subject "unsubscribe".
_______________________________________________
ffmpeg-user mailing list
ffmpeg-user@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-user

To unsubscribe, visit link above, or email
ffmpeg-user-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to