目录
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]]
其中DEV和SUBDEV组件是可选的。
三个参数(按顺序:CARD、DEV、SUBDEV)指定卡号或标识符、设备号和子设备号(-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
如果设置为真的,打印设备列表并退出。默认为错误的。此选项已弃用,请使用
-sources
ffmpeg 的选项列出可用的输入设备。- 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可以是audio或video,NAME是设备的名称或备用名称。
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/fb0和
ffmpeg
:
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_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
设置视频帧大小。默认情况下捕获全屏桌面被选择,或者完整窗口大小,如果标题=窗口标题被选中。
- 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_connect
和jack_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 速度单位。速度通过libcdio
cdio_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
设置以字符串形式给出的视频大小,例如
640x480
或hd720
。默认为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
设置捕获的音频的样本大小(以位为单位)。只有价值观 8和16目前支持。默认为 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_offset和y_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_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
设置区域边框厚度如果-显示区域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_offset和y_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
如果设置为真的,打印设备列表并退出。默认为错误的。此选项已弃用,请使用
-sinks
ffmpeg 的选项列出可用的输出设备。- 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提供的托管