翻译ffmpeg-all文档(26),输入设备

1760阅读 0评论2015-07-20 xdsnet
分类:其他平台

输入设备

FFmpeg中的输入设备配置元素用来启用对附加到您的系统一个多媒体设备访问数据。

当编译时,默认会支持所有的输入设备。你可以通过在配置脚本执行时附加–list-indevs了解到支持的设备。

可以通过–disable-indevs在编译时禁用所有输入设备,也可以在此基础上通过–enable-indev=INDEV允许个别设备,或者在默认支持基础上通过–disable-indev=INDEV禁用个别设备支持达到类似的目的。

在ff*工具集中,使用-devices可以获取当前支持的设备信息。

下面是当前可用的输入设备介绍。

alsa

ALSA (Advanced Linux Sound Architecture——高级Linux音频架构) 输入设备

为了能够使用这个设备,在你的系统上必须安装有libasound库。

这个设备允许从ALSA设备采集,设备通过名称来作为ALSA卡标识符,以进行采集。

ALSA标识语法为:

hw:CARD[,DEV[,SUBDEV]] 

这里DEVSUBDEV是可选的。通过这3个参数(CARDDEVSUBDEV)可以指定一个卡的序号或者标识、设备序号和子设备序号(-1意味着任何一个)

在你的系统上要列出当前可用的卡,可以通过文件:/proc/asound/cards and /proc/asound/devices

例如要利用FFmpeg采集ALSA设备(卡ID为0),你可以如下:

ffmpeg -f alsa -i hw:0 alsaout.wav 

更多信息参考

第一部分选择视频输入,然后选择音频输入。流必须通过设备列表中的设备名或者设备索引号来指定。或者视频和/或音频输入设备可以通过使用-video_device_index <INDEX>和/或-audio_device_index <INDEX>语法指定,它将覆盖设备名或者索引来作为输入文件名。

所有有效的设备都可以通过使用-list_devices true枚举出来,它会列出所有设备的名称以及对应的索引号。

下面是两个设备的别名:

译者补注:none可以用来在进行指定时明确表示没有某种类型,比如

-i "none:[AUDIO]" 

表示没有视频只有音频

avfoundation选项

avfoundation支持如下的选项:

avfoundation例子

bktr

BSD 视频输入设备

decklink

decklink输入设备提供从Blackmagic DeckLink 采集的能力

要支持这个设备,编译时需要Blackmagic DeckLink SDK ,且需要采用--extra-cflags--extra-ldflags编译选项。在Windows,你可能需要通过widl运行IDL。

DeckLink非常挑剔支持输入格式。像素格式万恶有uyvy422/210.对于视频你必须利用-list_formats 1指定一个视频画面尺寸(-list_formats 1.)和帧率。音频采样率被设置为48KHz。音频数可能是2、8或16

decklink选项

decklink例子

dshow

Windows DirectShow 输入设备。

DirectShow在ffmpeg中由mingw-w64项目提供支持。当前只有音频和视频设备能够使用。

多个单独输入的设备可能被打开,但它们也可能打开相同的输入,这将改善他们之间的同步

输入名可以按格式(语法):

TYPE=NAME[:TYPE=NAME] 

这里TYPE可以是audio或者videoNAME是设备名或者别名。

dshow选项

如果没有特别指定,将采用设备的默认值。如果设备不支持要求的选项,则会打开失败。

dshow例子

dv1394

Linux DV1394输入设备

fbdev

Linux framebuffer(Linux帧缓冲)输入设备

Linux framebuffer是一种独立于硬件的图像抽象层,它用于在计算机屏幕上显示图像,通常是在控制台(环境)。它可以通过一个文件设备节点访问,通常为:/dev/fb0

要了解更多详细信息请阅读Linux源码文件树下文档:Documentation/fb/framebuffer.txt

为了从/dev/fb0读取:

ffmpeg -f fbdev -r 10 -i /dev/fb0 out.avi 

你可以通过下面的命令截屏:

ffmpeg -f fbdev -frames:v 1 -r 1 -i /dev/fb0 screenshot.jpeg 

此外还可以在http://linux-fbdev.sourceforge.net/了解fbset(1)。

gdigrab

Win32 GDI 屏幕截取设备

这个设备允许你截取显示在Windows(系统)上的屏幕区域。

它有两个可选的输入文件名(形式):desktop或者title=window_title

第一个可选名(desktop)会截取整个桌面或者桌面的指定区域,第二个可选名(根据窗口标题)会截取单独的窗口,而无论在屏幕上的位置(即即使根据某些操作,该窗口已经移除屏幕可见区域,或者被其他窗口覆盖了也可以截取到)

下面是截取整个桌面的例子:

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 

gdigrab选项

iec61883

使用iec61883的FireWire(火线) DV/HDV输入设备。

要允许这个输入设备,需要libiec61883, libraw1394libavc1394被安装到系统中。此外还要在编译时配置--enable-libiec61883以支持。

iec61883支持通过 IEEE1394 (FireWire)接口连接设备获取视频(使用libiec61883 和新的Linux FireWire stack (火线堆栈juju))。从Linux Kernel 2.6.37开始它是默认的DV/HDV输入方法了,而老的FireWire stack已经被移除。

iec61883的选项

iec61883的例子

jack

JACK输入设备。

为了能使用JACK设备,需要系统上存在libjack

一个JACK输入设备创建1个或者多个JACK可写客户端,每一个对应于一个音频通道,命名(指定)为client_name:input_N,这里client_name由程序提供,N是通道id号。每个可写客户端作为ffmpeg的输入设备发送数据。

你一次可以创建1个或者多个JACK可读客户端,来连接到1个或者多个JACK可写客户端。

可以使用jack_connectjack_disconnect连接或者断开(不连接)JACK客户端,或者通过图形化接口实现:例如通过qjackctl

可以通过jack_lsp来列出JACK客户端和它们的属性列表。

下面的例子展示ffmpeg如何从JACK可读客户端采集数据:

# 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 

更多信息参考subcc对应于out7,44号流也是subcc流对应out19

如果没有指定(选项)默认值为输入设备指定的文件名(这里文件名其实是滤镜链图描述)

  • graph_file

    设置通过文件读取/发送(给其他滤镜)滤镜链图的文件名。在文件中的语法与通过graph选项描述滤镜链图的语法相同。

  • lavi例子

    libcdio

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

    需要系统中有libcdio才能启用,且编译时需要用--enable-libcdio配置选项允许。

    设备允许从音频CD播放和获取

    例如利用ffmpeg在/dev/sr0获取整个音频CD内容:

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

    libcdio选项

    编译允许需要配置--enable-libdc1394

    openal

    这个OpenAL输入设备支持在所有实现了OpenAL 1.1的系统上进行音频捕获。

    要编译使用它需要系统包含OpenAL头和libraries库,并且设置编译选项--enable-openal

    OpenAL头和libraries库可以是你OpenAL实现的部分,或者作为附件下载(SDK)。根据你的安装方式,你可能需要通过--extra-cflags--extra-ldflags为编译指定本地的头文件和库文件

    兼容OpenAL的实现有:

    这个设备允许通过OpenAL处理来捕获音频输入。

    你需要通过提供文件名来指定捕获设备的名称。如果为空字符串(''),则会自动选择默认设备。你可以通过list_devices获取到支持设备列表。

    openal选项

    openal例子

    pulse

    PulseAudio(脉冲音频)输入设备

    要使用须编译配置设置--enable-libpulse

    需要提供文件名或者"default"来指定输入源设备

    通过pactl list sources 可以列出所有PulseAudio设备以及属性。

    更多信息参考

  • sample_rate

    Specify the samplerate in Hz, by default 48kHz is used.

  • channels

    Specify the channels in use, by default 2 (stereo) is set.

  • frame_size

    Specify the number of bytes per frame, by default it is set to 1024.

  • fragment_size

    Specify the minimal buffering fragment in PulseAudio, it will affect the audio latency. By default it is unset.

  • pulse例子

    从默认设备捕获来记录:

    ffmpeg -f pulse -i default /tmp/pulse.wav 

    qtkit

    QTKit输入设备

    文件名作为设备名或者索引序号参数被传递。设备索引也可以使用-video_device_index 选项来设定。一个获取的设备索引可以覆盖任何获取的设备名。如果所需的设备仅包含数字,则使用-video_device_index来识别。如果文件名为空字符串或者设备名为"default"都会选择默认设备。有效设备可以由-list_devices枚举。

    ffmpeg -f qtkit -i "0" out.mpg
    
    ffmpeg -f qtkit -video_device_index 0 -i "" out.mpg
    
    ffmpeg -f qtkit -i "default" out.mpg
    
    ffmpeg -f qtkit -list_devices true -i "" 

    sndio

    sndio输入设备。

    要使用它需要系统安装并配置有libsndio

    文件名作为输入设备节点,通常为/dev/audio0

    例如从/dev/audio0捕获音频:

    ffmpeg -f sndio -i /dev/audio0 /tmp/oss.wav 

    video4linux2 ,v4l2

    Video4Linux2 输入视频设备

    "v4l2"是"video4linux2"的别名

    编译需要v4l-utiles支持(--enable-libv4l2编译选项被配置),也可用于-use_libv4l2输入设备选项。

    捕获的设备名是一个文件设备节点,通常Linux系统在设备(例如USB摄像头)插入到系统时自动创建这样的节点,会被命名为/dev/videoNN是设备索引序号

    Video4Linux设备通常只支持有限的分辨率(width x height)和帧率,通过-list_formats all选项来获取支持情况。一些设备,例如电视卡可以支持1个或者多个标准,它支持的标准可以通过-list_standards all来了解。

    时间戳时基单位为1microsecond。根据内核版本和配置,时间戳可以基于实时间(real time clock——绝对时间,一种起源于Unix的表示方式)或者单调时钟(monotonic clock——通常源自启动时间,不受NTP或者手动改变)。-timestamps abs或者-ts abs选择启用实时间。

    在ffmpeg或ffplay使用的例子如下:

    更多关于video4linux的信息参考DISPLAY可以指定默认显示名。x_offset,y_offset指定捕获偏移,是对于左上建立的X11屏幕,默认为0.

    通过X11文档(man X)来了解更详细信息。

    使用xdpyinfo程序来获得关于你X11显示的基本属性信息(配合 grep "name" 或者 "dimensions")

    例如使用ffmpeg捕获 :0.0

    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 

    X11grab选项

    x11grab 的grab_x,grab_y AV选项

    语法:

    -grab_x x_offset -grab_y y_offset 

    设置区域坐标。它们表示抵消X11左上角。默认值为0。

    上一篇:翻译ffmpeg-all文档(25),设备选项
    下一篇:翻译ffmpeg-all文档(27),输出设备