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