This blending of faces reminds me of computer vision in deep learning where one uses a VAE to learn a latent space representing all faces. Then takes the portion of the latent space related to anger, a portion of the latent space related to sadness, and adds them together to produce a point in the latent space that represents betrayal. When you decode from this latent space the face is truly a mix-up.
There is also a more classical way of doing what @philippe-eecs mentioned. You should be able to use a method used for computational caricatures. Here is a lecture from cs194-26 that explains how caricatures are computed: https://inst.eecs.berkeley.edu/~cs194-26/fa20/Lectures/faces.pdf
Basically, you take an average of all faces for a particular emotion and then calculate the difference between a particular face and the average face. Then you add the vector between the average face and the average face for a particular emotion.
I thought this slide was particularly interesting, not just from a technical viewpoint, but also from a human one - I thought it was super cool how we could get other emotions by combining the key shapes and expressions of two "base" expressions
The emotions on faces are not as universal as you may think https://greatergood.berkeley.edu/article/item/do_feelings_look_the_same_in_every_human_face not all humans see the same emotions in these faces.
is it possible to follow a similar process of interpolating surfaces between these face shapes, but instead of combining them we subtract a face's expression from another to get a new expression?