@chapter Output Devices
@c man begin OUTPUT DEVICES

Output devices are configured elements in FFmpeg that can 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 "-devices" of the ff* tools will display the list of
enabled output devices.

A description of the currently available output devices follows.

@section alsa

ALSA (Advanced Linux Sound Architecture) output device.

@subsection Examples

@itemize
@item
Play a file on default ALSA device:
@example
ffmpeg -i INPUT -f alsa default
@end example

@item
Play a file on soundcard 1, audio device 7:
@example
ffmpeg -i INPUT -f alsa hw:1,7
@end example
@end itemize

@section caca

CACA output device.

This output device allows one 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 -c:v 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 decklink

The decklink output device provides playback capabilities for Blackmagic
DeckLink devices.

To enable this output device, you need the Blackmagic DeckLink SDK and you
need to configure with the appropriate @code{--extra-cflags}
and @code{--extra-ldflags}.
On Windows, you need to run the IDL files through @command{widl}.

DeckLink is very picky about the formats it supports. Pixel format is always
uyvy422, framerate, field order and video size must be determined for your
device with @command{-list_formats 1}. Audio sample rate is always 48 kHz.

@subsection Options

@table @option

@item list_devices
If set to @option{true}, print a list of devices and exit.
Defaults to @option{false}. Alternatively you can use the @code{-sinks}
option of ffmpeg to list the available output devices.

@item list_formats
If set to @option{true}, print a list of supported formats and exit.
Defaults to @option{false}.

@item preroll
Amount of time to preroll video in seconds.
Defaults to @option{0.5}.

@item duplex_mode
Sets the decklink device duplex mode. Must be @samp{unset}, @samp{half} or @samp{full}.
Defaults to @samp{unset}.

@end table

@subsection Examples

@itemize

@item
List output devices:
@example
ffmpeg -i test.avi -f decklink -list_devices 1 dummy
@end example

@item
List supported formats:
@example
ffmpeg -i test.avi -f decklink -list_formats 1 'DeckLink Mini Monitor'
@end example

@item
Play video clip:
@example
ffmpeg -i test.avi -f decklink -pix_fmt uyvy422 'DeckLink Mini Monitor'
@end example

@item
Play video clip with non-standard framerate or video size:
@example
ffmpeg -i test.avi -f decklink -pix_fmt uyvy422 -s 720x486 -r 24000/1001 'DeckLink Mini Monitor'
@end example

@end itemize

@section fbdev

Linux framebuffer output device.

The Linux framebuffer is a graphic hardware-independent abstraction
layer to show graphics on a computer monitor, typically on the
console. It is accessed through a file device node, usually
@file{/dev/fb0}.

For more detailed information read the file
@file{Documentation/fb/framebuffer.txt} included in the Linux source tree.

@subsection Options
@table @option

@item xoffset
@item yoffset
Set x/y coordinate of top left corner. Default is 0.
@end table

@subsection Examples
Play a file on framebuffer device @file{/dev/fb0}.
Required pixel format depends on current framebuffer settings.
@example
ffmpeg -re -i INPUT -c:v rawvideo -pix_fmt bgra -f fbdev /dev/fb0
@end example

See also @url{http://linux-fbdev.sourceforge.net/}, and fbset(1).

@section libndi_newtek

The libndi_newtek output device provides playback capabilities for using NDI (Network
Device Interface, standard created by NewTek).

Output filename is a NDI name.

To enable this output device, you need the NDI SDK and you
need to configure with the appropriate @code{--extra-cflags}
and @code{--extra-ldflags}.

NDI uses uyvy422 pixel format natively, but also supports bgra, bgr0, rgba and
rgb0.

@subsection Options

@table @option

@item reference_level
The audio reference level in dB. This specifies how many dB above the
reference level (+4dBU) is the full range of 16 bit audio.
Defaults to @option{0}.

@item clock_video
These specify whether video "clock" themselves.
Defaults to @option{false}.

@item clock_audio
These specify whether audio "clock" themselves.
Defaults to @option{false}.

@end table

@subsection Examples

@itemize

@item
Play video clip:
@example
ffmpeg -i "udp://@@239.1.1.1:10480?fifo_size=1000000&overrun_nonfatal=1" -vf "scale=720:576,fps=fps=25,setdar=dar=16/9,format=pix_fmts=uyvy422" -f libndi_newtek NEW_NDI1
@end example

@end itemize

@section opengl
OpenGL output device.

To enable this output device you need to configure FFmpeg with @code{--enable-opengl}.

This output device allows one to render to OpenGL context.
Context may be provided by application or default SDL window is created.

When device renders to external context, application must implement handlers for following messages:
@code{AV_DEV_TO_APP_CREATE_WINDOW_BUFFER} - create OpenGL context on current thread.
@code{AV_DEV_TO_APP_PREPARE_WINDOW_BUFFER} - make OpenGL context current.
@code{AV_DEV_TO_APP_DISPLAY_WINDOW_BUFFER} - swap buffers.
@code{AV_DEV_TO_APP_DESTROY_WINDOW_BUFFER} - destroy OpenGL context.
Application is also required to inform a device about current resolution by sending @code{AV_APP_TO_DEV_WINDOW_SIZE} message.

@subsection Options
@table @option

@item background
Set background color. Black is a default.
@item no_window
Disables default SDL window when set to non-zero value.
Application must provide OpenGL context and both @code{window_size_cb} and @code{window_swap_buffers_cb} callbacks when set.
@item window_title
Set the SDL window title, if not specified default to the filename specified for the output device.
Ignored when @option{no_window} is set.
@item window_size
Set preferred window size, can be a string of the form widthxheight or a video size abbreviation.
If not specified it defaults to the size of the input video, downscaled according to the aspect ratio.
Mostly usable when @option{no_window} is not set.

@end table

@subsection Examples
Play a file on SDL window using OpenGL rendering:
@example
ffmpeg  -i INPUT -f opengl "window title"
@end example

@section oss

OSS (Open Sound System) output device.

@section pulse

PulseAudio output device.

To enable this output device you need to configure FFmpeg with @code{--enable-libpulse}.

More information about PulseAudio can be found on @url{http://www.pulseaudio.org}

@subsection Options
@table @option

@item server
Connect to a specific PulseAudio server, specified by an IP address.
Default server is used when not provided.

@item name
Specify the application name PulseAudio will use when showing active clients,
by default it is the @code{LIBAVFORMAT_IDENT} string.

@item stream_name
Specify the stream name PulseAudio will use when showing active streams,
by default it is set to the specified output name.

@item device
Specify the device to use. Default device is used when not provided.
List of output devices can be obtained with command @command{pactl list sinks}.

@item buffer_size
@item buffer_duration
Control the size and duration of the PulseAudio buffer. A small buffer
gives more control, but requires more frequent updates.

@option{buffer_size} specifies size in bytes while
@option{buffer_duration} specifies duration in milliseconds.

When both options are provided then the highest value is used
(duration is recalculated to bytes using stream parameters). If they
are set to 0 (which is default), the device will use the default
PulseAudio duration value. By default PulseAudio set buffer duration
to around 2 seconds.

@item prebuf
Specify pre-buffering size in bytes. The server does not start with
playback before at least @option{prebuf} bytes are available in the
buffer. By default this option is initialized to the same value as
@option{buffer_size} or @option{buffer_duration} (whichever is bigger).

@item minreq
Specify minimum request size in bytes. The server does not request less
than @option{minreq} bytes from the client, instead waits until the buffer
is free enough to request more bytes at once. It is recommended to not set
this option, which will initialize this to a value that is deemed sensible
by the server.

@end table

@subsection Examples
Play a file on default device on default server:
@example
ffmpeg  -i INPUT -f pulse "stream name"
@end example

@section sdl

SDL (Simple DirectMedia Layer) output device.

This output device allows one 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.

@item window_fullscreen
Set fullscreen mode when non-zero value is provided.
Default value is zero.

@item window_enable_quit
Enable quit action (using window button or keyboard key)
when non-zero value is provided.
Default value is 1 (enable quit action)
@end table

@subsection Interactive commands

The window created by the device can be controlled through the
following interactive commands.

@table @key
@item q, ESC
Quit the device immediately.
@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 -c:v rawvideo -pix_fmt yuv420p -window_size qcif -f sdl "SDL output"
@end example

@section sndio

sndio audio output device.

@section v4l2

Video4Linux2 output device.

@section xv

XV (XVideo) output device.

This output device allows one 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_id
When set to non-zero value then device doesn't create new window,
but uses existing one with provided @var{window_id}. By default
this options is set to zero and device creates its own window.

@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.
Ignored when @var{window_id} is set.

@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.
Ignored when @var{window_id} is set.

@item window_title
Set the window title, if not specified default to the filename
specified for the output device. Ignored when @var{window_id} is set.
@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
