FFmpeg 设备文档

目录

1 说明

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

2 设备选项

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

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

可以通过在 FFmpeg 工具中 指定 -选项 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/设备

例如,要从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 的可用性。

该设备允许从 Android 设备上的所有相机进行捕获,这些相机集成到 Camera2 NDK API 中。

可用的相机在内部枚举,可以使用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|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.

standard

可用值为:

pal
ntsc
secam
paln
palm
ntscj

3.5 decklink

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

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

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

3.5.1 选项

list_devices

如果设置为真的,打印设备列表并退出。默认为错误的。此选项已弃用,请使用 -sourcesffmpeg 的选项列出可用的输入设备。

list_formats

如果设置为真的,打印支持的格式列表并退出。默认为错误的

format_code <FourCC>

这会将输入视频格式设置为 FourCC 给出的格式。要查看您的设备支持的值,请使用列表格式。请注意,有一个 FourCC‘朋友’也可以用作朋友(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

如果设置为非零,将从垂直辅助数据中捕获额外的图文电视流。支持标清 PAL (576i) 和高清(1080i 或 1080p)源。如果是高清源,则对 OP47 数据包进行解码。

此选项是捕获的 SD PAL VBI 行(特别是行 6 到 22 以及行 318 到 335)的位掩码。第 6 行是掩码中的 LSB。不包含图文电视信息的选定行将被忽略。您可以使用特殊的全部选择所有可能的行的常量,或者 标准跳过第 6、318 和 319 行,这些行并不与所有接收器兼容。

对于 SD 源,ffmpeg 需要使用--enable-libzvbi. 对于高清源,在较旧的(4K 之前)DeckLink 卡型号上,您必须以 10 位模式进行捕捉。

channels

定义要捕获的音频通道数。必须是 '2','8' 或者 '16'。默认为 '2'。

duplex_mode

设置 Decklink 设备双工/配置文件模式。必须是 '未设置','一半','满的','one_sub_device_full','one_sub_device_half','两个子设备完整','四子设备半' 默认为 '未设置'。

注意: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','两个子设备完整','四子设备半'

DeckLink Quad 2 和 DeckLink Duo 2 的有效配置文件模式:'一半','满的'

timecode_format

要包含在帧和视频流元数据中的时间码类型。必须是 '没有任何','rp188vitc','rp188vitc2','rp188ltc','rp188hfr','rp188any','维生素C','维生素C2', 或者 '连续剧'。默认为 '没有任何' (不包含)。

为了正确支持 50/60 fps 时间码,查询的时间码类型的顺序为 'rp188any' 是 HFR、VITC1、VITC2 和 LTC,适用于 >30 fps 的内容。请注意,这与 DeckLink API 使用的顺序略有不同,即 HFR、VITC1、LTC、VITC2。

video_input

设置视频输入源。必须是 '未设置','sdi','高清多媒体接口','光纤_SDI','成分','合成的' 或者 '视频'。默认为 '未设置'。

audio_input

设置音频输入源。必须是 '未设置','嵌入式','aes_ebu','模拟','模拟_xlr','模拟_RCA' 或者 '麦克风'。默认为 '未设置'。

video_pts

设置视频数据包时间戳源。必须是 '视频','声音的','参考','挂钟' 或者 '绝对挂钟'。默认为 '视频'。

audio_pts

设置音频数据包时间戳源。必须是 '视频','声音的','参考','挂钟' 或者 '绝对挂钟'。默认为 '声音的'。

draw_bars

如果设置为 '真的',在信号丢失的情况下绘制彩条。默认为 '真的'。

queue_size

设置最大输入缓冲区大小(以字节为单位)。如果缓冲达到此值,传入的帧将被丢弃。默认为 '1073741824'。

audio_depth

设置音频样本位深度。必须是 '16' 或者 '32'。默认为 '16'。

decklink_copyts

如果设置为真的,时间戳按原样转发,而不删除初始偏移量。默认为错误的

timestamp_align

捕获开始时间对齐(以秒为单位)。如果设置为非零,则输入帧将被丢弃,直到系统时间戳与配置值一致。最多可容忍一帧持续时间的对准差异。这对于维护为“N 路”冗余部署的 N 个不同硬件设备之间的输入同步非常有用。在使用此选项之前,应将不同硬件设备的系统时间通过NTP或PTP等协议进行同步。请注意,此方法并非万无一失。在某些边界情况下,由于操作系统中的线程调度抖动,输入同步可能不会发生。同步可能会出现 1 帧错误,或者在极少数情况下会出现错误 时间戳对齐秒。默认为 '0'。

wait_for_tc (bool)

丢弃帧,直到收到带有时间码的帧。有时,第一个输入帧未接收到串行时间码。如果发生这种情况,存储的流时间码将不准确。如果该选项设置为真的,输入帧将被丢弃,直到接收到带有时间码的帧。必须指定选项timecode_format 。默认为错误的

enable_klv(bool)

如果设置为真的,从VANC中提取KLV数据并输出KLV数据包。KLV VANC 数据包根据 MID 和 PSC 字段进行连接并聚合为一个 KLV 数据包。默认为错误的

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 输入设备。

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

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

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

TYPE=NAME[:TYPE=NAME]

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

3.6.1 选项

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

video_size

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

framerate

设置捕获视频的帧速率。

sample_rate

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

sample_size

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

channels

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

list_devices

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

list_options

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

video_device_number

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

audio_device_number

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

pixel_format

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

audio_buffer_size

设置音频设备缓冲区大小(以毫秒为单位)(这会直接影响延迟,具体取决于设备)。默认使用音频设备的默认缓冲区大小(通常为 500ms 的倍数)。将此值设置得太低会降低性能。另请参阅 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

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

show_audio_device_dialog

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

show_video_crossbar_connection_dialog

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

show_audio_crossbar_connection_dialog

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

show_analog_tv_tuner_dialog

如果设置为真的,在捕获开始之前,向最终用户弹出一个显示对话框,允许他们手动修改电视频道和频率。

show_analog_tv_tuner_audio_dialog

如果设置为真的,在捕获开始之前,向最终用户弹出一个显示对话框,允许他们手动修改电视音频(例如单声道与立体声、语言 A、B 或 C)。

audio_device_load

从文件加载音频捕获过滤器设备,而不是按名称搜索它。如果过滤器支持其属性的序列化,它也可能加载其他参数。要使用此功能,必须指定音频捕获源,但它可以是任何东西,甚至是假的。

audio_device_save

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

video_device_load

从文件加载视频捕获过滤器设备,而不是按名称搜索它。如果过滤器支持其属性的序列化,它也可能加载其他参数。要使用此功能,必须指定视频捕获源,但它可以是任何东西,甚至是假的。

video_device_save

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

use_video_device_timestamps

如果设置为错误的,视频帧的时间戳将从挂钟导出,而不是捕获设备提供的时间戳。这允许在提供不可靠时间戳的设备周围工作。

3.6.2 示例

  • 打印 DirectShow 支持的设备列表并退出:
    $ ffmpeg -list_devices true -f dshow -i dummy
    
  • 打开视频设备相机
    $ ffmpeg -f dshow -i video="Camera"
    
  • 打开名为Camera的第二个视频设备:
    $ ffmpeg -f dshow -video_device_number 1 -i video="Camera"
    
  • 打开视频设备摄像头和音频设备麦克风
    $ 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 帧缓冲区是一个独立于图形硬件的抽象层,用于在计算机显示器(通常是控制台)上显示图形。通过文件设备节点来访问,通常 /dev/fb0

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

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

从帧缓冲设备进行记录/dev/fb0ffmpeg

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

第一个选项将捕获整个桌面或桌面的固定区域。第二个选项将捕获单个窗口的内容,无论其在屏幕上的位置如何。

例如,要使用以下命令获取整个桌面ffmpeg

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

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

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_region1,则抓取区域将显示在屏幕上。使用此选项,如果仅抓取屏幕的一部分,则很容易知道正在抓取的内容。

请注意,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

设置视频帧大小。默认情况下捕获全屏桌面被选择,或者完整窗口大小,如果标题=窗口标题被选中。

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 端口,或“自动”以选择第一个连接的端口。

3.9.1 选项

dvtype

覆盖 DV/HDV 的自动检测。仅当自动检测不起作用或应禁止使用不同的设备类型时才应使用此功能。将 DV 设备视为 HDV(反之亦然)将不起作用并导致未定义的行为。价值汽车,DV高清病毒都支持。

dvbuffer

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

dvguid

通过指定其 GUID 选择捕获设备。仅从指定设备执行捕获,如果未找到具有给定 GUID 的设备,则捕获失败。如果同时连接多个设备,这对于选择输入非常有用。查看 /sys/bus/firewire/devices 以查找 GUID。

3.9.2 示例

  • 抓取并显示 FireWire DV/HDV 设备的输入。
    ffplay -f iec61883 -i auto
    
  • 如果源是 HDV,则使用 100000 个数据包的数据包缓冲区抓取并记录 FireWire DV/HDV 设备的输入。
    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

下面的示例展示了如何使用 捕获 JACK 可读客户端ffmpeg

# 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 主控或 CAP_SYS_ADMIN 才能运行。

如果您不明白所有这些意味着什么,您可能不想要这个。看着 x11抢反而。

3.11.1 选项

device

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

format

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

format_modifier

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

crtc_id

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

plane_id

用于定义捕获源的 KMS 平面 ID。如果两者都没有,则默认为找到的第一个活动平面crtc_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 滤波器图的开放输出板读取数据。

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

3.12.1 选项

graph

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

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

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

graph_file

设置要读取并发送到其他过滤器的过滤器图表的文件名。filtergraph 的语法与 option 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]"
    
  • 将解码帧转储到图像并将隐藏式字幕转储到文件(实验):
    ffmpeg -f lavfi -i "movie=test.ts[out0+subcc]" -map v frame%08d.png -map s -c copy -f rawvideo subcc.bin
    

3.13 libcdio

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

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

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

例如,将ffmpeg整个音频 CD 复制到/dev/sr0,您可以运行命令:

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

3.13.1 选项

speed

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

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

paranoia_mode

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

disable
verify
overlap
neverskip
full

默认值为 '禁用'。

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

3.14 libdc1394

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

需要配置选项--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.

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(官方 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

如果设置为真的,打印设备列表并退出。默认为错误的

3.15.2 示例

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

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

从 OpenAL 设备捕获DR-BT101 通过 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

打开声音系统输入设备。

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

例如从/dev/dsp使用ffmpeg命令:

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 输入设备。

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

提供给输入设备的文件名是源设备或字符串“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

例如从/dev/audio0使用ffmpeg命令:

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/视频N,其中N是与设备关联的数字。

Video4Linux2 设备通常支持一组有限的 宽度x高度尺寸和帧速率。-list_formats all您可以检查Video4Linux2 设备支持哪些功能。某些设备(例如电视卡)支持一种或多种标准。可以使用 列出所有支持的标准-list_standards all

时间戳的时基是 1 微秒。根据内核版本和配置,时间戳可能源自实时时钟(起源于 Unix Epoch)或单调时钟(起源通常在启动时,不受 NTP 或手动更改时钟的影响)。这 - 时间戳绝对值或者-ts 腹肌选项可用于强制转换为实时时钟。

video4linux2 设备与ffmpeg 和的一些使用示例ffplay

  • 列出 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 选项

standard

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

channel

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

video_size

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

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(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]

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

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

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

使用该xdpyinfo程序获取有关 X11 显示器属性的基本信息(例如 grep 获取“名称”或“尺寸”)。

例如从:0.0使用ffmpeg

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_region1,则抓取区域将显示在屏幕上。使用此选项,如果仅抓取屏幕的一部分,则很容易知道正在抓取的内容。

region_border

设置区域边框厚度如果-显示区域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,映射到整个屏幕(根窗口)。

可以使用该程序找到窗口的 ID xwininfo,可能使用选项 -tree 和 -root。

如果稍后放大窗口,则不会记录新区域。当窗口关闭、取消映射(即图标化)或缩小到超出视频大小(默认为初始窗口大小)时,视频结束。

该选项禁用选项跟随鼠标选择区域

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 <索引> ,覆盖输入文件名中给出的任何设备名称或索引。

可以通过使用枚举所有可用设备-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 窗口,因此应用程序中只能拥有该输出设备的一个实例。

要启用此输出设备,您需要使用 来配置 FFmpeg --enable-libcaca。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

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

list_dither

列出与参数相关的可用抖动选项。参数必须是algorithms, antialiases, charsets,之一colors

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.

DeckLink对其支持的格式非常挑剔。像素格式始终为 uyvy422,必须为您的设备确定帧速率、场序和视频大小-list_formats 1。音频采样率始终为 48 kHz。

4.4.1 选项

list_devices

如果设置为真的,打印设备列表并退出。默认为错误的。此选项已弃用,请使用 -sinksffmpeg 的选项列出可用的输出设备。

list_formats

如果设置为真的,打印支持的格式列表并退出。默认为错误的

preroll

预卷视频的时间量(以秒为单位)。默认为0.5

duplex_mode

设置 Decklink 设备双工/配置文件模式。必须是 '未设置','一半','满的','one_sub_device_full','one_sub_device_half','两个子设备完整','四子设备半' 默认为 '未设置'。

注意: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','两个子设备完整','四子设备半'

DeckLink Quad 2 和 DeckLink Duo 2 的有效配置文件模式:'一半','满的'

timing_offset

设置所用输出上的同步锁相时序像素偏移。默认为 '未设置'。

link

设置所用输出上的 SDI 视频链路配置。必须是 '未设置','单身的'链接SDI,'双重的'链接SDI或'四边形'链接SDI。默认为 '未设置'。

sqd

为四链路 SDI 输出启用 Square Division Quad Split 模式。必须是 '未设置','真的' 或者 '错误的'。默认为未设置

level_a

在所使用的输出上启用 SMPTE A 级模式。必须是 '未设置','真的' 或者 '错误的'。默认为未设置

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 帧缓冲区是一个独立于图形硬件的抽象层,用于在计算机显示器(通常是控制台)上显示图形。通过文件设备节点来访问,通常 /dev/fb0

欲了解更多详细信息,请阅读文件 文档/fb/framebuffer.txt包含在 Linux 源代码树中。

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 输出设备。

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

该输出设备允许渲染到 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 选项

background

设置背景颜色。黑色是默认值。

no_window

设置为非零值时禁用默认 SDL 窗口。应用程序必须提供 OpenGL 上下文以及window_size_cb设置window_swap_buffers_cb时的回调。

window_title

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

window_size

设置首选窗口大小,可以是宽度x高度形式的字符串或视频大小缩写。如果未指定,则默认为输入视频的大小,并根据宽高比缩小。主要用在什么时候无窗口未设置。

4.6.2 示例

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

ffmpeg  -i INPUT -f opengl "window title"

4.7 oss

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

4.8 pulse

PulseAudio 输出设备。

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

有关 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 缓冲区的大小和持续时间。小缓冲区可以提供更多控制,但需要更频繁的更新。

缓冲区大小指定大小(以字节为单位) 缓冲区持续时间指定持续时间(以毫秒为单位)。

当提供两个选项时,将使用最高值(使用流参数将持续时间重新计算为字节)。如果它们设置为 0(默认值),设备将使用默认的 PulseAudio 持续时间值。默认情况下,PulseAudio 将缓冲持续时间设置为 2 秒左右。

prebuf

指定预缓冲大小(以字节为单位)。服务器至少在此之前未启动播放预缓冲区缓冲区中有可用字节。默认情况下,此选项初始化为与 缓冲区大小或者缓冲区持续时间(以较大者为准)。

minreq

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

4.8.2 示例

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

ffmpeg  -i INPUT -f pulse "stream name"

4.9 sdl

SDL(简单直接媒体层)输出设备。

“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窗口大小,可以是宽度x高度形式的字符串 或视频大小缩写。如果未指定,则默认为输入视频的大小,并根据宽高比缩小。

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 Window 系统窗口中显示视频流。

4.12.1 选项

display_name

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

显示名称或 DISPLAY 环境变量可以是格式为主机名[:数字[. 屏幕编号]]。

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

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

例如,dual-headed:0.1将指定名为“双头”的机器上显示器 0 的屏幕 1。

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

window_id

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

window_size

设置创建的窗口大小,可以是宽x形式的字符串 或视频大小缩写。如果未指定,则默认为输入视频的大小。设置 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 log有关作者身份的详细信息,请参阅项目的 Git 历史记录 (https://git.ffmpeg.org/ffmpeg),例如通过在 FFmpeg 源目录中键入命令 ,或浏览https://git 的在线存储库。 ffmpeg.org/ffmpeg

文件中列出了特定组件的维护者 维护者在源代码树中。

本文档于2023 年 11 月 17 日使用makeinfo 生成。

由telepoint.bg提供的托管