FFmpeg encode variable input framerate
When receiving frames from a raw input i.e. one without embedded timestamps, ffmpeg will assign timestamps in serial order, thus losing the temporal relation between the incoming frames.

When the difference in times is important, you can add -use_wallclock_as_timestamps 1 before the input -i. This will assign the system time at time of receipt as the timestamp. Not perfect, as there may be jitter during the transport of the input, but better than the default behaviour.

vsync is somewhat of a misnomer. It takes effect after filtering and is generally used to select between generating a constant (cfr) or variable frame rate (vfr) stream.