...but instead, it gives me a 30-second clip (the same length as the input), but with the first frame that should be displayed (the frame at 12 seconds into the video) being displayed all throughout the first twelve seconds - and then the video proceeds as would be expected.

Obviously, the example I'm using here is a trivial usage of select, where -ss would be a better option; but this behaviour also affects complex filtergraphs.

The aselect audio filter doesn't suffer from the same problem, it behaves exactly as would be expected.

It reports no errors, but for the record here's the terminal output of my command above:

...but instead, it gives me a 30-second clip (the same length as the input), but with the first frame that should be displayed (the frame at 12 seconds into the video) being displayed all throughout the first twelve seconds - and then the video proceeds as would be expected.

[...]

I suspect this issue is not related at all with select, but depends either on ffmpeg or on the mp4 muxer. Try to play with the -copyts and -vsync options and report if that fixes the problem.

I suspect this issue is not related at all with select, but depends either on ffmpeg or on the mp4 muxer. Try to play with the -copyts and -vsync options and report if that fixes the problem.

Actually, I've found that using the setpts filter solved this issue - it seems that select doesn't reset the timestamp on the video.

filter:v 'select=gte(t\,14),setpts=PTS-STARTPTS'

However, based on your comment I've tested it using an MKV output... and it played fine in ffplay (even without using setpts)! So I think that you are right - this is an issue with the MP4 container. However, ffplay starts playing with the timestamp starting at 14.00; and I just tested, and not using setpts caused issues with a complex filtergraph (involving concat), so I'll stick to appending setpts whenever I use select (and asetpts for each aselect).

I don't know if this is the intended behaviour or what, but it really seems like a bug.

...which would lead me to believe that 'select these frames --> send to the encoder' should work. So either the documentation is misleading, or the select filter doesn't work as it should. Or I'm just being dense, but in that case I would appreciate an explanation of what the select filter is for, if not for uses like this.

Please do not make your own interpretation out of documentation. Select filter can not and should not seek in video because it is filter. It filters its input. Select filter filters its input by selecting frames by some parameters. If you need to modify timestamps for some other reason you use additional filter.

If you think documentation is misleading please help to improve it by saying what should be changed.

What you are missing is that frames are not just images, they have additional information, and in particular a timestamp. The select filter selects frames, but it does not change them. If you use it to remove five minutes of video, the timestamps will still show the five minutes gap, and the muxer will take it into consideration while maintaining A-V sync, and a player should take it into account too. This is the expected behaviour.