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

DEVSUBDEV组件是可选的。

三个参数(按顺序:CARD,DEV,SUBDEV)指定卡号或标识符,设备号和子设备号(-1表示任意)。

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

例如,要使用卡ID0ALSA设备从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

将视频大小设置为字符串,例如640x480hd720。 如果请求的视频大小不可用或默认情况下,则回退到Android报告的第一个可用配置。

framerate

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

camera_index

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

input_queue_size

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

18.3 avfoundation

AVFoundation输入设备。

AVFoundationApple目前推荐的用于在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,816。请注意,所有音频通道都捆绑在一个音轨中。

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,则视频将以10v210而非uyvy422捕获。并非所有Blackmagic设备都支持此选项。

raw_format

设置捕获视频的像素格式。可用值包括:

uyvy422
yuv422p10
ARGB
BGRA
rgb10
teletext_lines

如果设置为非零,则将从垂直辅助数据中捕获另外的图文电视流。支持SD PAL(576i)HD(1080i或1080p)信号源。在HD源的情况下,OP47分组被解码。

此选项是捕获的SD PAL VBI线的位掩码,特别是第622行,第318335行。第6行是掩码中的LSB。将忽略不包含图文电视信息的选定行。您可以使用特殊的all常量来选择所有可能的行,或者使用“标准”来跳过与所有接收器不兼容的第6,318319行。

对于SD源,需要使用--enable-libzvbi编译ffmpeg。对于高清信号源,在旧的(4K之前)DeckLink卡型号上,必须以10位模式捕获。

channels

定义要捕获的音频通道数。必须是2816。默认为2

duplex_mode

设置decklink设备双工模式。必须是unsethalffull。默认为unset

video_input

设置视频输入源。必须是unsetsdihdmioptical_sdicomponentcomposites_video。默认为unset

audio_input

设置音频输入源。必须是unsetembeddedaes_ebuanaloganalog_xlranalog_rcamicrophone。默认为unset

video_pts

设置视频数据包时间戳源。必须是videoaudioreference, wallclock 或者abs_wallclock。默认是video

audio_pts

设置音频数据包时间戳源。必须是 videoaudioreferencewallclock 或者 abs_wallclock。默认值是:audio

draw_bars

如果设置为true,则在信号丢失的情况下绘制颜色条。默认为true

queue_size

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

audio_depth

设置音频采样位深度。必须是1632。默认为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

60fpsCRTC 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,则在捕获开始之前,向最终用户弹出一个显示对话框,允许他们手动修改电视音频(如单声道与立体声,语言ABC)。

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值将区域移动到该显示器。

(0)

相关推荐