How to hold the last frame when using ffmpeg
One method is to use the overlay video filter. Assuming your video is 640x480, 30 seconds duration, 25 frame rate:

ffmpeg -f lavfi -i nullsrc=s=640x480:d=35:r=25 -i video.mp4 -i audio.wav -filter_complex \
"[0:v][1:v]overlay[video]" -map "[video]" -map 2:a -codec:a copy -shortest output.mkv



I set the duration of the nullsrc source filter to be 5 seconds longer than input.mkv.
The default behavior of overlay is to repeat the last frame of the overlaid source. See the eof_action option for other behaviors. 
The audio in this example is being stream copied (re-muxed) instead of being re-encoded.
The downside is that this examples requires re-encoding since a filter is being used, but it may be simpler than other methods since it is just one command.