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'`.