In two steps (for simplicity, even though these steps can definitely be combined).
First transfer "small" files:
find /source/path -type f -size -100M -print0 | rsync -av -0 --files-from=- / user@server:/destination/
Then transfer "big" files whose filenames match pattern:
find /source/path -type f -size +99M -name 'pattern' -print0 | rsync -av -0 --files-from=- / user@server:/destination/
This is, however, untested.
-print0 in GNU find (and others) will print the found names with a nul delimiter, and -0 with rsync will make --files-from- interpret this standard input stream in that particular way.
The file paths read with --files-from should be relative to the specified source, that's why I use / as the source in rsync (I'm assuming /source/path in find is an absolute path).
Combined variation (also not tested):
find /source/path -type f \ \( -size -100M -o -name 'pattern' \) -print0 | rsync -av -0 --files-from=- / user@server:/destination/
With more than one allowable pattern string for "big" files:
find /source/path -type f \ \( -size -100M -o -name 'pattern1' -o -name 'pattern2' -o -name 'pattern3' \) -print0 | rsync -av -0 --files-from=- / user@server:/destination/
Each pattern may be something like *.mp4 or whatever file extensions you use. Note that these needs to be quoted, as in -name '*.mp4'.