I'm guessing that you don't just crop the image but you have other things you'll be doing with the images before and after they're cropped. So I guess it's worthwhile to take a look at scripting the cropping as well as those other tasks.
If you want to do a facial recognition based cropping, you might want to look at OpenCV. OpenCV has a feature detection algorithms and also includes a pretrained classifier for facial detection. You can write a face detection and cropping script in probably about 10 lines of python code: http://docs.opencv.org/trunk/doc/py_tutorials/py_objdetect/py_face_detection/py_face_detection.html.
- OpenCV runs on Windows, Linux, Mac, even Android or iOS
- Can do batch processing, it had binding for many popular scripting languages
- Supports PNG and JPEG
- as long as you already have a pretrained classifier for the feature you want to detect, you wouldn't even need to know how those black magic works
- and if you have to, you have the option to train your own classifier