Batch resize videos with "pan and scan" cropping
If you had just 4:3 and 16:9 videos, I would suggest:

ffmpeg -i input.mov -filter:v 'scale=-1:768,crop=1024:ih' \
-c:v libx264 -crf 23 -preset veryfast output.mp4


That would scale a video to a height of 768, scaling the width to keep the aspect ratio; and then it crops the width to 1024, keeping the height at 768. The fact that you are using 1:1 videos as well complicates things: a 3000x3000 video would get scaled to 768x768, and then ffmpeg would try to crop it to 1024x768, which obviously wouldn't work, since crops can be no bigger than the input...

The only way I can think of getting this to work would be to crop all of the videos, which you stated wouldn't be a problem. This will crop the output width to be the same as the input height, and the output height to be 3/4 of the input height; and then it will scale the video down to a height of 768, keeping the aspect ratio with the width:

ffmpeg -i input.mov -filter:v 'crop=ih:3/4*ih,scale=-1:768' \
-c:v libx264 -crf 23 -preset veryfast output.mp4


This will only work if the original files have a height of 1024 or more. Note that x264 only accepts an even width or height, which can cause problems (but shouldn't in this case).

To convert every .mov in a directory, you can use a for loop:

for f in *.mov; \
do ffmpeg -i "$f" -filter:v 'crop=ih:3/4*ih,scale=-1:768' \
-c:v libx264 -crf 23 -preset veryfast "${f/%mov/mp4}"; \
done


To do so recursively, you can use find:

find . -type f -name *.mov -exec bash -c \
'ffmpeg -i "$0" -filter:v "crop=ih:3/4*ih,scale=-1:768" \
-c:v libx264 -crf 23 -preset veryfast "${0/%mov/mp4}"' {} \;


All of this will require a recent version of ffmpeg.