[FFmpeg-user] Error: Impossible to convert between the formats...(Nvidia codecs)

Dennis Mungai dmngaie at gmail.com
Mon Feb 27 02:48:23 EET 2023

On Sun, 10 Jul 2022 at 10:28, Ben Parham <behfarteam at gmail.com> wrote:

> Hi Dennis,
> Now I am streaming with two cameras but I have a small problem, the audio
> stream is not synced with the video stream, and there is a small delay of
> around 0.2 seconds.
> How can I fix it? I would appreciate your help.
> Regards,
> Ben.

This somehow slipped through my email filters, seeing this now.

Try this variant and report back:

ffmpeg -y -fps_mode passthrough -hwaccel cuda -hwaccel_output_format cuda
-extra_hw_frames 3
rtsp_transport tcp -i "rtsp://admin:Pass1@" -flags
+genpts -vf scale_cuda=1920:1080  -vcodec hevc_nvenc -delay 0  -preset p2
-bf:v 0 -tune hq -rc vbr -vb 700k -maxrate  800k -minrate
200k -bufsize 800k -g 25 -acodec copy -strict -2 -flags +global_header
-f rtsp "rtsp://localhost:8000/stream"

See the changes I made:

1. Completely disabled B-frames. B-frames add to encoder latency.
2. See the new option -fps_mode, which replaces the now-deprecated -vsync
3. I also removed the +low_delay flag, as its' known to be very broken on
any input with B-frames.
4. To nvenc, I added the -delay parameter, set to 0.

The latency is propagated by the “delay” parameter (internally referred to
as async_depth) passed to FFmpeg for nvenc. The code in FFmpeg’s nvenc.c waits
until this number of extra frames have been buffered
before emitting any frames and is intended to support parallel and 1:N
encoding scenarios.

The assigned default value is INT_MAX which later gets reduced down to the
number of NVENC surfaces initialized minus one, which itself has an initial
value of 4 when unset/by default.

This can be overriden by setting -delay:v 0 to fix the output latency.

Retest and report back.

More information about the ffmpeg-user mailing list