Ok finally I solved the problem by adding just 1 option -async
ffmpeg -y -i a.mp4 -itsoffset 00:00:30 sng.m4a -map 0:0 -map 1:0 -c:v copy -preset ultrafast -async 1 out.mp4
By default audio/video timestamps are stretched to match each other; which was my problem of audio starting from intial even after giving itsoffset
.
As per Ffmpeg Doc using async 1
corrects the initial timestamp of audio only. I know that this option is deprecated; but anyhow it solved my case.