Does the cv2.waitKey argument determine the frame-rate while capturing a video?
It does not determine the framerate, but it has an influence on the framerate.

The first caveat is that although you're only waiting 1ms between frames, the program has other work to do in order to render each frame, so the delay between frames is not purely caused by that 1ms wait.

The next caveat is that (from the doc)


  Since the OS has a minimum time between switching threads, the function will not wait exactly delay ms, it will wait at least delay ms, depending on what else is running on your computer at that time.


So, you may be thinking, okay, I won't get 1/delay framerate, but I will get at most 1/delay framerate.  Alas!  Caveat 3 strikes:

What if you spam keyboard input, e.g. by holding down a key and letting it repeat?  Then the wait function will get cut short.  Again, you may be led astray by thinking, but if I use delay=1 (millisecond) this will be trivial because no keyboard at a rate anywhere near 1 KHz!  But remember that this delay is a minimum amount of time it will wait, in reality the wait is much longer.

In an application I wrote (more complex than this though) using cv2.waitKey(1) after showing each frame, I get a 50% increase in fps by simply holding down a key on my keyboard.

 Hands-off FPS: 64.09
Key-repeat FPS: 90.99




The moral is that if you want stable, controlled FPS, you should pick another route, because there are so many caveats and unpredictabilities here.