1@chapter Output Devices 2@c man begin OUTPUT DEVICES 3 4Output devices are configured elements in FFmpeg that can write 5multimedia data to an output device attached to your system. 6 7When you configure your FFmpeg build, all the supported output devices 8are enabled by default. You can list all available ones using the 9configure option "--list-outdevs". 10 11You can disable all the output devices using the configure option 12"--disable-outdevs", and selectively enable an output device using the 13option "--enable-outdev=@var{OUTDEV}", or you can disable a particular 14input device using the option "--disable-outdev=@var{OUTDEV}". 15 16The option "-devices" of the ff* tools will display the list of 17enabled output devices. 18 19A description of the currently available output devices follows. 20 21@section alsa 22 23ALSA (Advanced Linux Sound Architecture) output device. 24 25@subsection Examples 26 27@itemize 28@item 29Play a file on default ALSA device: 30@example 31ffmpeg -i INPUT -f alsa default 32@end example 33 34@item 35Play a file on soundcard 1, audio device 7: 36@example 37ffmpeg -i INPUT -f alsa hw:1,7 38@end example 39@end itemize 40 41@section caca 42 43CACA output device. 44 45This output device allows one to show a video stream in CACA window. 46Only one CACA window is allowed per application, so you can 47have only one instance of this output device in an application. 48 49To enable this output device you need to configure FFmpeg with 50@code{--enable-libcaca}. 51libcaca is a graphics library that outputs text instead of pixels. 52 53For more information about libcaca, check: 54@url{http://caca.zoy.org/wiki/libcaca} 55 56@subsection Options 57 58@table @option 59 60@item window_title 61Set the CACA window title, if not specified default to the filename 62specified for the output device. 63 64@item window_size 65Set the CACA window size, can be a string of the form 66@var{width}x@var{height} or a video size abbreviation. 67If not specified it defaults to the size of the input video. 68 69@item driver 70Set display driver. 71 72@item algorithm 73Set dithering algorithm. Dithering is necessary 74because the picture being rendered has usually far more colours than 75the available palette. 76The accepted values are listed with @code{-list_dither algorithms}. 77 78@item antialias 79Set antialias method. Antialiasing smoothens the rendered 80image and avoids the commonly seen staircase effect. 81The accepted values are listed with @code{-list_dither antialiases}. 82 83@item charset 84Set which characters are going to be used when rendering text. 85The accepted values are listed with @code{-list_dither charsets}. 86 87@item color 88Set color to be used when rendering text. 89The accepted values are listed with @code{-list_dither colors}. 90 91@item list_drivers 92If set to @option{true}, print a list of available drivers and exit. 93 94@item list_dither 95List available dither options related to the argument. 96The argument must be one of @code{algorithms}, @code{antialiases}, 97@code{charsets}, @code{colors}. 98@end table 99 100@subsection Examples 101 102@itemize 103@item 104The following command shows the @command{ffmpeg} output is an 105CACA window, forcing its size to 80x25: 106@example 107ffmpeg -i INPUT -c:v rawvideo -pix_fmt rgb24 -window_size 80x25 -f caca - 108@end example 109 110@item 111Show the list of available drivers and exit: 112@example 113ffmpeg -i INPUT -pix_fmt rgb24 -f caca -list_drivers true - 114@end example 115 116@item 117Show the list of available dither colors and exit: 118@example 119ffmpeg -i INPUT -pix_fmt rgb24 -f caca -list_dither colors - 120@end example 121@end itemize 122 123@section decklink 124 125The decklink output device provides playback capabilities for Blackmagic 126DeckLink devices. 127 128To enable this output device, you need the Blackmagic DeckLink SDK and you 129need to configure with the appropriate @code{--extra-cflags} 130and @code{--extra-ldflags}. 131On Windows, you need to run the IDL files through @command{widl}. 132 133DeckLink is very picky about the formats it supports. Pixel format is always 134uyvy422, framerate, field order and video size must be determined for your 135device with @command{-list_formats 1}. Audio sample rate is always 48 kHz. 136 137@subsection Options 138 139@table @option 140 141@item list_devices 142If set to @option{true}, print a list of devices and exit. 143Defaults to @option{false}. This option is deprecated, please use the 144@code{-sinks} option of ffmpeg to list the available output devices. 145 146@item list_formats 147If set to @option{true}, print a list of supported formats and exit. 148Defaults to @option{false}. 149 150@item preroll 151Amount of time to preroll video in seconds. 152Defaults to @option{0.5}. 153 154@item duplex_mode 155Sets the decklink device duplex mode. Must be @samp{unset}, @samp{half} or @samp{full}. 156Defaults to @samp{unset}. 157 158@item timing_offset 159Sets the genlock timing pixel offset on the used output. 160Defaults to @samp{unset}. 161 162@end table 163 164@subsection Examples 165 166@itemize 167 168@item 169List output devices: 170@example 171ffmpeg -sinks decklink 172@end example 173 174@item 175List supported formats: 176@example 177ffmpeg -i test.avi -f decklink -list_formats 1 'DeckLink Mini Monitor' 178@end example 179 180@item 181Play video clip: 182@example 183ffmpeg -i test.avi -f decklink -pix_fmt uyvy422 'DeckLink Mini Monitor' 184@end example 185 186@item 187Play video clip with non-standard framerate or video size: 188@example 189ffmpeg -i test.avi -f decklink -pix_fmt uyvy422 -s 720x486 -r 24000/1001 'DeckLink Mini Monitor' 190@end example 191 192@end itemize 193 194@section fbdev 195 196Linux framebuffer output device. 197 198The Linux framebuffer is a graphic hardware-independent abstraction 199layer to show graphics on a computer monitor, typically on the 200console. It is accessed through a file device node, usually 201@file{/dev/fb0}. 202 203For more detailed information read the file 204@file{Documentation/fb/framebuffer.txt} included in the Linux source tree. 205 206@subsection Options 207@table @option 208 209@item xoffset 210@item yoffset 211Set x/y coordinate of top left corner. Default is 0. 212@end table 213 214@subsection Examples 215Play a file on framebuffer device @file{/dev/fb0}. 216Required pixel format depends on current framebuffer settings. 217@example 218ffmpeg -re -i INPUT -c:v rawvideo -pix_fmt bgra -f fbdev /dev/fb0 219@end example 220 221See also @url{http://linux-fbdev.sourceforge.net/}, and fbset(1). 222 223@section opengl 224OpenGL output device. 225 226To enable this output device you need to configure FFmpeg with @code{--enable-opengl}. 227 228This output device allows one to render to OpenGL context. 229Context may be provided by application or default SDL window is created. 230 231When device renders to external context, application must implement handlers for following messages: 232@code{AV_DEV_TO_APP_CREATE_WINDOW_BUFFER} - create OpenGL context on current thread. 233@code{AV_DEV_TO_APP_PREPARE_WINDOW_BUFFER} - make OpenGL context current. 234@code{AV_DEV_TO_APP_DISPLAY_WINDOW_BUFFER} - swap buffers. 235@code{AV_DEV_TO_APP_DESTROY_WINDOW_BUFFER} - destroy OpenGL context. 236Application is also required to inform a device about current resolution by sending @code{AV_APP_TO_DEV_WINDOW_SIZE} message. 237 238@subsection Options 239@table @option 240 241@item background 242Set background color. Black is a default. 243@item no_window 244Disables default SDL window when set to non-zero value. 245Application must provide OpenGL context and both @code{window_size_cb} and @code{window_swap_buffers_cb} callbacks when set. 246@item window_title 247Set the SDL window title, if not specified default to the filename specified for the output device. 248Ignored when @option{no_window} is set. 249@item window_size 250Set preferred window size, can be a string of the form widthxheight or a video size abbreviation. 251If not specified it defaults to the size of the input video, downscaled according to the aspect ratio. 252Mostly usable when @option{no_window} is not set. 253 254@end table 255 256@subsection Examples 257Play a file on SDL window using OpenGL rendering: 258@example 259ffmpeg -i INPUT -f opengl "window title" 260@end example 261 262@section oss 263 264OSS (Open Sound System) output device. 265 266@section pulse 267 268PulseAudio output device. 269 270To enable this output device you need to configure FFmpeg with @code{--enable-libpulse}. 271 272More information about PulseAudio can be found on @url{http://www.pulseaudio.org} 273 274@subsection Options 275@table @option 276 277@item server 278Connect to a specific PulseAudio server, specified by an IP address. 279Default server is used when not provided. 280 281@item name 282Specify the application name PulseAudio will use when showing active clients, 283by default it is the @code{LIBAVFORMAT_IDENT} string. 284 285@item stream_name 286Specify the stream name PulseAudio will use when showing active streams, 287by default it is set to the specified output name. 288 289@item device 290Specify the device to use. Default device is used when not provided. 291List of output devices can be obtained with command @command{pactl list sinks}. 292 293@item buffer_size 294@item buffer_duration 295Control the size and duration of the PulseAudio buffer. A small buffer 296gives more control, but requires more frequent updates. 297 298@option{buffer_size} specifies size in bytes while 299@option{buffer_duration} specifies duration in milliseconds. 300 301When both options are provided then the highest value is used 302(duration is recalculated to bytes using stream parameters). If they 303are set to 0 (which is default), the device will use the default 304PulseAudio duration value. By default PulseAudio set buffer duration 305to around 2 seconds. 306 307@item prebuf 308Specify pre-buffering size in bytes. The server does not start with 309playback before at least @option{prebuf} bytes are available in the 310buffer. By default this option is initialized to the same value as 311@option{buffer_size} or @option{buffer_duration} (whichever is bigger). 312 313@item minreq 314Specify minimum request size in bytes. The server does not request less 315than @option{minreq} bytes from the client, instead waits until the buffer 316is free enough to request more bytes at once. It is recommended to not set 317this option, which will initialize this to a value that is deemed sensible 318by the server. 319 320@end table 321 322@subsection Examples 323Play a file on default device on default server: 324@example 325ffmpeg -i INPUT -f pulse "stream name" 326@end example 327 328@section sdl 329 330SDL (Simple DirectMedia Layer) output device. 331 332"sdl2" can be used as alias for "sdl". 333 334This output device allows one to show a video stream in an SDL 335window. Only one SDL window is allowed per application, so you can 336have only one instance of this output device in an application. 337 338To enable this output device you need libsdl installed on your system 339when configuring your build. 340 341For more information about SDL, check: 342@url{http://www.libsdl.org/} 343 344@subsection Options 345 346@table @option 347 348@item window_title 349Set the SDL window title, if not specified default to the filename 350specified for the output device. 351 352@item icon_title 353Set the name of the iconified SDL window, if not specified it is set 354to the same value of @var{window_title}. 355 356@item window_size 357Set the SDL window size, can be a string of the form 358@var{width}x@var{height} or a video size abbreviation. 359If not specified it defaults to the size of the input video, 360downscaled according to the aspect ratio. 361 362@item window_x 363@item window_y 364Set the position of the window on the screen. 365 366@item window_fullscreen 367Set fullscreen mode when non-zero value is provided. 368Default value is zero. 369 370@item window_enable_quit 371Enable quit action (using window button or keyboard key) 372when non-zero value is provided. 373Default value is 1 (enable quit action) 374@end table 375 376@subsection Interactive commands 377 378The window created by the device can be controlled through the 379following interactive commands. 380 381@table @key 382@item q, ESC 383Quit the device immediately. 384@end table 385 386@subsection Examples 387 388The following command shows the @command{ffmpeg} output is an 389SDL window, forcing its size to the qcif format: 390@example 391ffmpeg -i INPUT -c:v rawvideo -pix_fmt yuv420p -window_size qcif -f sdl "SDL output" 392@end example 393 394@section sndio 395 396sndio audio output device. 397 398@section v4l2 399 400Video4Linux2 output device. 401 402@section xv 403 404XV (XVideo) output device. 405 406This output device allows one to show a video stream in a X Window System 407window. 408 409@subsection Options 410 411@table @option 412@item display_name 413Specify the hardware display name, which determines the display and 414communications domain to be used. 415 416The display name or DISPLAY environment variable can be a string in 417the format @var{hostname}[:@var{number}[.@var{screen_number}]]. 418 419@var{hostname} specifies the name of the host machine on which the 420display is physically attached. @var{number} specifies the number of 421the display server on that host machine. @var{screen_number} specifies 422the screen to be used on that server. 423 424If unspecified, it defaults to the value of the DISPLAY environment 425variable. 426 427For example, @code{dual-headed:0.1} would specify screen 1 of display 4280 on the machine named ``dual-headed''. 429 430Check the X11 specification for more detailed information about the 431display name format. 432 433@item window_id 434When set to non-zero value then device doesn't create new window, 435but uses existing one with provided @var{window_id}. By default 436this options is set to zero and device creates its own window. 437 438@item window_size 439Set the created window size, can be a string of the form 440@var{width}x@var{height} or a video size abbreviation. If not 441specified it defaults to the size of the input video. 442Ignored when @var{window_id} is set. 443 444@item window_x 445@item window_y 446Set the X and Y window offsets for the created window. They are both 447set to 0 by default. The values may be ignored by the window manager. 448Ignored when @var{window_id} is set. 449 450@item window_title 451Set the window title, if not specified default to the filename 452specified for the output device. Ignored when @var{window_id} is set. 453@end table 454 455For more information about XVideo see @url{http://www.x.org/}. 456 457@subsection Examples 458 459@itemize 460@item 461Decode, display and encode video input with @command{ffmpeg} at the 462same time: 463@example 464ffmpeg -i INPUT OUTPUT -f xv display 465@end example 466 467@item 468Decode and display the input video to multiple X11 windows: 469@example 470ffmpeg -i INPUT -f xv normal -vf negate -f xv negated 471@end example 472@end itemize 473 474@c man end OUTPUT DEVICES 475