1 @chapter Output Devices
2 @c man begin OUTPUT DEVICES
4 Output devices are configured elements in FFmpeg that can write
5 multimedia data to an output device attached to your system.
7 When you configure your FFmpeg build, all the supported output devices
8 are enabled by default. You can list all available ones using the
9 configure option "--list-outdevs".
11 You can disable all the output devices using the configure option
12 "--disable-outdevs", and selectively enable an output device using the
13 option "--enable-outdev=@var{OUTDEV}", or you can disable a particular
14 input device using the option "--disable-outdev=@var{OUTDEV}".
16 The option "-devices" of the ff* tools will display the list of
17 enabled output devices.
19 A description of the currently available output devices follows.
23 ALSA (Advanced Linux Sound Architecture) output device.
29 Play a file on default ALSA device:
31 ffmpeg -i INPUT -f alsa default
35 Play a file on soundcard 1, audio device 7:
37 ffmpeg -i INPUT -f alsa hw:1,7
43 AudioToolbox output device.
45 Allows native output to CoreAudio devices on OSX.
47 The 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}.
49 Alternatively, the audio input device can be chosen by index using the
51 -audio_device_index <INDEX>
53 , overriding any device name or index given in the input filename.
55 All available devices can be enumerated by using @option{-list_devices true}, listing
56 all device names, UIDs and corresponding indices.
60 AudioToolbox supports the following options:
64 @item -audio_device_index <INDEX>
65 Specify the audio device by its index. Overrides anything given in the output filename.
74 Print the list of supported devices and output a sine wave to the default device:
76 $ ffmpeg -f lavfi -i sine=r=44100 -f audiotoolbox -list_devices true -
80 Output a sine wave to the device with the index 2, overriding any output filename:
82 $ ffmpeg -f lavfi -i sine=r=44100 -f audiotoolbox -audio_device_index 2 -
91 This output device allows one to show a video stream in CACA window.
92 Only one CACA window is allowed per application, so you can
93 have only one instance of this output device in an application.
95 To enable this output device you need to configure FFmpeg with
96 @code{--enable-libcaca}.
97 libcaca is a graphics library that outputs text instead of pixels.
99 For more information about libcaca, check:
100 @url{http://caca.zoy.org/wiki/libcaca}
107 Set the CACA window title, if not specified default to the filename
108 specified for the output device.
111 Set the CACA window size, can be a string of the form
112 @var{width}x@var{height} or a video size abbreviation.
113 If not specified it defaults to the size of the input video.
119 Set dithering algorithm. Dithering is necessary
120 because the picture being rendered has usually far more colours than
121 the available palette.
122 The accepted values are listed with @code{-list_dither algorithms}.
125 Set antialias method. Antialiasing smoothens the rendered
126 image and avoids the commonly seen staircase effect.
127 The accepted values are listed with @code{-list_dither antialiases}.
130 Set which characters are going to be used when rendering text.
131 The accepted values are listed with @code{-list_dither charsets}.
134 Set color to be used when rendering text.
135 The accepted values are listed with @code{-list_dither colors}.
138 If set to @option{true}, print a list of available drivers and exit.
141 List available dither options related to the argument.
142 The argument must be one of @code{algorithms}, @code{antialiases},
143 @code{charsets}, @code{colors}.
150 The following command shows the @command{ffmpeg} output is an
151 CACA window, forcing its size to 80x25:
153 ffmpeg -i INPUT -c:v rawvideo -pix_fmt rgb24 -window_size 80x25 -f caca -
157 Show the list of available drivers and exit:
159 ffmpeg -i INPUT -pix_fmt rgb24 -f caca -list_drivers true -
163 Show the list of available dither colors and exit:
165 ffmpeg -i INPUT -pix_fmt rgb24 -f caca -list_dither colors -
171 The decklink output device provides playback capabilities for Blackmagic
174 To enable this output device, you need the Blackmagic DeckLink SDK and you
175 need to configure with the appropriate @code{--extra-cflags}
176 and @code{--extra-ldflags}.
177 On Windows, you need to run the IDL files through @command{widl}.
179 DeckLink is very picky about the formats it supports. Pixel format is always
180 uyvy422, framerate, field order and video size must be determined for your
181 device with @command{-list_formats 1}. Audio sample rate is always 48 kHz.
188 If set to @option{true}, print a list of devices and exit.
189 Defaults to @option{false}. This option is deprecated, please use the
190 @code{-sinks} option of ffmpeg to list the available output devices.
193 If set to @option{true}, print a list of supported formats and exit.
194 Defaults to @option{false}.
197 Amount of time to preroll video in seconds.
198 Defaults to @option{0.5}.
201 Sets the decklink device duplex mode. Must be @samp{unset}, @samp{half} or @samp{full}.
202 Defaults to @samp{unset}.
205 Sets the genlock timing pixel offset on the used output.
206 Defaults to @samp{unset}.
217 ffmpeg -sinks decklink
221 List supported formats:
223 ffmpeg -i test.avi -f decklink -list_formats 1 'DeckLink Mini Monitor'
229 ffmpeg -i test.avi -f decklink -pix_fmt uyvy422 'DeckLink Mini Monitor'
233 Play video clip with non-standard framerate or video size:
235 ffmpeg -i test.avi -f decklink -pix_fmt uyvy422 -s 720x486 -r 24000/1001 'DeckLink Mini Monitor'
242 Linux framebuffer output device.
244 The Linux framebuffer is a graphic hardware-independent abstraction
245 layer to show graphics on a computer monitor, typically on the
246 console. It is accessed through a file device node, usually
249 For more detailed information read the file
250 @file{Documentation/fb/framebuffer.txt} included in the Linux source tree.
257 Set x/y coordinate of top left corner. Default is 0.
261 Play a file on framebuffer device @file{/dev/fb0}.
262 Required pixel format depends on current framebuffer settings.
264 ffmpeg -re -i INPUT -c:v rawvideo -pix_fmt bgra -f fbdev /dev/fb0
267 See also @url{http://linux-fbdev.sourceforge.net/}, and fbset(1).
270 OpenGL output device.
272 To enable this output device you need to configure FFmpeg with @code{--enable-opengl}.
274 This output device allows one to render to OpenGL context.
275 Context may be provided by application or default SDL window is created.
277 When device renders to external context, application must implement handlers for following messages:
278 @code{AV_DEV_TO_APP_CREATE_WINDOW_BUFFER} - create OpenGL context on current thread.
279 @code{AV_DEV_TO_APP_PREPARE_WINDOW_BUFFER} - make OpenGL context current.
280 @code{AV_DEV_TO_APP_DISPLAY_WINDOW_BUFFER} - swap buffers.
281 @code{AV_DEV_TO_APP_DESTROY_WINDOW_BUFFER} - destroy OpenGL context.
282 Application is also required to inform a device about current resolution by sending @code{AV_APP_TO_DEV_WINDOW_SIZE} message.
288 Set background color. Black is a default.
290 Disables default SDL window when set to non-zero value.
291 Application must provide OpenGL context and both @code{window_size_cb} and @code{window_swap_buffers_cb} callbacks when set.
293 Set the SDL window title, if not specified default to the filename specified for the output device.
294 Ignored when @option{no_window} is set.
296 Set preferred window size, can be a string of the form widthxheight or a video size abbreviation.
297 If not specified it defaults to the size of the input video, downscaled according to the aspect ratio.
298 Mostly usable when @option{no_window} is not set.
303 Play a file on SDL window using OpenGL rendering:
305 ffmpeg -i INPUT -f opengl "window title"
310 OSS (Open Sound System) output device.
314 PulseAudio output device.
316 To enable this output device you need to configure FFmpeg with @code{--enable-libpulse}.
318 More information about PulseAudio can be found on @url{http://www.pulseaudio.org}
324 Connect to a specific PulseAudio server, specified by an IP address.
325 Default server is used when not provided.
328 Specify the application name PulseAudio will use when showing active clients,
329 by default it is the @code{LIBAVFORMAT_IDENT} string.
332 Specify the stream name PulseAudio will use when showing active streams,
333 by default it is set to the specified output name.
336 Specify the device to use. Default device is used when not provided.
337 List of output devices can be obtained with command @command{pactl list sinks}.
340 @item buffer_duration
341 Control the size and duration of the PulseAudio buffer. A small buffer
342 gives more control, but requires more frequent updates.
344 @option{buffer_size} specifies size in bytes while
345 @option{buffer_duration} specifies duration in milliseconds.
347 When both options are provided then the highest value is used
348 (duration is recalculated to bytes using stream parameters). If they
349 are set to 0 (which is default), the device will use the default
350 PulseAudio duration value. By default PulseAudio set buffer duration
354 Specify pre-buffering size in bytes. The server does not start with
355 playback before at least @option{prebuf} bytes are available in the
356 buffer. By default this option is initialized to the same value as
357 @option{buffer_size} or @option{buffer_duration} (whichever is bigger).
360 Specify minimum request size in bytes. The server does not request less
361 than @option{minreq} bytes from the client, instead waits until the buffer
362 is free enough to request more bytes at once. It is recommended to not set
363 this option, which will initialize this to a value that is deemed sensible
369 Play a file on default device on default server:
371 ffmpeg -i INPUT -f pulse "stream name"
376 SDL (Simple DirectMedia Layer) output device.
378 "sdl2" can be used as alias for "sdl".
380 This output device allows one to show a video stream in an SDL
381 window. Only one SDL window is allowed per application, so you can
382 have only one instance of this output device in an application.
384 To enable this output device you need libsdl installed on your system
385 when configuring your build.
387 For more information about SDL, check:
388 @url{http://www.libsdl.org/}
395 Set the SDL window title, if not specified default to the filename
396 specified for the output device.
399 Set the name of the iconified SDL window, if not specified it is set
400 to the same value of @var{window_title}.
403 Set the SDL window size, can be a string of the form
404 @var{width}x@var{height} or a video size abbreviation.
405 If not specified it defaults to the size of the input video,
406 downscaled according to the aspect ratio.
410 Set the position of the window on the screen.
412 @item window_fullscreen
413 Set fullscreen mode when non-zero value is provided.
414 Default value is zero.
416 @item window_enable_quit
417 Enable quit action (using window button or keyboard key)
418 when non-zero value is provided.
419 Default value is 1 (enable quit action)
422 @subsection Interactive commands
424 The window created by the device can be controlled through the
425 following interactive commands.
429 Quit the device immediately.
434 The following command shows the @command{ffmpeg} output is an
435 SDL window, forcing its size to the qcif format:
437 ffmpeg -i INPUT -c:v rawvideo -pix_fmt yuv420p -window_size qcif -f sdl "SDL output"
442 sndio audio output device.
446 Video4Linux2 output device.
450 XV (XVideo) output device.
452 This output device allows one to show a video stream in a X Window System
459 Specify the hardware display name, which determines the display and
460 communications domain to be used.
462 The display name or DISPLAY environment variable can be a string in
463 the format @var{hostname}[:@var{number}[.@var{screen_number}]].
465 @var{hostname} specifies the name of the host machine on which the
466 display is physically attached. @var{number} specifies the number of
467 the display server on that host machine. @var{screen_number} specifies
468 the screen to be used on that server.
470 If unspecified, it defaults to the value of the DISPLAY environment
473 For example, @code{dual-headed:0.1} would specify screen 1 of display
474 0 on the machine named ``dual-headed''.
476 Check the X11 specification for more detailed information about the
480 When set to non-zero value then device doesn't create new window,
481 but uses existing one with provided @var{window_id}. By default
482 this options is set to zero and device creates its own window.
485 Set the created window size, can be a string of the form
486 @var{width}x@var{height} or a video size abbreviation. If not
487 specified it defaults to the size of the input video.
488 Ignored when @var{window_id} is set.
492 Set the X and Y window offsets for the created window. They are both
493 set to 0 by default. The values may be ignored by the window manager.
494 Ignored when @var{window_id} is set.
497 Set the window title, if not specified default to the filename
498 specified for the output device. Ignored when @var{window_id} is set.
501 For more information about XVideo see @url{http://www.x.org/}.
507 Decode, display and encode video input with @command{ffmpeg} at the
510 ffmpeg -i INPUT OUTPUT -f xv display
514 Decode and display the input video to multiple X11 windows:
516 ffmpeg -i INPUT -f xv normal -vf negate -f xv negated
520 @c man end OUTPUT DEVICES