If your video file contains subtitle tracks or multiple audio tracks, the above solution by @qubodup will discard the subtitle tracks but keep all the non-first audio tracks in the video. In that case, you should use the following command line as a more general solution:
ffmpeg -y -i v.mp4 -i a.m4a -c copy -map 0 -map -0:a -map 1:a video-new.mp4
This will replace all audio tracks in the video file v.mp4 by all audio tracks in the audio file a.m4a, keeping all other tracks including video tracks and subtitle tracks intact.
For better understanding, -map 0 selects all tracks (including all audio/video/subtitle tracks) from the first input file (index starts from 0); -map -0:a discard all audio tracks from the first input file; -map 1:a select all audio tracks from the second input file. In particular, 1:a:0 means the first (the last '0') audio track (the middle 'a') of the second input file (the first '1'), discarding the 3rd number (i.e., becomes 1:a) means all that type of tracks (audio tracks), discarding the 2nd number (i.e., becomes 1) mean all types of tracks. The -ve sign means subtraction.
For detailed explanation on FFMPEG's -map option, you can refer to FFMPEG Advanced Options
-c copyto just re-mux audio and video without re-encoding any of the streams ^^ – Francesco Yoshi Gobbo Sep 03 '18 at 06:19-c copy? Obviously the new filename - what else? If you could provide a complete revised command, that would be helpful. – almcnicoll Apr 01 '20 at 16:06ffmpeg -i v.mp4 -i a.m4a -c copy -map 0:v:0 -map 1:a:0 new.mp4would suffice. Or alternatively if the 2 streams are going to be muxed into an.mkvcontainer, so on the code above we can substitute.m4awith the original.wavof the question and thenew.mp4withnew.mkv. – Francesco Yoshi Gobbo Apr 01 '20 at 19:16-c copyinstead of-c:v copy.-c:v copymeans to copy the video only, which means re-encoding the audio.-c copywill copy both the video and audio, no re-encoding. – wisbucky May 30 '21 at 08:36Could not find tag for codec pcm_s16le in stream #1, codec not currently supported in container Could not write header for output file #0 (incorrect codec parameters– Jamie Hutber Mar 31 '22 at 13:51-shortestdidn't work for me. It still kept the video as long as the audio.-fflags shortestworked instead. – Iulian Onofrei Aug 21 '23 at 06:37