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
。