Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

How can I pipe the output of ffmpeg to ffplay?

At the moment I use a workaround in bash :

mkfifo spam
(ffplay spam 2> /dev/null &) ; capture /dev/stdout | ffmpeg -i - spam
share|improve this question
up vote 10 down vote accepted

I do not know if it is ffmpeg that cannot output its data to stdout, or ffplay that cannot take its input from stdin.

If it is ffmpeg that cannot output its data to stdout:

capture /dev/stdout | ffmpeg -i - >(ffplay 2> /dev/null)

(You migth need to add a - argument to ffplay so it takes its input from stdin.)

If it is ffplay that cannot take its input from stdin:

ffplay <(capture /dev/stdout | ffmpeg -i -) 2> /dev/null

For more informations about the <(command) and >(command) construct, see the Process Substitution section of the bash manual.

share|improve this answer
for me this didnt work without explicitly specifying output format with "-f". as specified on "format is normally auto detected for input files and guessed from the file extension for output files". in given answer ffmpeg wont be able to guess output format. so i think ffmpeg should have "-f fmt" added to it. – Pavel K. Jun 8 '15 at 11:50

ffmpeg supports piping operations. See that section of the documentation here.

I don't know how ffplay works, but to pipe the output of ffmpeg to standard output, you can add the pipe command to the end of the ffmpeg command. Example:

ffmpeg -i input.flv pipe:1 | ffplay -i -
share|improve this answer
thanks, i somehow missed that section of the man pages.. however i could not get this construct to work, the output filename needs to be removed from ffmpeg and input pipe added to ffplay args. i will edit your post accordingly.. – wim Aug 18 '11 at 3:09
Thanks. As I said, I've never used ffplay before, but I know ffmpeg. – matzahboy Aug 18 '11 at 13:17
In my man ffplay, I cannot see ffplay supporting the -i switch - is it maybe ffmpeg only? – sdaau May 29 '13 at 20:34

looks like normal pipes work (at least in windows):

ffmpeg -i sintel.mpg -pix_fmt yuv420p -f rawvideo - | ffplay -f rawvideo -pix_fmt yuv420p -s 720x480 -

haven't tried it with more complicated input/output though...

ffmpeg -f dshow -i video=screen-capture-recorder -pix_fmt yuv420p -f mpegts - | ffplay -analyzeduration 10 -f mpegts -

is slightly faster startup

share|improve this answer
ffmpeg -i input.avi <options> -f matroska - | ffplay -

will work; you need to set a container format for the output. This is normally set with ffmpeg looking at the extension you give the output, but here you have to set it manually with -f. I recommend matroska (MKV) because it can contain almost any video, so whatever you're transcoding it to should work perfectly well.

Note that if you are using Ubuntu 12.04, ffmpeg has been replaced by the libav fork, and you should use avconv and avplay instead; the syntax is otherwise identical. There is a sort-of ffmpeg there, but it's crippled by design.

share|improve this answer
+1 It works with m3u8 playlist. Thank you :) – Tenaciousd93 Jan 7 at 9:14

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .