FFmpeg 设备文档

目录

1 描述

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

2 设备选项

libavdevice 库提供了与 libavformat 相同的接口。也就是说,输入设备被视为解复用器,输出设备被视为复用器,并且接口和通用设备选项与 libavformat 提供的相同(请参阅 ffmpeg-formats 手册)。

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

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

3 输入设备

输入设备是 FFmpeg 中配置的元素,允许访问来自连接到系统的多媒体设备的数据。

当您配置 FFmpeg 构建时,默认情况下会启用所有支持的输入设备。您可以使用配置选项“–list-indevs”列出所有可用的设备。

您可以使用配置选项“–disable-indevs”禁用所有输入设备,并使用选项“–enable-indev=INDEV”选择性地启用输入设备,或者您可以使用选项“–disable-indev=INDEV”禁用特定的输入设备。

ff* 工具的选项“-devices”将显示支持的输入设备列表。

以下是对当前可用的输入设备的描述。

3.1 alsa

ALSA(高级 Linux 声音架构)输入设备。

要在配置期间启用此输入设备,您需要在系统上安装 libasound。

此设备允许从 ALSA 设备捕获。要捕获的设备的名称必须是 ALSA 卡标识符。

ALSA 标识符具有以下语法

hw:CARD[,DEV[,SUBDEV]]

其中 DEVSUBDEV 组件是可选的。

三个参数(按顺序:CARDDEVSUBDEV)指定卡号或标识符、设备号和子设备号(-1 表示任何)。

要查看您的系统当前识别的卡列表,请检查文件 /proc/asound/cards/proc/asound/devices

例如,要使用 ffmpeg 从卡 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 相机输入设备。

此输入设备使用 Android Camera2 NDK API,该 API 在 API 级别 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 <INDEX> 和/或 -audio_device_index <INDEX> 按索引选择视频和/或音频输入设备,覆盖输入文件名中给出的任何设备名称或索引。

可以通过使用 -list_devices true 枚举所有可用设备,列出所有设备名称和相应的索引。

有两个设备名称别名

default

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

none

不记录相应的媒体类型。这等效于指定空的设备名称或索引。

3.3.1 选项

AVFoundation 支持以下选项

-list_devices <TRUE|FALSE>

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

-video_device_index <INDEX>

按索引指定视频设备。覆盖输入文件中给出的任何内容。

-audio_device_index <INDEX>

按索引指定音频设备。覆盖输入文件中给出的任何内容。

-pixel_format <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 将仅捕获以指定像素格式提取的视频帧。将此选项设置为 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 从系统默认视频设备录制视频,并且不录制任何音频到 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
    

3.4 bktr

BSD 视频输入设备。已弃用,将被删除 - 如果您有兴趣维护它,请联系开发者。

3.4.1 选项

framerate

设置帧率。

video_size

设置视频帧大小。默认为 vga

标准

可用的值有

pal
ntsc
secam
paln
palm
ntscj

3.5 decklink

decklink 输入设备为 Blackmagic DeckLink 设备提供捕获功能。

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

DeckLink 对其支持的格式非常挑剔。可以使用 raw_format 设置输入的像素格式。必须使用 -list_formats 1 为您的设备确定帧率和视频大小。音频采样率始终为 48 kHz,通道数可以为 2、8 或 16。请注意,所有音频通道都捆绑在一个单独的音轨中。

3.5.1 选项

list_devices

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

list_formats

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

format_code <FourCC>

这将输入视频格式设置为 FourCC 给定的格式。要查看您的设备支持的值,请使用 list_formats。请注意,有一个 FourCC 'pal ' 也可以用作 pal(3 个字母)。默认行为是自动检测输入视频格式(如果硬件支持)。

raw_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

如果设置为非零值,将从垂直辅助数据中捕获额外的图文电视流。支持 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 设备的双工/配置文件模式。必须为 ‘unset’、‘half’、‘full’、‘one_sub_device_full’、‘one_sub_device_half’、‘two_sub_device_full’、‘four_sub_device_half’ 默认为 ‘unset’。

注意:DeckLink SDK 11.0 已将双工属性替换为配置文件属性。对于 DeckLink Duo 2 和 DeckLink Quad 2,任何使用相同连接器的 2 个子设备之间共享一个配置文件。对于 DeckLink 8K Pro,所有 4 个子设备之间共享一个配置文件。因此,DeckLink 8K Pro 支持四个配置文件。

DeckLink 8K Pro 的有效配置文件模式(使用 DeckLink SDK >= 11.0):‘one_sub_device_full’、‘one_sub_device_half’、‘two_sub_device_full’、‘four_sub_device_half

DeckLink Quad 2 和 DeckLink Duo 2 的有效配置文件模式:‘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 (布尔值)

丢弃帧,直到收到带有时间码的帧。有时,串行时间码不会与第一个输入帧一起收到。如果发生这种情况,则存储的流时间码将不准确。如果将此选项设置为 true,则会丢弃输入帧,直到收到带有时间码的帧。必须指定选项 timecode_format。默认为 false

enable_klv(布尔值)

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

3.5.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.6 dshow

Windows DirectShow 输入设备。

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

可以将多个设备作为单独的输入打开,但也可以在同一个输入上打开,这应该可以提高它们之间的同步性。

输入名称的格式应为

TYPE=NAME[:TYPE=NAME]

其中 TYPE 可以是 audiovideoNAME 是设备的名称或备用名称。

3.6.1 选项

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

video_size

设置捕获视频中的视频大小。

framerate

设置捕获视频中的帧率。

sample_rate

设置捕获音频的采样率(以 Hz 为单位)。

sample_size

设置捕获音频的采样大小(以位为单位)。

channels

设置捕获音频中的通道数。

list_devices

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

list_options

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

video_device_number

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

audio_device_number

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

pixel_format

选择 DirectShow 使用的像素格式。仅当未设置视频编解码器或将其设置为 rawvideo 时才能设置此项。

audio_buffer_size

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

video_pin_name

通过名称或备用名称选择要使用的视频捕获引脚。

audio_pin_name

通过名称或备用名称选择要使用的音频捕获引脚。

crossbar_video_input_pin_number

为交叉开关设备选择视频输入引脚编号。这将路由到交叉开关设备的视频解码器输出引脚。请注意,更改此值可能会影响未来的调用(设置新的默认值),直到系统重新启动。

crossbar_audio_input_pin_number

为交叉开关设备选择音频输入引脚编号。这将路由到交叉开关设备的音频解码器输出引脚。请注意,更改此值可能会影响未来的调用(设置新的默认值),直到系统重新启动。

show_video_device_dialog

如果设置为 true,则在捕获开始之前,会向最终用户弹出一个显示对话框,允许他们手动更改视频过滤器属性和配置。请注意,对于交叉开关设备,有时可能需要在该对话框中调整值,以便在 PAL (25 fps) 和 NTSC (29.97) 输入帧率、大小、隔行扫描等之间切换。更改这些值可以启用不同的扫描率/帧率,并避免底部出现绿条、扫描线闪烁等问题。请注意,对于某些设备,更改这些属性也可能会影响未来的调用(设置新的默认值),直到系统重新启动。

show_audio_device_dialog

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

show_video_crossbar_connection_dialog

如果设置为 true,则在捕获开始之前,会向最终用户弹出一个显示对话框,允许他们手动修改打开视频设备时的交叉开关引脚路由。

show_audio_crossbar_connection_dialog

如果设置为 true,则在捕获开始之前,会向最终用户弹出一个显示对话框,允许他们手动修改打开音频设备时的交叉开关引脚路由。

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,则视频帧的时间戳将从挂钟时间得出,而不是从捕获设备提供的时间戳得出。这允许绕过提供不可靠时间戳的设备。

3.6.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"
    
  • 指定要按名称或备用名称捕获的引脚名称,指定备用设备名称
    $ 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"
    
  • 配置交叉开关设备,指定交叉开关引脚,允许用户在启动时调整视频捕获属性
    $ 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.7 fbdev

Linux 帧缓冲区输入设备。

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

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

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

要使用 ffmpeg 从帧缓冲设备 /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.7.1 选项

framerate

设置帧速率。默认值为 25。

3.8 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

抓取名为“计算器”的窗口的内容

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

3.8.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=窗口标题,则默认捕获整个窗口大小。

offset_x

当使用 video_size 捕获区域时,设置该区域与屏幕或桌面左边缘的距离。

请注意,偏移量计算是从 Windows 上主显示器的左上角开始的。如果您的显示器位于主显示器的左侧,则需要使用负的 offset_x 值将区域移动到该显示器。

offset_y

当使用 video_size 捕获区域时,设置该区域与屏幕或桌面顶边缘的距离。

请注意,偏移量计算是从 Windows 上主显示器的左上角开始的。如果您的显示器位于主显示器的上方,则需要使用负的 offset_y 值将区域移动到该显示器。

3.9 iec61883

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

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

iec61883 捕获设备支持使用 libiec61883 和新的 Linux FireWire 堆栈 (juju) 从通过 IEEE1394 (FireWire) 连接的视频设备捕获。这是 Linux Kernel 2.6.37 及更高版本中的默认 DV/HDV 输入方法,因为旧的 FireWire 堆栈已被删除。

指定要用作输入文件的 FireWire 端口,或指定“auto”以选择连接的第一个端口。

3.9.1 选项

dvtype

覆盖 DV/HDV 的自动检测。这仅应在自动检测不起作用时,或者如果应禁止使用其他设备类型时使用。将 DV 设备视为 HDV(或反之亦然)将不起作用,并导致未定义的行为。支持的值为 autodvhdv

dvbuffer

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

dvguid

通过指定其 GUID 来选择捕获设备。仅从指定的设备执行捕获,如果找不到具有给定 GUID 的设备,则捕获将失败。如果同时连接了多个设备,则此方法对于选择输入很有用。查看 /sys/bus/firewire/devices 以找出 GUID。

3.9.2 示例

  • 抓取并显示 FireWire DV/HDV 设备的输入。
    ffplay -f iec61883 -i auto
    
  • 抓取并记录 FireWire DV/HDV 设备的输入,如果源是 HDV,则使用 100000 个数据包的数据包缓冲区。
    ffmpeg -f iec61883 -i auto -dvbuffer 100000 out.mpg
    

3.10 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.10.1 选项

channels

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

3.11 kmsgrab

KMS 视频输入设备。

将与指定 CRTC 或平面关联的 KMS 扫描输出帧缓冲捕获为 DRM 对象,该对象可以传递给其他硬件功能。

需要 DRM master 或 CAP_SYS_ADMIN 才能运行。

如果您不理解所有这些含义,您可能不需要此项。请改用 x11grab

3.11.1 选项

device

要捕获的 DRM 设备。默认为 /dev/dri/card0

format

帧缓冲的像素格式。如果您运行的是 Linux 5.7 或更高版本,则可以自动检测到该格式,但对于早期版本,则需要提供该格式。默认为 bgr0,这是 Linux 控制台和 Xorg X 服务器使用的最常见格式。

format_modifier

在输出帧上发出信号的格式修饰符。这对于正确导入到某些 API 中是必需的。如果您运行的是 Linux 5.7 或更高版本,则可以自动检测到该格式修饰符,但如果需要,则需要在早期版本中显式提供。有关可能的值,请参阅 libdrm 文档。

crtc_id

定义捕获源的 KMS CRTC ID。将使用给定 CRTC 上的第一个活动平面。

plane_id

定义捕获源的 KMS 平面 ID。如果未指定 crtc_idplane_id,则默认为找到的第一个活动平面。

framerate

捕获帧率。这与任何页面翻转或帧缓冲区的更改不同步 - 它仅定义了帧缓冲区被采样的间隔。采样速度快于帧缓冲区更新率将生成具有相同内容的独立帧。默认为 30

3.11.2 示例

  • 从第一个活动平面捕获,将结果下载到普通帧并进行编码。只有当帧缓冲区是线性的且可映射的时,此操作才会有效 - 如果不是,则结果可能会混乱或下载失败。
    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
    
  • 要仅捕获平面的一部分,可以裁剪输出 - 只要它具有已知的绝对位置和大小,就可以使用此方法来捕获单个窗口。例如,要捕获和编码 1920x1080 平面的中间四分之一
    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.12 lavfi

Libavfilter 输入虚拟设备。

此输入设备从 libavfilter 滤镜图的打开的输出 pad 读取数据。

对于每个滤镜图的打开的输出,输入设备将创建一个相应的流,该流映射到生成的输出。滤镜图通过选项 graph 指定。

3.12.1 选项

graph

指定用作输入的滤镜图。每个视频打开输出必须使用 "outN" 形式的唯一字符串进行标记,其中 N 是一个从 0 开始的数字,对应于设备生成的映射输入流。第一个未标记的输出会自动分配给 "out0" 标签,但所有其他输出都需要显式指定。

可以将后缀 "+subcc" 附加到输出标签,以创建额外的流,其中包含附加到该输出的隐藏字幕数据包(实验性;目前仅适用于 EIA-608 / CEA-708)。subcc 流在所有普通流之后创建,顺序与相应的流相同。例如,如果存在 "out19+subcc"、"out7+subcc" 并且最多到 "out42",则流 #43 是流 #7 的 subcc,流 #44 是流 #19 的 subcc。

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

graph_file

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

dumpgraph

将图转储到 stderr。

3.12.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.13 libcdio

基于 libcdio 的音频 CD 输入设备。

要在配置期间启用此输入设备,需要在系统上安装 libcdio。它需要配置选项 --enable-libcdio

此设备允许播放和抓取音频 CD。

例如,要使用 ffmpeg/dev/sr0 中复制整个音频 CD,您可以运行以下命令

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

3.13.1 选项

speed

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

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

paranoia_mode

设置偏执恢复模式标志。它接受以下值之一

disable
verify
overlap
neverskip
full

默认值为 ‘disable’。

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

3.14 libdc1394

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

需要配置选项 --enable-libdc1394

3.14.1 选项

framerate

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

pixel_format

选择像素格式。默认值为 uyvy422

video_size

设置视频大小,以 640x480hd720 之类的字符串形式给出。默认值为 qvga

3.15 openal

OpenAL 输入设备在所有具有正常工作的 OpenAL 1.1 实现的系统上提供音频捕获。

要在配置期间启用此输入设备,需要在系统上安装 OpenAL 头文件和库,并且需要使用 --enable-openal 配置 FFmpeg。

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 是 Core Audio 的一部分,Core Audio 是官方 Mac OS X 音频接口。请参阅 http://developer.apple.com/technologies/mac/audio-and-video.html

此设备允许从通过 OpenAL 处理的音频输入设备捕获。

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

3.15.1 选项

channels

设置捕获的音频中的通道数。当前仅支持值 1(单声道)和 2(立体声)。默认为 2

sample_size

设置捕获的音频的采样大小(以位为单位)。当前仅支持值 816。默认为 16

sample_rate

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

list_devices

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

3.15.2 示例

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

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

从 OpenAL 设备 DR-BT101 via PulseAudio 捕获

$ 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.16 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.16.1 选项

sample_rate

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

channels

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

3.17 pulse

PulseAudio 输入设备。

要启用此输出设备,您需要使用 --enable-libpulse 配置 FFmpeg。

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

要列出 PulseAudio 源设备及其属性,您可以调用命令 pactl list sources

有关 PulseAudio 的更多信息,请访问 http://www.pulseaudio.org

3.17.1 选项

server

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

name

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

stream_name

指定 PulseAudio 在显示活动流时将使用的流名称,默认情况下为“record”。

sample_rate

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

channels

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

frame_size

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

fragment_size

指定 PulseAudio 中最小缓冲片段的大小(以字节为单位),它将影响音频延迟。默认设置为 50 毫秒的数据量。

wallclock

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

3.17.2 示例

从默认设备录制流

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

3.18 sndio

sndio 输入设备。

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

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

例如,要使用 ffmpeg/dev/audio0 获取,请使用命令

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

3.18.1 选项

sample_rate

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

channels

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

3.19 video4linux2, v4l2

Video4Linux2 输入视频设备。

“v4l2”可以用作“video4linux2”的别名。

如果 FFmpeg 是在 v4l-utils 支持下构建的(通过使用 --enable-libv4l2 配置选项),则可以将其与 -use_libv4l2 输入设备选项一起使用。

要获取的设备的名称是一个文件设备节点,通常 Linux 系统在设备(例如 USB 网络摄像头)插入系统时会自动创建此类节点,并且其名称类似于 /dev/videoN,其中 N 是与设备关联的数字。

Video4Linux2 设备通常支持有限的 widthxheight 大小和帧率。您可以使用 -list_formats all 来检查 Video4Linux2 设备支持哪些。某些设备(如电视卡)支持一个或多个标准。可以使用 -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.19.1 选项

标准

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

channel

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

video_size

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

pixel_format

选择像素格式(仅对原始视频输入有效)。

input_format

设置首选像素格式(用于原始视频)或编解码器名称。当有多个可用格式时,此选项允许选择输入格式。

framerate

设置首选视频帧率。

list_formats

列出可用格式(支持的像素格式、编解码器和帧大小)并退出。

可用的值有

all

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

raw

仅显示原始视频(未压缩)格式。

compressed

仅显示压缩格式。

list_standards

列出受支持的标准并退出。

可用的值有

all

显示所有受支持的标准。

timestamps, ts

设置获取帧的时间戳类型。

可用的值有

default

使用内核中的时间戳。

abs

使用绝对时间戳(挂钟时间)。

mono2abs

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

默认值为 default

use_libv4l2

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

3.20 vfwcap

VfW (Video for Windows) 捕获输入设备。

作为输入传递的文件名是捕获驱动程序编号,范围为 0 到 9。可以使用“list”作为文件名来打印驱动程序列表。任何其他文件名都将被解释为设备编号 0。

3.20.1 选项

video_size

设置视频帧大小。

framerate

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

3.21 x11grab

X11 视频输入设备。

要在配置期间启用此输入设备,需要在系统上安装 libxcb。它将在配置期间自动检测到。

此设备允许捕获 X11 显示的区域。

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

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

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

x_offsety_offset 指定所抓取区域相对于 X11 屏幕左上角的偏移量。它们默认为 0。

有关更多详细信息,请查看 X11 文档(例如 man X)。

使用 xdpyinfo 程序来获取有关 X11 显示属性的基本信息(例如,grep for "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.21.1 选项

select_region

指定是否使用指针以图形方式选择抓取区域。值为 1 会提示用户通过单击和拖动以图形方式选择抓取区域。单击一次而不拖动将选择整个屏幕。宽度或高度为零的区域也将选择整个屏幕。此选项会覆盖 video_sizegrab_xgrab_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 程序找到窗口的 ID,可能需要使用 -tree 和 -root 选项。

如果窗口之后被放大,则不会记录新的区域。当窗口关闭、解除映射(即最小化)或缩小到视频大小(默认为初始窗口大小)以下时,视频结束。

此选项禁用 follow_mouseselect_region 选项。

video_size

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

grab_x
grab_y

设置抓取区域的坐标。它们表示为相对于 X11 窗口左上角的偏移量,并且对应于设备名称中的 x_offsety_offset 参数。这两个选项的默认值均为 0。

4 输出设备

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

当您配置 FFmpeg 构建时,默认情况下会启用所有支持的输出设备。您可以使用配置选项“–list-outdevs”列出所有可用的输出设备。

您可以使用配置选项“–disable-outdevs”禁用所有输出设备,并使用选项“–enable-outdev=OUTDEV”选择性地启用一个输出设备,或者使用选项“–disable-outdev=OUTDEV”禁用一个特定的输入设备。

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

下面是对当前可用输出设备的描述。

4.1 alsa

ALSA(高级 Linux 音频架构)输出设备。

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 <INDEX> 按索引选择音频输入设备,从而覆盖输入文件名中给出的任何设备名称或索引。

可以使用 -list_devices true 枚举所有可用设备,列出所有设备名称、UID 和相应的索引。

4.2.1 选项

AudioToolbox 支持以下选项

-audio_device_index <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 窗口,因此一个应用程序中只能有一个此输出设备的实例。

要启用此输出设备,您需要使用 --enable-libcaca 配置 FFmpeg。libcaca 是一个图形库,它输出文本而不是像素。

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

4.3.1 选项

window_title

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

window_size

设置 CACA 窗口大小,可以是 宽度x高度 形式的字符串或视频大小缩写。如果未指定,则默认为输入视频的大小。

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 -
    

4.4 decklink

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

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

DeckLink 对其支持的格式非常挑剔。像素格式始终为 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 设备的双工/配置文件模式。必须为 ‘unset’、‘half’、‘full’、‘one_sub_device_full’、‘one_sub_device_half’、‘two_sub_device_full’、‘four_sub_device_half’ 默认为 ‘unset’。

注意:DeckLink SDK 11.0 已将双工属性替换为配置文件属性。对于 DeckLink Duo 2 和 DeckLink Quad 2,任何使用相同连接器的 2 个子设备之间共享一个配置文件。对于 DeckLink 8K Pro,所有 4 个子设备之间共享一个配置文件。因此,DeckLink 8K Pro 支持四个配置文件。

DeckLink 8K Pro 的有效配置文件模式(使用 DeckLink SDK >= 11.0):‘one_sub_device_full’、‘one_sub_device_half’、‘two_sub_device_full’、‘four_sub_device_half

DeckLink Quad 2 和 DeckLink Duo 2 的有效配置文件模式:‘half’、‘full

timing_offset

设置所用输出上的同步锁定计时像素偏移量。默认为“unset”。

link

设置所用输出上的 SDI 视频链路配置。必须为“unset”、“single”链路 SDI、“dual”链路 SDI 或“quad”链路 SDI。默认为“unset”。

sqd

为四链路 SDI 输出启用平方分割四分模式。必须为“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 帧缓冲输出设备。

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

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

4.5.1 选项

xoffset
yoffset

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

4.5.2 示例

在帧缓冲设备 /dev/fb0 上播放文件。所需的像素格式取决于当前的帧缓冲设置。

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

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

4.6 opengl

OpenGL 输出设备。已弃用,将被删除。

要启用此输出设备,您需要使用 --enable-opengl 配置 FFmpeg。

此输出设备允许渲染到 OpenGL 上下文。上下文可能由应用程序提供,也可能创建默认的 SDL 窗口。

当设备渲染到外部上下文时,应用程序必须实现以下消息的处理程序:AV_DEV_TO_APP_CREATE_WINDOW_BUFFER - 在当前线程上创建 OpenGL 上下文。AV_DEV_TO_APP_PREPARE_WINDOW_BUFFER - 使 OpenGL 上下文成为当前上下文。AV_DEV_TO_APP_DISPLAY_WINDOW_BUFFER - 交换缓冲区。AV_DEV_TO_APP_DESTROY_WINDOW_BUFFER - 销毁 OpenGL 上下文。应用程序还需要通过发送 AV_APP_TO_DEV_WINDOW_SIZE 消息来通知设备当前分辨率。

4.6.1 选项

背景

设置背景颜色。默认为黑色。

no_window

设置为非零值时禁用默认的 SDL 窗口。设置此项时,应用程序必须提供 OpenGL 上下文以及 window_size_cbwindow_swap_buffers_cb 回调函数。

window_title

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

window_size

设置首选窗口大小,可以是 widthxheight 形式的字符串或视频大小缩写。如果未指定,则默认为输入视频的大小,并根据宽高比进行缩放。主要在未设置 no_window 时使用。

4.6.2 示例

使用 OpenGL 渲染在 SDL 窗口上播放文件

ffmpeg  -i INPUT -f opengl "window title"

4.7 oss

OSS (开放声音系统) 输出设备。

4.8 pulse

PulseAudio 输出设备。

要启用此输出设备,您需要使用 --enable-libpulse 配置 FFmpeg。

有关 PulseAudio 的更多信息,请访问 http://www.pulseaudio.org

4.8.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_sizebuffer_duration 相同的值(以较大者为准)。

minreq

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

4.8.2 示例

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

ffmpeg  -i INPUT -f pulse "stream name"

4.9 sdl

SDL (简单直接媒体层) 输出设备。已弃用,将被删除。

为了在 FFmpeg 中进行监控,可以使用管道和视频播放器(如 ffplay)

ffmpeg -i INPUT -f nut -c:v rawvideo - | ffplay -

"sdl2" 可以用作 "sdl" 的别名。

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

要启用此输出设备,需要在配置构建时在系统上安装 libsdl。

有关 SDL 的更多信息,请查看:http://www.libsdl.org/

4.9.1 选项

window_borderless

关闭 SDL 窗口边框。默认值为 0(启用窗口边框)。

window_enable_quit

当提供非零值时启用退出操作(使用窗口按钮或键盘按键)。默认值为 1(启用退出操作)。

window_fullscreen

当提供非零值时设置全屏模式。默认值为零。

window_size

设置 SDL 窗口大小,可以是 widthxheight 形式的字符串或视频大小缩写。如果未指定,则默认为输入视频的大小,并根据宽高比进行缩放。

window_title

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

window_x
window_y

设置窗口在屏幕上的位置。

4.9.2 交互式命令

设备创建的窗口可以通过以下交互式命令进行控制。

q, ESC

立即退出设备。

4.9.3 示例

以下命令显示 ffmpeg 输出在一个 SDL 窗口中,强制其大小为 qcif 格式

ffmpeg -i INPUT -c:v rawvideo -pix_fmt yuv420p -window_size qcif -f sdl "SDL output"

4.10 sndio

sndio 音频输出设备。

4.11 v4l2

Video4Linux2 输出设备。

4.12 xv

XV (XVideo) 输出设备。

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

4.12.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.12.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 文件中列出。

本文档于 *2025 年 1 月 21 日* 使用 makeinfo 生成。

telepoint.bg 提供托管