xref: /third_party/ffmpeg/doc/outdevs.texi (revision cabdff1a)
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