@chapter Output Devices
@c man begin OUTPUT DEVICES

Output devices are configured elements in FFmpeg which allow to write
multimedia data to an output device attached to your system.

When you configure your FFmpeg build, all the supported output devices
are enabled by default. You can list all available ones using the
configure option "--list-outdevs".

You can disable all the output devices using the configure option
"--disable-outdevs", and selectively enable an output device using the
option "--enable-outdev=@var{OUTDEV}", or you can disable a particular
input device using the option "--disable-outdev=@var{OUTDEV}".

The option "-formats" of the ff* tools will display the list of
enabled output devices (amongst the muxers).

A description of the currently available output devices follows.

@section alsa

ALSA (Advanced Linux Sound Architecture) output device.

@section caca

CACA output device.

This output device allows to show a video stream in CACA window.
Only one CACA window is allowed per application, so you can
have only one instance of this output device in an application.

To enable this output device you need to configure FFmpeg with
@code{--enable-libcaca}.
libcaca is a graphics library that outputs text instead of pixels.

For more information about libcaca, check:
@url{http://caca.zoy.org/wiki/libcaca}

@subsection Options

@table @option

@item window_title
Set the CACA window title, if not specified default to the filename
specified for the output device.

@item window_size
Set the CACA window size, can be a string of the form
@var{width}x@var{height} or a video size abbreviation.
If not specified it defaults to the size of the input video.

@item driver
Set display driver.

@item algorithm
Set dithering algorithm. Dithering is necessary
because the picture being rendered has usually far more colours than
the available palette.
The accepted values are listed with @code{-list_dither algorithms}.

@item antialias
Set antialias method. Antialiasing smoothens the rendered
image and avoids the commonly seen staircase effect.
The accepted values are listed with @code{-list_dither antialiases}.

@item charset
Set which characters are going to be used when rendering text.
The accepted values are listed with @code{-list_dither charsets}.

@item color
Set color to be used when rendering text.
The accepted values are listed with @code{-list_dither colors}.

@item list_drivers
If set to @option{true}, print a list of available drivers and exit.

@item list_dither
List available dither options related to the argument.
The argument must be one of @code{algorithms}, @code{antialiases},
@code{charsets}, @code{colors}.
@end table

@subsection Examples

@itemize
@item
The following command shows the @command{ffmpeg} output is an
CACA window, forcing its size to 80x25:
@example
ffmpeg -i INPUT -vcodec rawvideo -pix_fmt rgb24 -window_size 80x25 -f caca -
@end example

@item
Show the list of available drivers and exit:
@example
ffmpeg -i INPUT -pix_fmt rgb24 -f caca -list_drivers true -
@end example

@item
Show the list of available dither colors and exit:
@example
ffmpeg -i INPUT -pix_fmt rgb24 -f caca -list_dither colors -
@end example
@end itemize

@section oss

OSS (Open Sound System) output device.

@section sdl

SDL (Simple DirectMedia Layer) output device.

This output device allows to show a video stream in an SDL
window. Only one SDL window is allowed per application, so you can
have only one instance of this output device in an application.

To enable this output device you need libsdl installed on your system
when configuring your build.

For more information about SDL, check:
@url{http://www.libsdl.org/}

@subsection Options

@table @option

@item window_title
Set the SDL window title, if not specified default to the filename
specified for the output device.

@item icon_title
Set the name of the iconified SDL window, if not specified it is set
to the same value of @var{window_title}.

@item window_size
Set the SDL window size, can be a string of the form
@var{width}x@var{height} or a video size abbreviation.
If not specified it defaults to the size of the input video,
downscaled according to the aspect ratio.
@end table

@subsection Examples

The following command shows the @command{ffmpeg} output is an
SDL window, forcing its size to the qcif format:
@example
ffmpeg -i INPUT -vcodec rawvideo -pix_fmt yuv420p -window_size qcif -f sdl "SDL output"
@end example

@section sndio

sndio audio output device.

@section xv

XV (XVideo) output device.

This output device allows to show a video stream in a X Window System
window.

@subsection Options

@table @option
@item display_name
Specify the hardware display name, which determines the display and
communications domain to be used.

The display name or DISPLAY environment variable can be a string in
the format @var{hostname}[:@var{number}[.@var{screen_number}]].

@var{hostname} specifies the name of the host machine on which the
display is physically attached. @var{number} specifies the number of
the display server on that host machine. @var{screen_number} specifies
the screen to be used on that server.

If unspecified, it defaults to the value of the DISPLAY environment
variable.

For example, @code{dual-headed:0.1} would specify screen 1 of display
0 on the machine named ``dual-headed''.

Check the X11 specification for more detailed information about the
display name format.

@item window_size
Set the created window size, can be a string of the form
@var{width}x@var{height} or a video size abbreviation. If not
specified it defaults to the size of the input video.

@item window_x
@item window_y
Set the X and Y window offsets for the created window. They are both
set to 0 by default. The values may be ignored by the window manager.

@item window_title
Set the window title, if not specified default to the filename
specified for the output device.
@end table

For more information about XVideo see @url{http://www.x.org/}.

@subsection Examples

@itemize
@item
Decode, display and encode video input with @command{ffmpeg} at the
same time:
@example
ffmpeg -i INPUT OUTPUT -f xv display
@end example

@item
Decode and display the input video to multiple X11 windows:
@example
ffmpeg -i INPUT -f xv normal -vf negate -f xv negated
@end example
@end itemize

@c man end OUTPUT DEVICES
