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 pretraining data 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
- Can do batch processing, it had binding many popular scripting languages
- Supports PNG and JPEG