We use vips shrink to scale the first page of the tiff file. This works sequentially through the file, and is very efficient.
However, it doesn't allow us to specify any page other than the first. So we use im_shrink for other pages. im_shrink supports adding ":<page number>" to the end of a file name in order to specify what page. im_shrink is not as "sequential" as plain shrink though, so we run out of memory on very large files (limit is 500 MB).
Its possible there is someway to do this efficiently using vips command line that I'm just not aware of.
Example file https://commons.wikimedia.org/wiki/File:UBBasel_Map_Kanton_Bern_1672_Kartenslg_Schw_Cb_2.tif?page=3
(Note, that the file has to be pretty huge before this starts to be an issue. The example file is 33,511 × 7,889 pixels at a whole 2.98 GB)
Upstream feature request: https://github.com/jcupitt/libvips/issues/345