No need for cat here. Leave the cat alone.
I'm assuming every name starts right after the "photo for " and ends with the first " as in your example. Let me know if that is not the case. Otherwise we will need to think more about what counts as a "name".
grep -E 'photo for [^"]{0,20}"' File | sed 's/photo for \([^"]\{0,20\}\)".*/\1/'
Or even simpler:
sed -n 's/photo for \([^"]\{0,20\}\)".*/\1/p' File