When you use the
-f caca - arguments, you are telling ffmpeg to convert frames of a video to a text approximation of the image, then write the text to your screen via stdout. The output text isn't in a video format, it is text that your terminal or console can understand.
It would be like if you used text to speech to convert a sentence into an audio file, and then tried to take that audio file and pipe it into a text file. To do what you're trying to do, you'll need to account for the fact that the text output needs to be rendered in a terminal (or something like a terminal) and then recaptured.
Luckily there are several routes to do what you're trying to do. I'd start here: http://stariocek.asuscomm.com/watch-ascii-libcaca.html
That page contains a script where ffmpeg is used to output frames of a movie to image files, then the image files are converted to an HTML file (the HTML file would look a lot like the output of libcaca), then those HTML files are output using img2txt, then those HTML files are rendered to image files with webkit2png, and finally the image files are recombined into a movie using
An alternative route would be to use VLC to render the video using libcaca (
vlc --vout caca final3.mp4, then capture the resultant output using a standard desktop capture tool (like QuickTime Screen Recording if you are on a Mac).