⚠️ 这是一个非官方翻译网站,与 FFmpeg 项目无关。准确信息请参阅原文(https://ffmpeg.org/ffmpeg-devices.html)

FFmpeg 设备文档

1 描述

本文档描述 libavdevice 库提供的输入和输出设备。

2 设备选项

libavdevice 库提供的接口与 libavformat 相同:输入设备被视为一个 demuxer,输出设备被视为一个复用器,接口和通用设备选项也与 libavformat 提供的相同(参见 ffmpeg-formats 手册)。

此外,每个输入或输出设备还可能支持所谓的私有选项,这些选项是该组件特有的。

可以在 FFmpeg 工具中通过指定 -option value 来设置选项,也可以在设备的 AVFormatContext 选项中直接设置值,或者在编程时使用 libavutil/opt.h API 进行设置。

3 输入设备

输入设备是 FFmpeg 中的配置元素,用于访问连接到系统的多媒体设备所产生的数据。

配置 FFmpeg 构建时,所有受支持的输入设备默认都会启用。可以使用 configure 选项 "–list-indevs" 列出所有可用的输入设备。

可以使用 configure 选项 "–disable-indevs" 禁用所有输入设备,使用 "–enable-indev=INDEV" 选项有选择地启用某个输入设备,或使用 "–disable-indev=INDEV" 选项禁用特定的输入设备。

ff* 工具的 "-devices" 选项会显示受支持输入设备的列表。

以下是当前可用输入设备的说明。

3.1 alsa

ALSA(Advanced Linux Sound Architecture)输入设备。

要在编译配置时启用此输入设备,系统上需要安装 libasound。

此设备允许从 ALSA 设备采集数据。要采集的设备名称必须是 ALSA 声卡标识符。

ALSA 标识符的语法为:

hw:CARD[,DEV[,SUBDEV]]

其中 DEV 和 SUBDEV 部分是可选的。

这三个参数(依次为 CARD、DEV、SUBDEV)指定声卡编号或标识符、设备编号和子设备编号(-1 表示任意)。

要查看系统当前识别到的声卡列表,请检查 /proc/asound/cards 和 /proc/asound/devices 这两个文件。

例如,要使用 ffmpeg 从 card id 为 0 的 ALSA 设备采集,可以运行以下命令:

ffmpeg -f alsa -i hw:0 alsaout.wav

更多信息参见:http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html

3.1.1 选项

sample_rate

以 Hz 为单位设置采样率。默认值为 48000。

channels

设置声道数。默认值为 2。

3.2 android_camera

Android camera 输入设备。

此输入设备使用 Android Camera2 NDK API,该 API 在 API level 24 及以上的设备上可用。android_camera 是否可用会在编译配置时自动检测。

此设备允许从集成到 Camera2 NDK API 中的 Android 设备上的所有摄像头采集数据。

可用的摄像头会在内部枚举,可以通过 camera_index 参数选择。输入文件名字符串会被忽略。

通常后置摄像头的索引为 0,前置摄像头的索引为 1。

3.2.1 选项

video_size

以字符串形式设置视频尺寸,例如 640x480 或 hd720。如果请求的视频尺寸不可用,或者按默认设置,会回退到 Android 报告的第一个可用配置。

framerate

设置视频帧率。如果请求的帧率不可用,或者按默认设置(-1),会回退到 Android 报告的第一个可用配置。

camera_index

设置要使用的摄像头索引。默认值为 0。

input_queue_size

设置要缓冲的最大帧数。默认值为 5。

3.3 avfoundation

AVFoundation 输入设备。

AVFoundation 是 Apple 目前推荐用于在 OSX >= 10.7 及 iOS 上进行流采集的框架。

输入文件名必须按以下语法给出:

-i "[[VIDEO]:[AUDIO]]"

第一个条目选择视频输入,后一个条目选择音频输入。流必须通过设备名称或设备列表中显示的设备索引来指定。此外,也可以使用 -video_device_index 和/或 -audio_device_index 按索引选择视频和/或音频输入设备,这会覆盖输入文件名中给出的任何设备名称或索引。

使用 -list_devices true 可以枚举所有可用设备,列出所有设备名称及对应索引。

设备名称有两个别名:

default

选择对应类型的 AVFoundation 默认设备。

none

不录制对应的媒体类型。这等同于指定一个空的设备名称或索引。

3.3.1 选项

AVFoundation 支持以下选项:

-list_devices

如果设置为 true,会给出所有可用输入设备的列表,显示所有设备名称和索引。

-video_device_index

按索引指定视频设备。会覆盖输入文件名中给出的设置。

-audio_device_index

按索引指定音频设备。会覆盖输入文件名中给出的设置。

-pixel_format

请求视频设备使用指定的 pixel format。如果指定的格式不受支持,会给出可用格式的列表,并改用列表中的第一个格式。可用的 pixel format 有:monob, rgb555be, rgb555le, rgb565be, rgb565le, rgb24, bgr24, 0rgb, bgr0, 0bgr, rgb0, bgr48be, uyvy422, yuva444p, yuva444p16le, yuv444p, yuv422p16, yuv422p10, yuv444p10, yuv420p, nv12, yuyv422, gray

-framerate

设置采集帧率。默认值为 ntsc,对应帧率为 30000/1001

-video_size

设置视频帧尺寸。

-capture_cursor

采集鼠标指针。默认值为 0。

-capture_mouse_clicks

采集屏幕上的鼠标点击。默认值为 0。

-capture_raw_data

采集设备的原始数据。默认值为 0。使用此选项可能会接收到传递给 AVFoundation 框架的底层数据。例如,对于把原始 DV 数据封装后发送给该框架的设备(如基于磁带的摄像机)而言,将此选项设为 false 时,只会以指定的 pixel format 提取采集到的视频帧;将此选项设为 true 时,则会原样接收未经处理的原始 DV 流。

3.3.2 示例

  • 输出 AVFoundation 支持的设备列表并退出:

    $ ffmpeg -f avfoundation -list_devices true -i ""
    
  • 从 0 号视频设备采集视频、从 0 号音频设备采集音频,输出到 out.avi:

    $ ffmpeg -f avfoundation -i "0:0" out.avi
    
  • 从 2 号视频设备采集视频、从 1 号音频设备采集音频,输出到 out.avi:

    $ ffmpeg -f avfoundation -video_device_index 2 -i ":1" out.avi
    
  • 使用 bgr0 pixel format,从系统默认视频设备采集视频,且不录制任何音频,输出到 out.avi:

    $ ffmpeg -f avfoundation -pixel_format bgr0 -i "default:none" out.avi
    
  • 从合适的输入设备采集原始 DV 数据,将输出写入 out.dv:

    $ ffmpeg -f avfoundation -capture_raw_data true -i "zr100:none" out.dv
    

decklink 输入设备为 Blackmagic DeckLink 设备提供采集能力。

要启用此输入设备,需要 Blackmagic DeckLink SDK,并使用相应的 --extra-cflags--extra-ldflags 进行配置。在 Windows 上,需要通过 widl 运行 IDL 文件。

DeckLink 对其支持的格式要求非常严格。输入的 pixel format 可以用 raw_format 设置。帧率和视频尺寸必须使用 -list_formats 1 针对你的设备确定。音频采样率始终为 48 kHz,声道数可以是 2、8 或 16。请注意,所有音频声道都会捆绑在同一条音轨中。

3.4.1 选项

list_devices

如果设置为 true,打印设备列表并退出。默认值为 false。此选项已弃用,请改用 ffmpeg 的 -sources 选项列出可用的输入设备。

list_formats

如果设置为 true,打印受支持的格式列表并退出。默认值为 false。

format_code

将输入视频格式设置为由 FourCC 给出的格式。要查看设备支持的取值,请使用 list_formats。请注意,存在一个 FourCC 'pal ',也可以写作 pal(3 个字母)。默认行为是在硬件支持的情况下自动检测输入视频格式。

raw_format

设置采集到的视频的 pixel format。可用值有:

‘auto’

这是默认值,表示在使用格式自动检测时为 8 位 YUV 422 或 8 位 ARGB,否则为 8 位 YUV 422。

‘uyvy422’

8 位 YUV 422。

‘yuv422p10’

10 位 YUV 422。

‘argb’

8 位 RGB。

‘bgra’

8 位 RGB。

‘rgb10’

10 位 RGB。

teletext_lines

如果设置为非零值,会从垂直辅助数据中额外采集一路图文电视(teletext)流。SD PAL(576i)和 HD(1080i 或 1080p)信号源均受支持。对于 HD 信号源,会解码 OP47 数据包。

此选项是所采集 SD PAL VBI 行的位掩码,具体为第 6 至 22 行以及第 318 至 335 行。第 6 行是掩码中的最低有效位(LSB)。不含图文电视信息的已选行会被忽略。可以使用特殊常量 all 选择所有可能的行,或使用 standard 跳过第 6、318、319 行(这几行并非所有接收设备都兼容)。

对于 SD 信号源,ffmpeg 需要编译时启用 --enable-libzvbi。对于 HD 信号源,在较旧(4K 之前)的 DeckLink 板卡型号上必须以 10 位模式采集。

channels

定义要采集的音频声道数。必须是 ‘2’、‘8’ 或 ‘16’。默认值为 ‘2’。

duplex_mode

设置 decklink 设备的 duplex/profile 模式。必须是 ‘unset’、‘half’、‘full’、‘one_sub_device_full’、‘one_sub_device_half’、‘two_sub_device_full’、‘four_sub_device_half’ 之一。默认值为 ‘unset’。

注意:DeckLink SDK 11.0 已用 profile 属性取代了 duplex 属性。对于 DeckLink Duo 2 和 DeckLink Quad 2,使用同一组连接器的任意 2 个子设备共享一个 profile。对于 DeckLink 8K Pro,全部 4 个子设备共享一个 profile。因此 DeckLink 8K Pro 支持四种 profile。

DeckLink 8K Pro(DeckLink SDK >= 11.0)的有效 profile 模式:‘one_sub_device_full’、‘one_sub_device_half’、‘two_sub_device_full’、‘four_sub_device_half’

DeckLink Quad 2 和 DeckLink Duo 2 的有效 profile 模式:‘half’、‘full’

timecode_format

设置要包含在帧和视频流元数据中的时间码类型。必须是 ‘none’、‘rp188vitc’、‘rp188vitc2’、‘rp188ltc’、‘rp188hfr’、‘rp188any’、‘vitc’、‘vitc2’ 或 ‘serial’ 之一。默认值为 ‘none’(即不包含)。

为了正确支持 50/60 fps 的时间码,对于帧率 >30 fps 的内容,‘rp188any’ 查询时间码类型的顺序为 HFR、VITC1、VITC2、LTC。请注意,这与 DeckLink API 使用的顺序(HFR、VITC1、LTC、VITC2)略有不同。

video_input

设置视频输入源。必须是 ‘unset’、‘sdi’、‘hdmi’、‘optical_sdi’、‘component’、‘composite’ 或 ‘s_video’ 之一。默认值为 ‘unset’。

audio_input

设置音频输入源。必须是 ‘unset’、‘embedded’、‘aes_ebu’、‘analog’、‘analog_xlr’、‘analog_rca’ 或 ‘microphone’ 之一。默认值为 ‘unset’。

video_pts

设置视频数据包时间戳的来源。必须是 ‘video’、‘audio’、‘reference’、‘wallclock’ 或 ‘abs_wallclock’ 之一。默认值为 ‘video’。

audio_pts

设置音频数据包时间戳的来源。必须是 ‘video’、‘audio’、‘reference’、‘wallclock’ 或 ‘abs_wallclock’ 之一。默认值为 ‘audio’。

draw_bars

如果设置为 ‘true’,在发生信号丢失时会绘制彩条。默认值为 ‘true’。此选项已弃用,请改用 signal_loss_action 选项。

signal_loss_action

设置发生信号丢失时要采取的动作。接受以下取值之一:

1, none

信号丢失时不做任何处理。这通常会导致出现黑场。

2, bars

信号丢失时绘制彩条。仅支持 8 位输入信号。

3, repeat

信号丢失时重复上一视频帧。

默认值为 ‘bars’。

queue_size

设置输入缓冲区的最大字节数。如果缓冲达到该值,到来的帧会被丢弃。默认值为 ‘1073741824’。

audio_depth

设置音频采样位深度。必须是 ‘16’ 或 ‘32’。默认值为 ‘16’。

decklink_copyts

如果设置为 true,时间戳会原样转发,不去除初始偏移量。默认值为 false。

timestamp_align

以秒为单位设置采集起始时间对齐点。如果设置为非零值,输入帧会被丢弃,直到系统时间戳与所配置的值对齐为止。允许最多一帧时长的对齐误差。此选项适用于在为“N 路”冗余部署的 N 台不同硬件设备之间保持输入同步。在使用此选项之前,不同硬件设备的系统时间应通过 NTP 或 PTP 等协议进行同步。请注意,此方法并非万无一失。在某些边界情况下,由于操作系统的线程调度抖动,输入同步可能不会发生。同步误差可能是 1 帧,在较少见的情况下则可能是 timestamp_align 所设置的秒数。默认值为 ‘0’。

wait_for_tc (bool)

丢弃帧,直到接收到带时间码的帧为止。有时序列时间码不会随第一个输入帧一起接收到,一旦发生这种情况,已存储的流时间码就会不准确。如果此选项设置为 true,输入帧会被丢弃,直到接收到带时间码的帧为止。必须同时指定 timecode_format 选项。默认值为 false。

enable_klv(bool)

如果设置为 true,会从 VANC 中提取 KLV 数据并输出 KLV 数据包。KLV VANC 数据包会根据 MID 和 PSC 字段拼接,并聚合为一个 KLV 数据包。默认值为 false。

3.4.2 示例

  • 列出输入设备:

    ffmpeg -sources decklink
    
  • 列出受支持的格式:

    ffmpeg -f decklink -list_formats 1 -i 'Intensity Pro'
    
  • 以 1080i50 采集视频片段:

    ffmpeg -format_code Hi50 -f decklink -i 'Intensity Pro' -c:a copy -c:v copy output.avi
    
  • 以 1080i50、10 位采集视频片段:

    ffmpeg -raw_format yuv422p10 -format_code Hi50 -f decklink -i 'UltraStudio Mini Recorder' -c:a copy -c:v copy output.avi
    
  • 以 1080i50、16 路音频声道采集视频片段:

    ffmpeg -channels 16 -format_code Hi50 -f decklink -i 'UltraStudio Mini Recorder' -c:a copy -c:v copy output.avi
    

3.5 dshow

Windows DirectShow 输入设备。

当 FFmpeg 使用 mingw-w64 项目构建时会启用 DirectShow 支持。目前只支持音频和视频设备。

多个设备既可以作为独立的输入分别打开,也可以在同一个输入上打开,这样做应该能提升它们之间的同步性。

输入名称应采用以下格式:

TYPE=NAME[:TYPE=NAME]

其中 TYPE 可以是 audio 或 video,NAME 是设备的名称或别名。

3.5.1 选项

如果未指定任何选项,会使用设备的默认值。如果设备不支持所请求的选项,会打开失败。

video_size

设置采集视频的视频尺寸。

framerate

设置采集视频的帧率。

sample_rate

设置采集音频的采样率(单位 Hz)。

sample_size

设置采集音频的采样位数(单位 bit)。

channels

设置采集音频的声道数。

list_devices

如果设置为 true,打印设备列表并退出。

list_options

如果设置为 true,打印所选设备的选项列表并退出。

video_device_number

为同名设备设置视频设备编号(从 0 开始,默认值为 0)。

audio_device_number

为同名设备设置音频设备编号(从 0 开始,默认值为 0)。

pixel_format

选择 DirectShow 要使用的 pixel format。此选项仅在未设置视频 codec 或将其设置为 rawvideo 时才可设置。

audio_buffer_size

以毫秒为单位设置音频设备缓冲区大小(这会直接影响延迟,具体取决于设备)。默认使用音频设备的默认缓冲区大小(通常是 500ms 的若干倍)。将此值设得过低可能会降低性能。另请参见 http://msdn.microsoft.com/en-us/library/windows/desktop/dd377582(v=vs.85).aspx

video_pin_name

按名称或别名选择要使用的视频采集 pin。

audio_pin_name

按名称或别名选择要使用的音频采集 pin。

crossbar_video_input_pin_number

为 crossbar 设备选择视频输入 pin 编号。它会被路由到该 crossbar 设备的 Video Decoder 输出 pin。请注意,更改此值会影响后续调用(会设置新的默认值),直到系统重新启动为止。

crossbar_audio_input_pin_number

为 crossbar 设备选择音频输入 pin 编号。它会被路由到该 crossbar 设备的 Audio Decoder 输出 pin。请注意,更改此值会影响后续调用(会设置新的默认值),直到系统重新启动为止。

show_video_device_dialog

如果设置为 true,在采集开始前会向最终用户弹出一个显示对话框,允许其手动更改视频过滤器的属性和配置。请注意,对于 crossbar 设备,有时需要在此对话框中调整取值,以便在 PAL(25 fps)和 NTSC(29.97 fps)输入帧率、尺寸、隔行方式等之间切换。更改这些值可以启用不同的扫描率/帧率,避免画面底部出现绿条、扫描线闪烁等问题。请注意,对于某些设备,更改这些属性也会影响后续调用(会设置新的默认值),直到系统重新启动为止。

show_audio_device_dialog

如果设置为 true,在采集开始前会向最终用户弹出一个显示对话框,允许其手动更改音频过滤器的属性和配置。

show_video_crossbar_connection_dialog

如果设置为 true,在打开视频设备时,采集开始前会向最终用户弹出一个显示对话框,允许其手动修改 crossbar pin 路由。

show_audio_crossbar_connection_dialog

如果设置为 true,在打开音频设备时,采集开始前会向最终用户弹出一个显示对话框,允许其手动修改 crossbar pin 路由。

show_analog_tv_tuner_dialog

如果设置为 true,采集开始前会向最终用户弹出一个显示对话框,允许其手动修改电视频道和频率。

show_analog_tv_tuner_audio_dialog

如果设置为 true,采集开始前会向最终用户弹出一个显示对话框,允许其手动修改电视音频(如单声道与立体声、A/B/C 语言等)。

audio_device_load

从文件加载音频采集过滤器设备,而不是按名称搜索。如果该过滤器支持属性序列化,也可能加载额外的参数。使用此选项时必须指定一个音频采集源,但可以是任意值,甚至是虚构的。

audio_device_save

将当前使用的音频采集过滤器设备及其参数(如果该过滤器支持)保存到文件。如果同名文件已存在,会被覆盖。

video_device_load

从文件加载视频采集过滤器设备,而不是按名称搜索。如果该过滤器支持属性序列化,也可能加载额外的参数。使用此选项时必须指定一个视频采集源,但可以是任意值,甚至是虚构的。

video_device_save

将当前使用的视频采集过滤器设备及其参数(如果该过滤器支持)保存到文件。如果同名文件已存在,会被覆盖。

use_video_device_timestamps

如果设置为 false,视频帧的时间戳会由 wallclock 推算,而不是使用采集设备提供的时间戳。这样可以规避某些设备提供的时间戳不可靠的问题。

3.5.2 示例

  • 输出 DirectShow 支持的设备列表并退出:

    $ ffmpeg -list_devices true -f dshow -i dummy
    
  • 打开视频设备 Camera:

    $ ffmpeg -f dshow -i video="Camera"
    
  • 打开名为 Camera 的第二个视频设备:

    $ ffmpeg -f dshow -video_device_number 1 -i video="Camera"
    
  • 打开视频设备 Camera 和音频设备 Microphone:

    $ ffmpeg -f dshow -i video="Camera":audio="Microphone"
    
  • 输出所选设备支持的选项列表并退出:

    $ ffmpeg -list_options true -f dshow -i video="Camera"
    
  • 按名称或别名指定要采集的 pin,并指定设备的别名:

    $ ffmpeg -f dshow -audio_pin_name "Audio Out" -video_pin_name 2 -i video=video="@device_pnp_\\?\pci#ven_1a0a&dev_6200&subsys_62021461&rev_01#4&e2c7dd6&0&00e1#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\{ca465100-deb0-4d59-818f-8c477184adf6}":audio="Microphone"
    
  • 配置一个 crossbar 设备,指定 crossbar pin,并允许用户在启动时调整视频采集属性:

    $ ffmpeg -f dshow -show_video_device_dialog true -crossbar_video_input_pin_number 0
         -crossbar_audio_input_pin_number 3 -i video="AVerMedia BDA Analog Capture":audio="AVerMedia BDA Analog Capture"
    

3.6 fbdev

Linux framebuffer 输入设备。

Linux framebuffer 是一个与图形硬件无关的抽象层,用于在计算机显示器(通常是控制台)上显示图形。它通过一个文件设备节点访问,通常是 /dev/fb0。

更详细的信息请阅读 Linux 源码树中包含的 Documentation/fb/framebuffer.txt 文件。

另请参见 http://linux-fbdev.sourceforge.net/ 以及 fbset(1)。

要使用 ffmpeg 从 framebuffer 设备 /dev/fb0 录制:

ffmpeg -f fbdev -framerate 10 -i /dev/fb0 out.avi

可以用以下命令截取单张屏幕截图:

ffmpeg -f fbdev -framerate 1 -i /dev/fb0 -frames:v 1 screenshot.jpeg

3.6.1 选项

framerate

设置帧率。默认值为 25。

3.7 gdigrab

基于 Win32 GDI 的屏幕采集设备。

此设备允许你在 Windows 上采集显示器的某个区域。

输入文件名可用的元素包括:

desktop

或者

title=window_title

或者

hwnd=window_hwnd

第一种方式会采集整个桌面,或桌面上的一个固定区域。第二种和第三种方式则会采集单个窗口的内容,不论其在屏幕上的位置如何。

例如,要使用 ffmpeg 抓取整个桌面:

ffmpeg -f gdigrab -framerate 6 -i desktop out.mpg

抓取位置 10,20 处 640x480 的区域:

ffmpeg -f gdigrab -framerate 6 -offset_x 10 -offset_y 20 -video_size vga -i desktop out.mpg

抓取名为 "Calculator" 的窗口内容

ffmpeg -f gdigrab -framerate 6 -i title=Calculator out.mpg

3.7.1 选项

draw_mouse

指定是否绘制鼠标指针。使用值 0 表示不绘制指针。默认值是 1

framerate

设置采集帧率。默认值为 ntsc,对应帧率 30000/1001

show_region

在屏幕上显示已抓取的区域。

如果 show_region 被指定为 1,抓取区域会在屏幕上被标示出来。有了这个选项,当只抓取屏幕的一部分时,很容易知道正在抓取的是哪部分。

请注意,show_region 与抓取单个窗口的内容不兼容。

例如:

ffmpeg -f gdigrab -show_region 1 -framerate 6 -video_size cif -offset_x 10 -offset_y 20 -i desktop out.mpg

video_size

设置视频帧尺寸。如果选择了 desktop,默认采集整个屏幕;如果选择了 title=window_title,默认采集整个窗口的尺寸。

offset_x

在使用 video_size 采集某个区域时,设置与屏幕或桌面左边缘的距离。

请注意,偏移量是从 Windows 主显示器的左上角计算的。如果你有一台位于主显示器左侧的显示器,需要使用负的 offset_x 值才能将区域移动到那台显示器上。

offset_y

在使用 video_size 采集某个区域时,设置与屏幕或桌面上边缘的距离。

请注意,偏移量是从 Windows 主显示器的左上角计算的。如果你有一台位于主显示器上方的显示器,需要使用负的 offset_y 值才能将区域移动到那台显示器上。

3.8 iec61883

使用 libiec61883 的 FireWire DV/HDV 输入设备。

要启用此输入设备,系统上需要安装 libiec61883、libraw1394 和 libavc1394。使用 configure 选项 --enable-libiec61883 编译并启用该设备。

iec61883 采集设备支持使用 libiec61883 和新的 Linux FireWire 协议栈(juju),从通过 IEEE1394(FireWire)连接的视频设备采集数据。这是 Linux 内核 2.6.37 及之后版本中默认的 DV/HDV 输入方式,因为旧的 FireWire 协议栈已被移除。

将要使用的 FireWire 端口指定为输入文件,或指定 "auto" 来选择第一个已连接的端口。

3.8.1 选项

dvtype

覆盖 DV/HDV 的自动检测。此选项只应在自动检测不起作用,或需要禁止使用不同设备类型时才使用。将 DV 设备当作 HDV 处理(反之亦然)不会正常工作,并会导致未定义行为。支持的取值为 auto、dv 和 hdv。

dvbuffer

以帧为单位设置传入数据缓冲区的最大大小。对于 DV,这是一个精确值;对于 HDV,由于其没有固定的帧大小,该值并不精确。

dvguid

通过指定 GUID 选择采集设备。只会从指定设备采集数据,如果找不到具有给定 GUID 的设备则会失败。当同时连接了多个设备时,这有助于选定输入设备。可以查看 /sys/bus/firewire/devices 来找出 GUID。

3.8.2 示例

  • 采集并显示某个 FireWire DV/HDV 设备的输入。

    ffplay -f iec61883 -i auto
    
  • 采集并录制某个 FireWire DV/HDV 设备的输入,若信号源为 HDV,则使用容量为 100000 个数据包的数据包缓冲区。

    ffmpeg -f iec61883 -i auto -dvbuffer 100000 out.mpg
    

3.9 jack

JACK 输入设备。

要在编译配置时启用此输入设备,系统上需要安装 libjack。

一个 JACK 输入设备会创建一个或多个 JACK 可写客户端,每个音频声道对应一个,名称为 client_name:input_N,其中 client_name 是应用程序提供的名称,N 是标识该声道的编号。每个可写客户端都会将采集到的数据发送给 FFmpeg 输入设备。

创建一个或多个 JACK 可读客户端后,需要将它们连接到一个或多个 JACK 可写客户端。

要连接或断开 JACK 客户端,可以使用 jack_connectjack_disconnect 程序,也可以通过图形界面进行,例如使用 qjackctl

要列出 JACK 客户端及其属性,可以调用命令 jack_lsp

下面的示例展示了如何用 ffmpeg 采集一个 JACK 可读客户端。

# Create a JACK writable client with name "ffmpeg".
$ ffmpeg -f jack -i ffmpeg -y out.wav

# Start the sample jack_metro readable client.
$ jack_metro -b 120 -d 0.2 -f 4000

# List the current JACK clients.
$ jack_lsp -c
system:capture_1
system:capture_2
system:playback_1
system:playback_2
ffmpeg:input_1
metro:120_bpm

# Connect metro to the ffmpeg writable client.
$ jack_connect metro:120_bpm ffmpeg:input_1

更多信息请阅读:http://jackaudio.org/

3.9.1 选项

channels

设置声道数。默认值为 2。

3.10 kmsgrab

KMS 视频输入设备。

将与指定 CRTC 或 plane 相关联的 KMS 扫描输出 framebuffer,以可传递给其他硬件功能的 DRM 对象形式采集下来。

运行时需要具备 DRM master 权限或 CAP_SYS_ADMIN 权限。

如果你看不懂上面这些术语的含义,那么你大概率并不需要这个设备,请改用 x11grab。

3.10.1 选项

device

要在其上采集的 DRM 设备。默认值为 /dev/dri/card0。

format

framebuffer 的 pixel format。如果你运行的是 Linux 5.7 或更高版本,可以自动检测;更早的版本则需要提供该值。默认值为 bgr0,这是 Linux 控制台和 Xorg X server 使用的最常见格式。

format_modifier

输出帧上要标示的格式修饰符(format modifier)。这对于正确导入某些 API 是必要的。如果你运行的是 Linux 5.7 或更高版本,可以自动检测;更早的版本在需要时则要显式提供。可能的取值请参见 libdrm 文档。

crtc_id

用于定义采集源的 KMS CRTC ID。会使用给定 CRTC 上第一个处于活动状态的 plane。

plane_id

用于定义采集源的 KMS plane ID。如果既未指定 crtc_id 也未指定 plane_id,默认使用找到的第一个活动 plane。

framerate

以此帧率采集。这与任何翻页或 framebuffer 变化都不同步——它只是定义了对 framebuffer 采样的间隔。采样速度快于 framebuffer 的更新速率时,会生成内容相同的独立帧。默认值为 30

3.10.2 示例

  • 从第一个活动 plane 采集,将结果下载为普通帧并编码。这只有在 framebuffer 既是线性又是可映射的情况下才有效——如果不是,结果可能会花屏或下载失败。

    ffmpeg -f kmsgrab -i - -vf 'hwdownload,format=bgr0' output.mp4
    
  • 以 60fps 从 CRTC ID 42 采集,将结果映射到 VAAPI,转换为 NV12 并编码为 H.264。

    ffmpeg -crtc_id 42 -framerate 60 -f kmsgrab -i - -vf 'hwmap=derive_device=vaapi,scale_vaapi=w=1920:h=1080:format=nv12' -c:v h264_vaapi output.mp4
    
  • 要只采集某个 plane 的一部分,可以对输出进行裁剪——这可以用来采集单个窗口,只要它具有已知的绝对位置和大小。例如,要采集并编码一个 1920x1080 plane 正中间四分之一的区域:

    ffmpeg -f kmsgrab -i - -vf 'hwmap=derive_device=vaapi,crop=960:540:480:270,scale_vaapi=960:540:nv12' -c:v h264_vaapi output.mp4
    

3.11 lavfi

Libavfilter 输入虚拟设备。

此输入设备从一个 libavfilter filtergraph 的已打开输出 pad 中读取数据。

对于 filtergraph 的每个已打开输出,输入设备都会创建一个与之对应、映射到该生成输出的流。filtergraph 通过 graph 选项指定。

3.11.1 选项

graph

指定要用作输入的 filtergraph。每个已打开的视频输出都必须用形如 "outN" 的唯一字符串标注,其中 N 是从 0 开始的编号,对应该设备生成的已映射输入流。第一个未标注的输出会自动被赋予 "out0" 标签,但其他所有输出都需要显式指定。

可以在输出标签后附加后缀 "+subcc",为该输出创建一路附带隐藏字幕数据包的额外流(实验性功能;目前仅支持 EIA-608 / CEA-708)。subcc 流会在所有普通流之后,按对应流的顺序创建。例如,如果存在 "out19+subcc"、"out7+subcc",以及一直到 "out42",那么第 43 号流是第 7 号流的 subcc,第 44 号流是第 19 号流的 subcc。

如果未指定,默认使用为该输入设备指定的文件名。

graph_file

设置要读取并发送给其他滤镜的 filtergraph 的文件名。filtergraph 的语法与 graph 选项指定的相同。

dumpgraph

将滤镜图输出到 stderr。

3.11.2 示例

  • 创建一路彩色视频流并用 ffplay 播放:

    ffplay -f lavfi -graph "color=c=pink [out0]" dummy
    
  • 与前一个示例相同,但改用文件名指定滤镜图描述,并省略 "out0" 标签:

    ffplay -f lavfi color=c=pink
    
  • 创建三路不同的视频测试过滤源并播放:

    ffplay -f lavfi -graph "testsrc [out0]; testsrc,hflip [out1]; testsrc,negate [out2]" test3
    
  • 使用 amovie 源从文件读取一路音频流并用 ffplay 播放:

    ffplay -f lavfi "amovie=test.wav"
    
  • 读取一路音频流和一路视频流并用 ffplay 播放:

    ffplay -f lavfi "movie=test.avi[out0];amovie=test.wav[out1]"
    
  • 将解码后的帧转储为图像,并将隐藏字幕转储为 RCWT 备份:

    ffmpeg -f lavfi -i "movie=test.ts[out0+subcc]" -map v frame%08d.png -map s -c copy -f rcwt subcc.bin
    

3.12 libcdio

基于 libcdio 的 Audio-CD 输入设备。

要在编译配置时启用此输入设备,系统上需要安装 libcdio。这需要 configure 选项 --enable-libcdio

此设备允许从 Audio-CD 播放和采集数据。

例如,要使用 ffmpeg 复制 /dev/sr0 中的整张 Audio-CD,可以运行以下命令:

ffmpeg -f libcdio -i /dev/sr0 cd.wav

3.12.1 选项

speed

设置驱动器的读取速度。默认值为 0。

速度以 CD-ROM 速度单位指定,并通过 libcdio 的 cdio_cddap_speed_set 函数设置。在许多 CD-ROM 驱动器上,指定过大的值会导致使用最快的速度。

paranoia_mode

设置 paranoia 恢复模式标志。可接受以下值之一:

‘disable’ ‘verify’ ‘overlap’ ‘neverskip’ ‘full’

默认值为 ‘disable’。

关于可用恢复模式的更多信息,请参阅 paranoia 项目的文档。

3.13 libdc1394

基于 libdc1394 和 libraw1394 的 IIDC1394 输入设备。

需要 configure 选项 --enable-libdc1394

3.13.1 选项

framerate

设置帧率。默认值为 ntsc,对应帧率 30000/1001

pixel_format

选择 pixel format。默认值为 uyvy422

video_size

以类似 640x480hd720 的字符串设置视频尺寸。默认值为 qvga

3.14 openal

OpenAL 输入设备可在任何具有可用 OpenAL 1.1 实现的系统上采集音频。

要在编译配置时启用此输入设备,系统上需要安装 OpenAL 的头文件和库,并且需要在配置 FFmpeg 时加上 --enable-openal

OpenAL 的头文件和库应作为 OpenAL 实现的一部分提供,或作为额外的下载内容(一个 SDK)提供。根据安装情况的不同,可能需要通过 --extra-cflags--extra-ldflags 指定额外的标志,以便构建系统能够找到 OpenAL 的头文件和库。

以下是 OpenAL 实现的一份不完整列表:

Creative

官方 Windows 实现,在受支持的设备上提供硬件加速,并支持软件回退。参见 http://openal.org/

OpenAL Soft

可移植的开源(LGPL)软件实现,包含针对 Windows、Linux、Solaris 和 BSD 操作系统上最常见的音频 API 的后端。参见 http://kcat.strangesoft.net/openal.html

Apple

OpenAL 是 Mac OS X 官方音频接口 Core Audio 的一部分。参见 http://developer.apple.com/technologies/mac/audio-and-video.html

此设备允许从通过 OpenAL 处理的音频输入设备采集数据。

需要在提供的文件名中指定要采集的设备名称。如果提供空字符串,设备会自动选择默认设备。可以使用 list_devices 选项获取受支持设备的列表。

3.14.1 选项

channels

设置采集音频的声道数。目前仅支持值 1(单声道)和 2(立体声)。默认值为 2。

sample_size

设置采集音频的采样大小(以位为单位)。目前仅支持值 8 和 16。默认值为 16。

sample_rate

设置采集音频的采样率(以 Hz 为单位)。默认值为 44.1k。

list_devices

如果设置为 true,则打印设备列表并退出。默认值为 false。

3.14.2 示例

打印 OpenAL 支持的设备列表并退出:

$ ffmpeg -list_devices true -f openal -i dummy out.ogg

通过 PulseAudio 从 OpenAL 设备 DR-BT101 采集:

$ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out.ogg

从默认设备采集(注意用空字符串 ” 作为文件名):

$ ffmpeg -f openal -i '' out.ogg

在同一条 ffmpeg 命令中同时从两个设备采集,写入两个不同的文件:

$ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out1.ogg -f openal -i 'ALSA Default' out2.ogg

注意:并非所有 OpenAL 实现都支持多路同时采集——如果上述方法不起作用,请尝试最新版本的 OpenAL Soft。

3.15 oss

Open Sound System 输入设备。

提供给输入设备的文件名是表示 OSS 输入设备的设备节点,通常设置为 /dev/dsp。

例如,要使用 ffmpeg 从 /dev/dsp 采集,可使用以下命令:

ffmpeg -f oss -i /dev/dsp /tmp/oss.wav

关于 OSS 的更多信息参见:http://manuals.opensound.com/usersguide/dsp.html

3.15.1 选项

sample_rate

以 Hz 为单位设置采样率。默认值为 48000。

channels

设置声道数。默认值为 2。

3.16 pulse

PulseAudio 输入设备。

要启用此输出设备,需要在配置 FFmpeg 时加上 --enable-libpulse

提供给输入设备的文件名是源设备或字符串 "default"

要列出 PulseAudio 的源设备及其属性,可以执行命令 pactl list sources

关于 PulseAudio 的更多信息参见 http://www.pulseaudio.org

3.16.1 选项

server

连接到通过 IP 地址指定的特定 PulseAudio 服务器。如果未提供,则使用默认服务器。

name

指定 PulseAudio 在显示活动客户端时使用的应用程序名称,默认为 LIBAVFORMAT_IDENT 字符串。

stream_name

指定 PulseAudio 在显示活动流时使用的流名称,默认为 "record"。

sample_rate

以 Hz 为单位指定采样率,默认使用 48kHz。

channels

指定使用的声道数,默认设置为 2(立体声)。

frame_size

此选项不起任何作用,且已弃用。

fragment_size

以字节为单位指定 PulseAudio 中最小缓冲片段的大小,这会影响音频延迟。默认设置为 50 ms 的数据量。

wallclock

使用当前时间设置初始 PTS。默认值为 1。

3.16.2 示例

从默认设备录制一路流:

ffmpeg -f pulse -i default /tmp/pulse.wav

3.17 sndio

sndio 输入设备。

要在编译配置时启用此输入设备,系统上需要安装 libsndio。

提供给输入设备的文件名是表示 sndio 输入设备的设备节点,通常设置为 /dev/audio0。

例如,要使用 ffmpeg 从 /dev/audio0 采集,可使用以下命令:

ffmpeg -f sndio -i /dev/audio0 /tmp/oss.wav

3.17.1 选项

sample_rate

以 Hz 为单位设置采样率。默认值为 48000。

channels

设置声道数。默认值为 2。

3.18 video4linux2, v4l2

Video4Linux2 输入视频设备。

"v4l2" 可用作 "video4linux2" 的别名。

如果 FFmpeg 在构建时启用了 v4l-utils 支持(通过使用 --enable-libv4l2 configure 选项),就可以使用 -use_libv4l2 输入设备选项。

要采集的设备名称是文件设备节点。通常,当设备(例如 USB 摄像头)接入系统时,Linux 系统会自动创建这样的节点,其名称形如 /dev/videoN,其中 N 是与该设备关联的编号。

Video4Linux2 设备通常只支持有限的一组 widthxheight 尺寸和帧率。可以针对 Video4Linux2 设备使用 -list_formats all 查看支持哪些组合。某些设备(如电视卡)支持一种或多种制式。可以使用 -list_standards all 列出所有受支持的制式。

时间戳的时间基为 1 微秒。根据内核版本和配置的不同,时间戳可能来自实时时钟(起点为 Unix 纪元)或单调时钟(起点通常是启动时刻,不受 NTP 或手动更改时钟的影响)。可以使用 -timestamps abs 或 -ts abs 选项强制转换为实时时钟。

以下是使用 ffmpegffplay 操作 video4linux2 设备的一些示例:

  • 列出 video4linux2 设备支持的格式:

    ffplay -f video4linux2 -list_formats all /dev/video0
    
  • 采集并显示 video4linux2 设备的输入:

    ffplay -f video4linux2 -framerate 30 -video_size hd720 /dev/video0
    
  • 采集并录制 video4linux2 设备的输入,帧率和尺寸保持先前设置的值:

    ffmpeg -f video4linux2 -input_format mjpeg -i /dev/video0 out.mpeg
    

关于 Video4Linux 的更多信息,请查看 http://linuxtv.org/

3.18.1 选项

standard

设置制式。必须是受支持制式的名称。要获取受支持制式的列表,请使用 list_standards 选项。

channel

设置输入通道编号。默认值为 -1,表示使用之前选择的通道。

video_size

设置视频帧尺寸。参数必须是 WIDTHxHEIGHT 形式的字符串,或有效的尺寸缩写。

pixel_format

选择 pixel format(仅对 raw 视频输入有效)。

input_format

设置首选的 pixel format(针对 raw 视频)或 codec 名称。此选项允许在有多种输入格式可用时选择输入格式。

framerate

设置首选的视频帧率。

list_formats

列出可用格式(受支持的 pixel format、codec 和帧尺寸)并退出。

可用值如下:

‘all’

显示所有可用格式(压缩和非压缩)。

‘raw’

仅显示 raw 视频(非压缩)格式。

‘compressed’

仅显示压缩格式。

list_standards

列出受支持的制式并退出。

可用值如下:

‘all’

显示所有受支持的制式。

timestamps, ts

设置采集帧的时间戳类型。

可用值如下:

‘default’

使用来自内核的时间戳。

‘abs’

使用绝对时间戳(wall clock)。

‘mono2abs’

强制将单调时间戳转换为绝对时间戳。

默认值为 default

use_libv4l2

使用 libv4l2(v4l-utils)转换函数。默认值为 0。

3.19 vfwcap

VfW(Video for Windows)采集输入设备。

作为输入传递的文件名是采集驱动程序编号,范围为 0 到 9。可以使用 "list" 作为文件名以打印驱动程序列表。其他任何文件名都将按设备编号 0 处理。

3.19.1 选项

video_size

设置视频帧尺寸。

framerate

设置采集帧率。默认值为 ntsc,对应帧率 30000/1001

3.20 x11grab

X11 视频输入设备。

要在编译配置时启用此输入设备,系统上需要安装 libxcb,配置时会自动检测。

此设备允许采集 X11 显示的某个区域。

作为输入传递的文件名具有以下语法:

[hostname]:display_number.screen_number[+x_offset,y_offset]

hostname:display_number.screen_number 指定要采集的屏幕的 X11 显示名称。hostname 可以省略,默认为 "localhost"。环境变量 DISPLAY 中包含默认的显示名称。

x_offset 和 y_offset 指定采集区域相对于 X11 屏幕左上角边界的偏移量,默认值均为 0。

查看 X11 文档(例如 man X)以获取更详细的信息。

使用 xdpyinfo 程序获取有关 X11 显示属性的基本信息(例如查找 "name" 或 "dimensions")。

例如,要使用 ffmpeg 从 :0.0 采集:

ffmpeg -f x11grab -framerate 25 -video_size cif -i :0.0 out.mpg

在位置 10,20 处采集:

ffmpeg -f x11grab -framerate 25 -video_size cif -i :0.0+10,20 out.mpg

3.20.1 选项

select_region

指定是否使用指针以图形方式选择采集区域。值为 1 时,会提示用户通过点击并拖动以图形方式选择采集区域。单击而不拖动会选择整个屏幕,宽度或高度为零的区域也会选择整个屏幕。此选项会覆盖 video_size、grab_x 和 grab_y 选项。默认值为 0

draw_mouse

指定是否绘制鼠标指针。值为 0 时表示不绘制指针。默认值为 1

follow_mouse

使采集区域跟随鼠标。参数可以是 centered 或表示像素数的 PIXELS。

当指定为 "centered" 时,采集区域会跟随鼠标指针,并使指针始终位于区域中心;否则,只有当鼠标指针到达区域边缘 PIXELS(大于零)以内时,区域才会跟随。

例如:

ffmpeg -f x11grab -follow_mouse centered -framerate 25 -video_size cif -i :0.0 out.mpg

仅在鼠标指针到达距边缘 100 像素以内时才跟随:

ffmpeg -f x11grab -follow_mouse 100 -framerate 25 -video_size cif -i :0.0 out.mpg

framerate

设置采集帧率。默认值为 ntsc,对应帧率 30000/1001

show_region

在屏幕上显示采集区域。

如果 show_region 指定为 1,则会在屏幕上标示采集区域。使用此选项,当只采集屏幕的一部分时,可以很容易地知道正在采集什么内容。

region_border

在使用 -show_region 1 时设置区域边框的粗细。范围为 1 到 128,默认值为 3(仅限基于 XCB 的 x11grab)。

例如:

ffmpeg -f x11grab -show_region 1 -framerate 25 -video_size cif -i :0.0+10,20 out.mpg

与 follow_mouse 一起使用:

ffmpeg -f x11grab -follow_mouse centered -show_region 1 -framerate 25 -video_size cif -i :0.0 out.mpg

window_id

采集此窗口,而不是整个屏幕。默认值为 0,表示映射到整个屏幕(根窗口)。

可以使用 xwininfo 程序(可能需要加上 -tree 和 -root 选项)查找窗口的 id。

如果之后放大该窗口,新增的区域不会被记录。窗口关闭、取消映射(即最小化为图标)或缩小到小于视频尺寸(默认值为初始窗口大小)时,视频会结束。

此选项会禁用 follow_mouse 和 select_region 选项。

video_size

设置视频帧尺寸。默认值为整个桌面或窗口的大小。

grab_x grab_y

设置采集区域的坐标。这些坐标表示为相对于 X11 窗口左上角的偏移量,对应于设备名称中的 x_offset 和 y_offset 参数。两个选项的默认值均为 0。

4 输出设备

输出设备是 FFmpeg 中的配置元素,用于将多媒体数据写入连接到系统的输出设备。

配置 FFmpeg 构建时,所有受支持的输出设备默认都会启用。可以使用 configure 选项 "–list-outdevs" 列出所有可用的输出设备。

可以使用 configure 选项 "–disable-outdevs" 禁用所有输出设备,使用 "–enable-outdev=OUTDEV" 选项有选择地启用某个输出设备,或使用 "–disable-outdev=OUTDEV" 选项禁用特定的输入设备。

ff* 工具的 "-devices" 选项会显示已启用输出设备的列表。

以下是当前可用输出设备的说明。

4.1 alsa

ALSA(Advanced Linux Sound Architecture)输出设备。

4.1.1 示例

  • 在默认 ALSA 设备上播放文件:

    ffmpeg -i INPUT -f alsa default
    
  • 在声卡 1、音频设备 7 上播放文件:

    ffmpeg -i INPUT -f alsa hw:1,7
    

4.2 AudioToolbox

AudioToolbox 输出设备。

允许在 OSX 上原生输出到 CoreAudio 设备。

输出文件名可以为空(或 -),表示使用系统默认输出设备,也可以是一个数字,表示 -list_devices true 所显示的设备索引。

另外,也可以使用 -audio_device_index 按索引选择音频输入设备,这会覆盖输入文件名中给出的任何设备名称或索引。

所有可用设备都可以通过 -list_devices true 枚举,列出所有设备名称、UID 及其对应的索引。

4.2.1 选项

AudioToolbox 支持以下选项:

-audio_device_index

按索引指定音频设备,会覆盖输出文件名中给出的任何设置。

4.2.2 示例

  • 打印受支持设备的列表,并向默认设备输出正弦波:

    $ ffmpeg -f lavfi -i sine=r=44100 -f audiotoolbox -list_devices true -
    
  • 向索引为 2 的设备输出正弦波,覆盖任何输出文件名:

    $ ffmpeg -f lavfi -i sine=r=44100 -f audiotoolbox -audio_device_index 2 -
    

4.3 caca

CACA 输出设备。

此输出设备允许在 CACA 窗口中显示视频流。每个应用程序只允许有一个 CACA 窗口,因此在一个应用程序中只能有此输出设备的一个实例。

要启用此输出设备,需要在配置 FFmpeg 时加上 --enable-libcaca。libcaca 是一个输出文本而非像素的图形库。

关于 libcaca 的更多信息,请查看:http://caca.zoy.org/wiki/libcaca

4.3.1 选项

window_title

设置 CACA 窗口标题,如果未指定,则默认为输出设备指定的文件名。

window_size

设置 CACA 窗口尺寸,可以是 widthxheight 形式的字符串,或视频尺寸缩写。如果未指定,则默认为输入视频的尺寸。

driver

设置显示驱动程序。

algorithm

设置抖动算法。之所以需要抖动,是因为渲染的图像通常拥有比可用调色板多得多的颜色。可接受的值通过 -list_dither algorithms 列出。

antialias

设置抗锯齿方法。抗锯齿可以使渲染的图像更平滑,避免常见的阶梯状效果。可接受的值通过 -list_dither antialiases 列出。

charset

设置渲染文本时使用的字符。可接受的值通过 -list_dither charsets 列出。

color

设置渲染文本时使用的颜色。可接受的值通过 -list_dither colors 列出。

list_drivers

如果设置为 true,则打印可用驱动程序列表并退出。

list_dither

列出与参数相关的可用抖动选项。参数必须是 algorithmsantialiasescharsetscolors 之一。

4.3.2 示例

  • 以下命令将 ffmpeg 的输出显示在 CACA 窗口中,并强制将其尺寸设为 80x25:

    ffmpeg -i INPUT -c:v rawvideo -pix_fmt rgb24 -window_size 80x25 -f caca -
    
  • 显示可用驱动程序列表并退出:

    ffmpeg -i INPUT -pix_fmt rgb24 -f caca -list_drivers true -
    
  • 显示可用抖动颜色列表并退出:

    ffmpeg -i INPUT -pix_fmt rgb24 -f caca -list_dither colors -
    

decklink 输出设备为 Blackmagic DeckLink 设备提供播放能力。

要启用此输出设备,需要 Blackmagic DeckLink SDK,并使用相应的 --extra-cflags--extra-ldflags 完成配置。在 Windows 上,需要使用 widl 处理 IDL 文件。

DeckLink 对其支持的格式非常挑剔:pixel format 始终为 uyvy422,帧率、场序和视频尺寸必须通过 -list_formats 1 针对具体设备确定,音频采样率始终为 48 kHz。

4.4.1 选项

list_devices

如果设置为 true,则打印设备列表并退出。默认值为 false。此选项已弃用,请使用 ffmpeg 的 -sinks 选项列出可用的输出设备。

list_formats

如果设置为 true,则打印受支持格式的列表并退出。默认值为 false。

preroll

以秒为单位设置视频预卷时间。默认值为 0.5。

duplex_mode

设置 decklink 设备的 duplex/profile 模式,必须是 ‘unset’、‘half’、‘full’、‘one_sub_device_full’、‘one_sub_device_half’、‘two_sub_device_full’、‘four_sub_device_half’ 之一。默认值为 ‘unset’。

注意:DeckLink SDK 11.0 已将 duplex 属性替换为 profile 属性。对于 DeckLink Duo 2 和 DeckLink Quad 2,使用同一连接器的任意 2 个子设备会共享一个 profile。对于 DeckLink 8K Pro,全部 4 个子设备会共享一个 profile,因此 DeckLink 8K Pro 支持四种 profile。

DeckLink 8K Pro(DeckLink SDK >= 11.0)的有效 profile 模式:‘one_sub_device_full’、‘one_sub_device_half’、‘two_sub_device_full’、‘four_sub_device_half’

DeckLink Quad 2 和 DeckLink Duo 2 的有效 profile 模式:‘half’、‘full’

timing_offset

设置所用输出上的 genlock 时序像素偏移量。默认值为 ‘unset’。

link

设置所用输出上的 SDI 视频链路配置,必须是 ‘unset’、‘single’ link SDI、‘dual’ link SDI 或 ‘quad’ link SDI。默认值为 ‘unset’。

sqd

为 Quad-link SDI 输出启用 Square Division Quad Split 模式,必须是 ‘unset’、‘true’ 或 ‘false’。默认值为 unset。

level_a

在所用输出上启用 SMPTE Level A 模式,必须是 ‘unset’、‘true’ 或 ‘false’。默认值为 unset。

vanc_queue_size

以字节为单位设置 VANC 数据的最大输出缓冲区大小。如果缓冲达到此值,待输出的 VANC 数据将被丢弃。默认值为 ‘1048576’。

4.4.2 示例

  • 列出输出设备:

    ffmpeg -sinks decklink
    
  • 列出受支持的格式:

    ffmpeg -i test.avi -f decklink -list_formats 1 'DeckLink Mini Monitor'
    
  • 播放视频片段:

    ffmpeg -i test.avi -f decklink -pix_fmt uyvy422 'DeckLink Mini Monitor'
    
  • 以非标准帧率或视频尺寸播放视频片段:

    ffmpeg -i test.avi -f decklink -pix_fmt uyvy422 -s 720x486 -r 24000/1001 'DeckLink Mini Monitor'
    

4.5 fbdev

Linux framebuffer 输出设备。

Linux framebuffer 是一个与图形硬件无关的抽象层,用于在计算机显示器(通常是控制台)上显示图形。它通过文件设备节点访问,通常为 /dev/fb0。

更详细的信息,请阅读 Linux 源码树中包含的文件 Documentation/fb/framebuffer.txt。

4.5.1 选项

xoffset yoffset

设置左上角的 x/y 坐标。默认值为 0。

4.5.2 示例

在 framebuffer 设备 /dev/fb0 上播放文件。所需的 pixel format 取决于当前的 framebuffer 设置。

ffmpeg -re -i INPUT -c:v rawvideo -pix_fmt bgra -f fbdev /dev/fb0

另请参阅 http://linux-fbdev.sourceforge.net/ 和 fbset(1)。

4.6 oss

OSS(Open Sound System)输出设备。

4.7 pulse

PulseAudio 输出设备。

要启用此输出设备,需要在配置 FFmpeg 时加上 --enable-libpulse

关于 PulseAudio 的更多信息参见 http://www.pulseaudio.org

4.7.1 选项

server

连接到通过 IP 地址指定的特定 PulseAudio 服务器。如果未提供,则使用默认服务器。

name

指定 PulseAudio 在显示活动客户端时使用的应用程序名称,默认为 LIBAVFORMAT_IDENT 字符串。

stream_name

指定 PulseAudio 在显示活动流时使用的流名称,默认设置为指定的输出名称。

device

指定要使用的设备。如果未提供,则使用默认设备。可以通过命令 pactl list sinks 获取输出设备列表。

buffer_size buffer_duration

控制 PulseAudio 缓冲区的大小和时长。较小的缓冲区能提供更好的控制性,但需要更频繁的更新。

buffer_size 以字节为单位指定大小,buffer_duration 以毫秒为单位指定时长。

如果同时提供了两个选项,则使用较大的那个值(时长会使用流参数重新计算为字节数)。如果都设置为 0(默认值),设备会使用 PulseAudio 的默认时长值。默认情况下,PulseAudio 会将缓冲时长设置为约 2 秒。

prebuf

以字节为单位指定预缓冲大小。服务器在缓冲区中至少有 prebuf 字节可用之前不会开始播放。默认情况下,此选项会初始化为与 buffer_size 或 buffer_duration 中较大的那个相同的值。

minreq

以字节为单位指定最小请求大小。服务器不会向客户端请求少于 minreq 字节的数据,而是等到缓冲区有足够空闲空间后再一次性请求更多字节。建议不要设置此选项,这样会将其初始化为服务器认为合理的值。

4.7.2 示例

在默认服务器的默认设备上播放文件:

ffmpeg  -i INPUT -f pulse "stream name"

4.8 sndio

sndio 音频输出设备。

4.9 v4l2

Video4Linux2 输出设备。

4.10 xv

XV(XVideo)输出设备。

此输出设备允许在 X Window System 窗口中显示视频流。

4.10.1 选项

display_name

指定硬件显示名称,用于确定要使用的显示和通信域。

显示名称或 DISPLAY 环境变量可以是形如 hostname[:number[.screen_number]] 的字符串。

hostname 指定显示器物理连接所在主机的名称。number 指定该主机上显示服务器的编号。screen_number 指定要在该服务器上使用的屏幕。

如果未指定,则默认为 DISPLAY 环境变量的值。

例如,dual-headed:0.1 表示名为 “dual-headed” 的机器上显示 0 的屏幕 1。

有关显示名称格式的更详细信息,请查看 X11 规范。

window_id

设置为非零值时,设备不会创建新窗口,而是使用提供的 window_id 所对应的现有窗口。默认情况下此选项设置为零,设备会创建自己的窗口。

window_size

设置所创建窗口的尺寸,可以是 widthxheight 形式的字符串,或视频尺寸缩写。如果未指定,则默认为输入视频的尺寸。设置 window_id 时会被忽略。

window_x window_y

设置所创建窗口的 X 和 Y 偏移量,两者默认值均为 0。这些值可能会被窗口管理器忽略。设置 window_id 时会被忽略。

window_title

设置窗口标题,如果未指定,则默认为输出设备指定的文件名。设置 window_id 时会被忽略。

关于 XVideo 的更多信息参见 http://www.x.org/

4.10.2 示例

  • 使用 ffmpeg 同时解码、显示并编码视频输入:

    ffmpeg -i INPUT OUTPUT -f xv display
    
  • 解码并将输入视频显示到多个 X11 窗口:

    ffmpeg -i INPUT -f xv normal -vf negate -f xv negated
    

5 参见

ffmpeg, ffplay, ffprobe, libavdevice

6 作者

FFmpeg 的开发者们。

关于作者身份的详细信息,请参见项目的 Git 历史(https://git.ffmpeg.org/ffmpeg),例如在 FFmpeg 源代码目录中输入 git log 命令,或浏览在线仓库 https://git.ffmpeg.org/ffmpeg

各组件的维护者列在源代码树中的 MAINTAINERS 文件里。

主机托管由 telepoint.bg 提供