FFplay文档解读-13-设备选项,输入设备一
前言
Github
地址:Github
简书地址:简书
专辑地址:FFplay专辑
17.设备选项
libavdevice
库提供与libavformat
相同的接口。 即,输入设备被视为分路器,输出设备如复用器,接口和通用设备选项与libavformat
相同(参见ffmpeg-formats
手册)。
此外,每个输入或输出设备可以支持所谓的私有选项,其特定于该组件。
可以通过在FFmpeg
工具中指定-option
值,或通过在设备AVFormatContext
选项中显式设置值或使用libavutil / opt.h``API
进行编程来设置选项。
18.输入设备
输入设备是FFmpeg
中配置的元素,可以访问来自连接到系统的多媒体设备的数据。
配置FFmpeg
构建时,默认情况下会启用所有支持的输入设备。 您可以使用配置选项-list-indevs
列出所有可用的列表。
您可以使用configure
选项-disable-indevs
禁用所有输入设备,并使用选项-enable-indev = INDEV
选择性地启用输入设备,或者可以使用选项-disable
禁用特定输入设备-indev= INDEV
。
ff *
工具的选项-devices
将显示支持的输入设备列表。
下面是对当前可用输入设备的描述。
18.1 alsa
ALSA
(高级Linux
声音架构)输入设备。
要在配置期间启用此输入设备,您需要在系统上安装libasound
。
该设备允许从ALSA
设备捕获。 要捕获的设备的名称必须是ALSA
卡标识符。
ALSA
标识符具有以下语法:
hw:CARD[,DEV[,SUBDEV]]
DEV
和SUBDEV
组件是可选的。
三个参数(按顺序:CARD,DEV,SUBDEV
)指定卡号或标识符,设备号和子设备号(-1
表示任意)。
要查看系统当前识别的卡列表,请检查文件/ proc / asound / cards
和/ proc / asound / devices
。
例如,要使用卡ID
为0
的ALSA
设备从ffmpeg
捕获,可以运行以下命令:
ffmpeg -f alsa -i hw:0 alsaout.wav
有关更多信息,请参阅:http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html
18.1.1 选项
sample_rate
以Hz
为单位设置采样率。 默认值为48000
。
channels
设置通道数。 默认值为2
。
18.2 android_camera
Android
相机输入设备。
此输入设备使用Android Camera2 NDK API
,该API
可在API
级别为24+
的设备上使用。 在配置期间自动检测android_camera
的可用性。
该设备允许从Android
设备上的所有摄像头进行捕获,这些摄像头集成在Camera2 NDK API
中。
可用的摄像机在内部枚举,可以使用camera_index
参数进行选择。 输入文件字符串将被丢弃。
通常,后置摄像头的索引为0
,而前置摄像头的索引为1
。
18.2.1 选项
video_size
将视频大小设置为字符串,例如640x480
或hd720
。 如果请求的视频大小不可用或默认情况下,则回退到Android
报告的第一个可用配置。
framerate
设置视频帧率。 如果请求的帧速率不可用或默认情况下(-1
),则回退到Android
报告的第一个可用配置。
camera_index
设置要使用的摄像机的索引。 默认值为0
。
input_queue_size
设置要缓冲的最大帧数。 默认值为5
。
18.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
不记录相应的媒体类型。 这相当于指定空设备名称或索引。
18.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
。
18.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
18.4 bktr
BSD
视频输入设备。
18.4.1 选项
framerate
设置帧速率。
video_size
设置视频帧大小。 默认是vga
。
standard
可用值如下所示:
值 |
---|
pal |
ntsc |
secam |
paln |
palm |
ntscj |
18.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
。请注意,所有音频通道都捆绑在一个音轨中。
18.5.1 选项
list_devices
如果设置为true
,则打印设备列表并退出。默认为false
。
list_formats
如果设置为true
,则打印支持的格式列表并退出。默认为false
。
format_code <FourCC>
这将输入视频格式设置为FourCC
给出的格式。要查看设备支持的值,请使用list_formats
。请注意,有一个FourCC``pal
也可以用作pal
(3个字母)。默认行为是输入视频格式的自动检测,如果硬件支持它。
bm_v210
这是一个已弃用的选项,您可以使用raw_format
代替。如果设置为1
,则视频将以10
位v210
而非uyvy422
捕获。并非所有Blackmagic
设备都支持此选项。
raw_format
设置捕获视频的像素格式。可用值包括:
值 |
---|
uyvy422 |
yuv422p10 |
ARGB |
BGRA |
rgb10 |
teletext_lines |
如果设置为非零,则将从垂直辅助数据中捕获另外的图文电视流。支持SD PAL(576i)
和HD(1080i或1080p)
信号源。在HD
源的情况下,OP47
分组被解码。
此选项是捕获的SD PAL VBI
线的位掩码,特别是第6
到22
行,第318
到335
行。第6
行是掩码中的LSB
。将忽略不包含图文电视信息的选定行。您可以使用特殊的all
常量来选择所有可能的行,或者使用“标准”来跳过与所有接收器不兼容的第6,318
和319
行。
对于SD
源,需要使用--enable-libzvbi
编译ffmpeg
。对于高清信号源,在旧的(4K
之前)DeckLink
卡型号上,必须以10
位模式捕获。
channels
定义要捕获的音频通道数。必须是2
,8
或16
。默认为2
。
duplex_mode
设置decklink
设备双工模式。必须是unset
,half
或full
。默认为unset
。
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
。
queue_size
设置最大输入缓冲区大小(字节)。如果缓冲达到此值,则将丢弃传入帧。默认为1073741824
。
audio_depth
设置音频采样位深度。必须是16
或32
。默认为16
。
decklink_copyts
如果设置为true
,则时间戳将按原样转发,而不会删除初始偏移量。默认为false
。
18.5.2 示例
-
列出输入设备:
ffmpeg -f decklink -list_devices 1 -i dummy
-
列出支持的格式:
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 -bm_v210 1 -format_code Hi50 -f decklink -i 'UltraStudio Mini Recorder' -c:a copy -c:v copy output.avi
-
使用
16
个音频通道捕获1080i50
的视频片段:ffmpeg -channels 16 -format_code Hi50 -f decklink -i 'UltraStudio Mini Recorder' -c:a copy -c:v copy output.avi
18.6 kmsgrab
KMS
视频输入设备。
捕获与指定的CRTC
或平面关联的KMS
扫描输出帧缓冲区作为可以传递给其他硬件功能的DRM
对象。
需要DRM
主服务器或CAP_SYS_ADMIN
才能运行。
如果您不明白所有这些意味着什么,您可能不希望这样。 请改为x11grab
。
18.6.1 选项
device
要捕获的DRM
设备。 默认为/dev/dri/card0
。
format
帧缓冲区的像素格式。 默认为bgr0
。
format_modifier
格式修饰符以在输出帧上发出信号。 这是正确导入某些API所必需的,但无法自动检测。 有关可能的值,请参阅libdrm
文档。
crtc_id
KMS CRTC ID
用于定义捕获源。 将使用给定CRTC
上的第一个活动平面。
plane_id
KMS
平面ID
用于定义捕获源。 如果既未指定crtc_id
也未指定plane_id
,则默认为找到的第一个活动平面。
framerate
帧率捕获。 这不会与任何页面翻转或帧缓冲区更改同步 - 它只是定义帧缓冲区的采样间隔。 比帧缓冲更新速率更快的采样将生成具有相同内容的独立帧。 默认为30
。
18.6.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
18.7 libndi_newtek
libndi_newtek
输入设备提供使用NDI
(网络设备接口,NewTek
创建的标准)的捕获功能。
输入文件名是一个NDI
源名称,可以通过将-find_sources 1
发送到命令行来找到它 - 它没有特定的语法,但是人类可读格式化。
要启用此输入设备,需要NDI SDK
,并且需要使用相应的--extra-cflags
和--extra-ldflags
进行配置。
18.7.1 选项
find_sources
如果设置为true
,则打印已找到/可用的NDI
源列表并退出。 默认为false
。
wait_sources
覆盖等待在线源数量发生变化的时间。 默认为0.5
。
allow_video_fields
当此标志为false
时,您收到的所有视频都将是渐进式的。 默认为true
。
18.7.2 示例
-
列出输入设备:
ffmpeg -f libndi_newtek -find_sources 1 -i dummy
-
重新流向
NDI
:ffmpeg -f libndi_newtek -i "DEV-5.INTERNAL.M1STEREO.TV (NDI_SOURCE_NAME_1)" -f libndi_newtek -y NDI_SOURCE_NAME_2
18.8 dshow
Windows DirectShow
输入设备。
使用mingw-w64
项目构建FFmpeg
时,将启用DirectShow
支持。 目前仅支持音频和视频设备。
可以将多个设备作为单独的输入打开,但也可以在同一输入上打开它们,这可以改善它们之间的同步。
输入名称应采用以下格式:
TYPE=NAME[:TYPE=NAME]
其中TYPE
可以是音频或视频,NAME
是设备的名称或替代名称。
18.8.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
设置音频设备缓冲区大小(以毫秒为单位)(可能会直接影响延迟,具体取决于设备)。默认使用音频设备的默认缓冲区大小(通常为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
如果设置为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
将当前使用的视频捕获过滤器设备及其参数(如果过滤器支持)保存到文件中。如果存在具有相同名称的文件,则将覆盖该文件。
18.8.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"
18.9 fbdev
Linux framebuffer
输入设备。
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
18.9.1 选项
framerate
设置帧速率。 默认值为25
。
18.10 gdigrab
基于Win32 GDI
的屏幕捕获设备。
此设备允许您捕获Windows
上的显示区域。
输入文件名有两个选项:
desktop
或者
title=window_title
第一个选项将捕获整个桌面或桌面的固定区域。 第二个选项将捕获单个窗口的内容,而不管它在屏幕上的位置。
例如,要使用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
18.10.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
值将区域移动到该显示器。