On 20/02/2026 14:29, richardjnz--- via Libav-user wrote:
I am a relatively new starter with ffmpeg 8.0.1 libraries. I am working on Windows 11 with Visual Studio 2026, building the libraries in MSYS2.

I have a source of uncompressed video frames in BGRA format which can be progressive or interlaced, and I want to encode them to H.264 using the ffmpeg libraries using any of the hardware encoders h264_qsv, h264_amf, h264_nvenc (or h264_mf as a possible software fallback). There is no decoding needed because the input frames are already uncompressed.

The BGRA frames need to go through color conversion to NV12 (to keep the encoder happy), optional deinterlacing (if the frames are interlaced), and optional resizing in a ffmpeg filter graph before being fed into the encoder.

I have the ffmpeg filter graph working fine on the CPU feeding the hardware encoder – so for example for interlaced source frames with resizing the filter string is:

scale=interl=1:format=nv12,bwdif=mode=send_frame:parity=auto:deint=all,scale=%d:%d

But I would like the whole filter graph to run on the GPU instead and feed the hardware encoder so that everything is done on the GPU. Hopefully it will then run faster(?)

Web/AI searches suggest that there is a “d3d11vpp” filter in ffmpeg that provides a single platform-agnostic method of doing all this on the GPU using D3D11, rather than using different platform-specific filters. Suggested filter strings vary but look something like:

hwupload,d3d11vpp=format=nv12:deinterlace=2:rate=0:w=%d:h=%d

But I can’t find any evidence that d3d11vpp exists (at least in version 8.0.1 of ffmpeg), so it may just be an AI hallucination.

No such filter exists.
There is a few specific filters using d3d11 and d3d12 api, but no magic generic filter that does everything.


So, is there *really* a platform-agnostic way of running the filter graph on the GPU, or do you have to use filters specific to the PC’s actual hardware?

There is not, every hardware API needs its own filters.
Different platforms have different filters implemented on them.

The most generic way is probably Vulkan via libplacebo and other filters.
But it's still highly volatile in nature and deals with tons of driver bugs and vendor differences.
_______________________________________________
Libav-user mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to