The function definition you gave in a comment:
function fff { find . -name "*.mov" -exec bash -c 'ffmpeg -i "{}" -c:v libx264 -crf 20 -pix_fmt yuv420p "${0/.mov}.mp4"' {} \; }
is missing a semicolon or line break before the } that's supposed to end the function definition. The escaped semicolon doesn't count; that's just an argument to find that ends the -exec primary. This should work:
function fff { find . -name "*.mov" -exec bash -c 'ffmpeg -i "{}" -c:v libx264 -crf 20 -pix_fmt yuv420p "${0/.mov}.mp4"' {} \; ; }
# semicolon here: ^^^
...but there are still a couple of problems. First, as @Kusalananda said in a comment, injecting filenames directly into the shell command with {} isn't safe; you should pass it as an argument and use that (as "$1" etc). You're already doing that, but as $0 -- that's really supposed to be the command/function/etc name, not a regular argument, so it's better to pass something else (like find-bash) as $0, and have the actual argument be $1.
Second (again pointed out by @Kusalananda), using ${1/.mov} to remove the old ".mov" suffix might malfunction if the filename has ".mov" somewhere else in the name; ${1%.mov} will remove it specifically from the end.
Third (and much less importantly), function is a nonstandard bashism that many people prefer to avoid; the standard syntax is funcname() definition. I'd also prefer to use line breaks rather than semicolons to separate commands. With all these fixes in place, here's what I have:
fff() {
find . -name "*.mov" -exec bash -c 'echo ffmpeg -i "$1" -c:v libx264 -crf 20 -pix_fmt yuv420p "${1%.mov}.mp4"' find-bash {} \;
}