I use Apple Motion to design motion graphics. It lets you switch between counting from frame 0, or from frame 1.
As a programmer, I instinctively love the idea of frame 0.
Zero-based counting feels natural to me. I write code, and when programming, arrays and memory offsets naturally start at zero. I thought that feel would apply to video-editing too.
But... not really.
My first epiphany was this, when working with video/animations: frame 1 is not a timekeeping mechanism - it's an indexing mechanism.
The concept of the 'first frame' is not about the number, but the first visible unit of the sequence of images being animated.
Or to put it another way: the first frame is the first thing you actually see.
So using frame 1, keeps counting aligned with our 'human' way of seeing what's on screen. (If you think about it, frame 0 doesn't make sense either, since the 'first second' when counting seconds is actually 0s in realtime.)
Initially, I switched to frame 0 as a reference point.
But I switched back to using frame 1, because of these problems which I quickly ran into:
Stepping boundaries are awkward and hard to guess. With a frame-0 start, I'm always offset by one. Thus:
Standard mental checkpoints (e.g. 60 fps = 1 second) will run off.
At 60fps, does the next second start at 0, 59, 119, 179, or...?
And at 30fps - is it 0, 29, 59, 89, 119, or...?
Large counts get messy. The larger the number, the more odd numbers you'll get:
With smaller time-subdivisions (say 12fps or 24fps), you'll meet unfamiliar frame counts, involving numbers you'd probably never consciously use.
Imagine the difficulty of properly counting for FPSes like 24 (which goes back to 23) and 29.97! With those there's an even greater mismatch between timekeeping and frame counts; I've quickly lost track even in a short 5-minute video.
In contrast: round numbers are easy, mentally: they're just direct multiples of the round number you're using in FPS - 0, 60, 120, 180 and so on. Each minute/second mark and boundary always falls on a FPS multiple, which also happen to be common round numbers.
Additionally, another epiphany: frame numbers and timecodes are related, but not identical; timecodes are not measures of duration, and are just another form of indexing, like frames. So the two should not be confused.
I'm sure frame zero has good or niche uses, and I hope to discover them someday. But for now, using frame 1 gives me cleaner mental landmarks. and keeps my timeline thinking straight, even if zero-indexing still feels more 'natural' to the programmer in me (especially since I'm not coming to animation/video editing as a traditional artist).