美文网首页FFPlay专辑
FFplay文档解读-13-设备选项,输入设备一

FFplay文档解读-13-设备选项,输入设备一

作者: 张芳涛 | 来源:发表于2018-11-15 16:06 被阅读25次

    前言

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

    相关文章

      网友评论

        本文标题:FFplay文档解读-13-设备选项,输入设备一

        本文链接:https://www.haomeiwen.com/subject/hybyfqtx.html