It may be surprising but -exec can be used as a test in find invocation:
find -type f -exec sh -c 'ffprobe -show_streams 2>/dev/null "$1" | grep -q coded_height=720' sh {} \; -print
The above command will descend to subdirectories. To search in the current directory only use -maxdepth 1, i.e.:
find -maxdepth 1 -type f -exec …
Note that ffprobe will test all files. It will obviously fail for non-media files but you may get non-video media (like .jpg) in the final output. To avoid this, some additional tests in find should be used before -exec, e.g.:
find -maxdepth 1 -type f \( -iname "*.avi" -o -iname "*.mp4" -o -iname "*.mkv" \) -exec sh -c 'ffprobe -show_streams 2>/dev/null "$1" | grep -q coded_height=720' sh {} \; -print
Or better you can test mime type with file:
find -maxdepth 1 -exec sh -c 'file --mime-type "$1" | grep -q "video/"' sh {} \; -exec sh -c 'ffprobe -show_streams 2>/dev/null "$1" | grep -q coded_height=720' sh {} \; -print
Read man find to learn more.
EDIT:
This command (mis)uses avconv, as you requested:
find -exec sh -c 'file --mime-type "$1" | grep -q "video/"' sh {} \; -exec sh -c 'avconv 2>&1 -i "$1" | grep -q "Stream.*x720"' sh {} \; -print
The issue is every invocation of avconv therein throws an error. We just ignore it and extract the information we need. This is somewhat ugly solution. I'm not entirely sure your avconv behaves as mine, you may need to replace Stream.*x720 with some other regex.
what is wrong in my combined command string?
find -exec requires closing with \; or +,
there is $( without ) after you edited the question there are "" interleaved (not nested) with $(),
*720* may trigger shell globbing, should be "*720*" (I'm talking about sh, not the outer shell),
- the output of
avconv you try to parse goes to stderr, I think you need to redirect it before you can parse it,
- and maybe something else.