#! /bin/sh
f="FileName.17:09:2010 4.16.PM.720p.mp4"
echo ${f%%.*}${f##*[AP]M}
This works for any variable containing a string matching the pattern. See Parameter Expansion for shell variables.
With sed, just delete from the first dot to the AM or PM. Or, if the filename could have extraneous dots, then delete from the 1st number folowed by ':' up to [AP]M, 's/\.[0-9]\+:.*\[AP]M//'
I think the sed way might be better; because if it fails it returns the original string. A mismatch on the shell expression would return some of the name twice; but error checking can be added easily: It fails for files not having AM or PM in the name.
echo FileName.17:09:2010 4.16.PM.720p.mp4|sed -e 's/\..*[AP]M\././'