Split video into equal duration segments
The issue with the frames are very likely the results of using h264 and not re-encoding the video. h264 usually doesn't have single frames (unless encoded with an intra profile) but groups of frames (GOPs), ffmpeg will cut at a keyframe position ie. at the end or beginning of a GOP. Or not in the case of your first approach, giving you issues with the affected GOPs.

The issue should be resolved by re-encoding (-vcodec libx264 -preset slow) or if that also yields errors transcode to a lossless codec like jpeg2000 (-vcodec libopenjpeg) cut your video and then encode into h264 again (or any other codec you may prefer).