FFplay文档解读-14-输入设备二
前言
Github地址:Github
简书地址:简书
专辑地址:FFplay专辑
18.11 iec61883
使用libiec61883的FireWire DV / HDV输入设备。
要启用此输入设备,您需要在系统上安装libiec61883,libraw1394和libavc1394。 使用configure选项--enable-libiec61883在启用设备的情况下进行编译。
iec61883捕获设备支持使用libiec61883和新的Linux FireWire堆栈(juju)从通过IEEE1394(FireWire)连接的视频设备进行捕获。 这是Linux Kernel 2.6.37及更高版本中的默认DV / HDV输入方法,因为旧的FireWire堆栈已被删除。
指定要用作输入文件的FireWire端口,或选择auto以选择连接的第一个端口。
18.11.1 选项
dvtype
覆盖DV/HDV的自动检测。 仅当自动检测不起作用或者禁止使用其他设备类型时,才应使用此选项。 将DV设备视为HDV(反之亦然)将不起作用并导致未定义的行为。 支持值auto,dv和hdv。
dvbuffer
以帧为单位设置传入数据的最大缓冲区大小。 对于DV,这是一个确切的值。 对于HDV,它不是帧精确的,因为HDV没有固定的帧大小。
dvguid
通过指定其GUID来选择捕获设备。 捕获只会从指定的设备执行,如果找不到具有给定GUID的设备,则会失败。 如果同时连接多个设备,这对于选择输入很有用。 查看/sys/bus/firewire/devices以查找GUID。
18.11.2 示例
抓取并显示FireWire DV/HDV设备的输入。
ffplay -f iec61883 -i auto
如果源是HDV,则使用100000个数据包的数据包缓冲区抓取并记录FireWire DV/HDV设备的输入。
ffmpeg -f iec61883 -i auto -hdvbuffer 100000 out.mpg
18.12 jack
JACK输入设备。
要在配置期间启用此输入设备,您需要在系统上安装libjack。
JACK输入设备创建一个或多个JACK可写客户端,每个音频通道一个,名称为client_name:input_N,其中client_name是应用程序提供的名称,N是标识通道的编号。 每个可写客户端都将获取的数据发送到FFmpeg输入设备。
一旦创建了一个或多个JACK可读客户端,就需要将它们连接到一个或多个JACK可写客户端。
要连接或断开JACK客户端,可以使用jack_connect和jack_disconnect程序,或通过图形界面进行,例如使用qjackctl。
要列出JACK客户端及其属性,可以调用命令jack_lsp。
下面是一个示例,演示如何使用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 -csystem:capture_1system:capture_2system:playback_1system:playback_2ffmpeg:input_1metro:120_bpm# Connect metro to the ffmpeg writable client.$ jack_connect metro:120_bpm ffmpeg:input_1
欲了解更多信息,请阅读:http://jackaudio.org/
18.12.1 选项
channels
设置通道数。 默认值为2。
18.13 lavfi
Libavfilter输入虚拟设备。
该输入设备从libavfilter滤波器图的打开输出焊盘读取数据。
对于每个滤波器图打开输出,输入设备将创建相应的流,该流映射到生成的输出。 目前仅支持视频数据。 filtergraph通过选项graph指定。
18.13.1 选项
graph
指定要用作输入的过滤器图形。每个视频打开输出必须用outN形式的唯一字符串标记,其中N是从0开始的数字,对应于设备生成的映射输入流。第一个未标记的输出会自动分配给out0标签,但需要明确指定所有其他输出。
后缀+ subcc可以附加到输出标签,以创建一个额外的流,其中隐藏的字幕数据包附加到该输出(实验性的;现在仅用于EIA-608 / CEA-708)。在所有正常流之后,按照相应流的顺序创建子流。例如,如果存在out19 + subcc,out7 + subcc并且直到out42,则流#43对于流#7是subcc而对于流#19是流#44是subcc。
如果未指定,则默认为为输入设备指定的文件名。
graph_file
设置要读取的过滤器图形的文件名并将其发送到其他过滤器。 filtergraph的语法与选项图指定的语法相同。
dumpgraph
把graph抛给stderr。
18.13.2 示例
创建彩色视频流并使用
ffplay播放:ffplay -f lavfi -graph "color=c=pink [out0]" dummy如前面的示例所示,但是使用
filename来指定图形描述,并省略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
18.14 libcdio
基于libcdio的音频CD输入设备。
要在配置期间启用此输入设备,您需要在系统上安装libcdio。 它需要配置选项--enable-libcdio。
该设备允许从音频CD播放和抓取。
例如,使用ffmpeg复制/ dev / sr0中的整个音频CD,可以运行命令:
ffmpeg -f libcdio -i /dev/sr0 cd.wav
18.14.1 选项
speed
设置驱动器读取速度。 默认值为0。
速度指定CD-ROM速度单位。 速度通过libcdio cdio_cddap_speed_set函数设置。 在许多CD-ROM驱动器上,指定一个太大的值将导致使用最快的速度。
paranoia_mode
设置偏执恢复模式标志。 它接受以下值之一:
| 值 |
|---|
| disable |
| verify |
| overlap |
| neverskip |
| full |
默认值是disable。
有关可用恢复模式的更多信息,请参阅paranoia项目文档。
18.15 libdc1394
IIDC1394输入设备,基于libdc1394和libraw1394。
需要configure选项--enable-libdc1394。
18.16 openal
OpenAL输入设备在所有系统上提供音频捕获,并具有可用的OpenAL 1.1实现。
要在配置期间启用此输入设备,您需要在系统上安装OpenAL标头和库,并且需要使用--enable-openal配置FFmpeg。
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是官方Mac OS X Audio接口Core Audio的一部分。 请参阅http://developer.apple.com/technologies/mac/audio-and-video.html
该设备允许从通过OpenAL处理的音频输入设备中捕获。
需要在提供的文件名中指定要捕获的设备的名称。 如果提供空字符串,设备将自动选择默认设备。 可以使用list_devices选项获取支持的设备列表。
18.16.1 选项
channels
设置捕获的音频中的通道数。 目前仅支持值1(单声道)和2(立体声)。 默认为2。
sample_size
设置捕获的音频的样本大小(以位为单位)。 目前仅支持值8和16。 默认为16。
sample_rate
设置捕获的音频的采样率(以Hz为单位)。 默认为44 .1k。
list_devices
如果设置为true,则打印设备列表并退出。 默认为false。
18.16.2 示例
打印OpenAL支持的设备列表并退出:
$ ffmpeg -list_devices true -f openal -i dummy out.ogg
通过PulseAudio从OpenAL设备DR-BT101捕获:
$ 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。
18.17 oss
打开音响系统输入设备。
提供给输入设备的文件名是表示OSS输入设备的设备节点,通常设置为/dev/dsp。
例如,使用ffmpeg从/dev/dsp获取使用命令:
ffmpeg -f oss -i /dev/dsp /tmp/oss.wav
有关OSS的更多信息,请参阅:http://manuals.opensound.com/usersguide/dsp.html
18.17.1 选项
sample_rate
以Hz为单位设置采样率。 默认值为48000。
channels
设置通道数。 默认值为2。
18.18 pulse
PulseAudio输入设备。
要启用此输出设备,需要使用--enable-libpulse配置FFmpeg。
提供给输入设备的文件名是源设备或字符串default
要列出PulseAudio源设备及其属性,可以调用命令pactl list sources。
有关PulseAudio的更多信息,请访问http://www.pulseaudio.org。
18.18.1 选项
server
连接到由IP地址指定的特定PulseAudio服务器。 未提供时使用默认服务器。
name
指定PulseAudio在显示活动客户端时将使用的应用程序名称,默认情况下它是LIBAVFORMAT_IDENT字符串。
stream_name
指定PulseAudio在显示活动流时将使用的流名称,默认情况下为record。
sample_rate
以Hz为单位指定采样率,默认使用48kHz。
channels
指定正在使用的通道,默认设置为2(立体声)。
frame_size
指定每帧的字节数,默认设置为1024。
fragment_size
在PulseAudio中指定最小缓冲片段,它将影响音频延迟。 默认情况下,它是未设置的。
wallclock
使用当前时间设置初始PTS。 默认值为1。
18.18.2 示例
从默认设备录制流:
ffmpeg -f pulse -i default /tmp/pulse.wav
18.19 sndio
sndio输入设备。
要在配置期间启用此输入设备,您需要在系统上安装libsndio。
提供给输入设备的文件名是表示sndio输入设备的设备节点,通常设置为``。
例如,使用ffmpeg从/dev/audio0获取使用命令:
ffmpeg -f sndio -i /dev/audio0 /tmp/oss.wav
18.19.1 选项
sample_rate
以Hz为单位设置采样率。 默认值为48000。
channels
设置通道数。 默认值为2。
18.20 video4linux2, v4l2
Video4Linux2输入视频设备。
v4l2可用作video4linux2的别名。
如果FFmpeg是使用v4l-utils支持构建的(通过使用--enable-libv4l2配置选项),则可以将它与-use_libv4l2输入设备选项一起使用。
要抓取的设备的名称是文件设备节点,通常Linux系统倾向于在将设备(例如USB网络摄像头)插入系统时自动创建此类节点,并且具有/dev/videoN类型的名称,其中N是与设备关联的数字。
Video4Linux2设备通常支持一组有限的widthxheight大小和帧速率。可以使用-list_formats all为Video4Linux2设备检查支持的内容。某些设备(如电视卡)支持一种或多种标准。可以使用-list_standards all列出所有支持的标准。
时间戳的时基是1微秒。根据内核版本和配置,时间戳可以从实时时钟(Unix Epoch的原点)或单调时钟(通常在启动时来源,不受NTP影响或手动更改时钟)导出。 -timestamps abs或-ts abs选项可用于强制转换为实时时钟。
使用ffmpeg和ffplay的video4linux2设备的一些用法示例:
列出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/。
18.20.1 选项
standard
设定标准。 必须是受支持标准的名称。 要获取支持的标准列表,请使用list_standards选项。
channel
设置输入通道编号。 默认为-1,表示使用先前选择的通道。
video_size
设置视频帧大小。 参数必须是WIDTHxHEIGHT形式的字符串或有效大小的缩写。
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。
18.21 vfwcap
VfW(Video for Windows)捕获输入设备。
作为输入传递的文件名是捕获驱动程序编号,范围从0到9。可以使用list作为文件名来打印驱动程序列表。 任何其他文件名将被解释为设备号0。
18.21.1 选项
video_size
设置视频帧大小。
framerate
设置抓取帧率。 默认值为ntsc,对应帧速率30000/1001。
18.22 x11grab
X11视频输入设备。
要在配置期间启用此输入设备,您需要在系统上安装libxcb。 它将在配置期间自动检测到。
该设备允许捕获X11显示器的区域。
作为输入传递的文件名具有以下语法:
[hostname]:display_number.screen_number[+x_offset,y_offset]
hostname:display_number.screen_number指定要从中获取的屏幕的X11显示名称。 hostname可以省略,默认为localhost。 环境变量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
18.22.1 选项
draw_mouse
指定是否绘制鼠标指针。值0指定不绘制指针。默认值为1。
follow_mouse
抓住区域跟随鼠标。该参数可以居中或像素像素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.mpgframerate
设置抓取帧率。默认值为ntsc,对应帧速率30000/1001。
show_region
在屏幕上显示抓取的区域。
如果show_region指定为1,则将在屏幕上指示抓取区域。使用此选项,如果仅抓取屏幕的一部分,则很容易知道抓取的内容。
region_border
如果show_region指定为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 -show_region 1 -framerate 25 -video_size cif -i :0.0+10,20 out.mpgvideo_size
设置视频帧大小。默认值为vga。
grab_xgrab_y
设置抓取区域坐标。它们表示为偏离X11窗口左上角的偏移量,对应于设备名称中的x_offset和y_offset参数。两个选项的默认值均为0。
