FFmpeg进阶:各种输入输出设备

查看设备列表

我们可以通过ffmpeg自带的工具查看系统支持的设备列表信息, 对应的指令如下所示:

ffmpeg -devices

输入设备介绍

通过配置ffmpeg的输入设备,我们可以访问系统中的某个多媒体设备的数据。下面详细介绍一下各个系统中的常见设备。
1.alsa
ALSA(Advanced Linux Sound Architecture——高级Linux音频架构)是Linux系统中用来采集音频的输入设备。如果需要使用这个设备, 系统需要安装libasound库。

使用ffmpeg采集alsa设备音频的命令如下所示:

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

2.avfoundation
AVFoundation是当前Apple OSX(>=10.7)下建议采用的流采集框架,它在IOS上也是可用的。而老的QTKit框架从OSX10.7开始已经废弃。我们可以通过avfoundation采集音频和视频。对应的命令如下所示:

//从视频设备0和音频设备0采集输出到out.avi
ffmpeg -f avfoundation -i “0:0” out.avi

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

4.dshow
Windows DirectShow 输入设备,DirectShow在ffmpeg中由mingw-w64项目提供支持。当前只有音频和视频设备能够使用。多个单独输入的设备可能被打开,但它们也可能打开相同的输入,这将改善他们之间的同步。常用的命令行示例:

//输出DirectShow支持的设备列表
 ffmpeg -list_devices true -f dshow -i dummy

//打开摄像头
ffmpeg -f dshow -i video=”Camera”

//打开摄像头和麦克风
ffmpeg -f dshow -i video="Camera":audio="Microphone"

//输出选择设备支持的选项列表
ffmpeg -list_options true -f dshow -i video="Camera"

5.fbdev
Linux framebuffer(Linux帧缓冲)输入设备,是一种独立于硬件的图像抽象层,它用于在计算机屏幕上显示图像,通常是在控制台(环境)。它可以通过一个文件设备节点访问,通常为:
/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

6.gdigrab
Win32 GDI屏幕截取设备,这个设备允许你截取显示在Windows(系统)上的屏幕区域。它有两个可选的输入形式:desktop或title=window_title, desktop会截取整个桌面或者桌面的指定区域,第二个可选名(根据窗口标题)会截取单独的窗口,而无论在屏幕上的位置(即使根据某些操作,该窗口已经移除屏幕可见区域,或者被其他窗口覆盖了也可以截取到。

//截取整个桌面
ffmpeg -f gdigrab -framerate 6 -i desktop desktop.mpg

//截取桌面的一部分
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 output.mpg

7.iec61883
使用 iec61883的FireWire(火线)DV/HDV输入设备。要允许这个输入设备,需要libiec61883 ,libraw1394和libavc1394被安装到系统中。此外还要在编译时配置 --enable-libiec61883 以支持。

8.jack
JACK输入设备, 为了能使用JACK设备,需要系统上存在libjack。

9.lavfi
Libavfilter输入虚拟设备, 这个输入设备可以从libavfilter滤镜链图的一个开放输出端口读取数据。对于每个滤镜链图开放输出端口,这个输入设备将创建一个对应的流映射到这个端口进行输出。当前只支持视频数据。

10.libcdio
基于libcdio的音乐CD输入设备。需要系统中有libcdio才能启用,且编译时需要用 --enable-libcdio 配置选项允许。设备允许从音频CD播放和获取。

11.openal
这个OpenAL输入设备支持在所有实现了OpenAL 1.1的系统上进行音频捕获。要编译使用它需要系统包含OpenAL头和libraries库,并且设置编译选项 --enable-openal OpenAL 头和 libraries 库可以是你OpenAL实现的部分,或者作为附件下载(SDK)。根据你的安装方式,你可能需要通过–extra-cflags和–extra-ldflags为编译指定本地的头文件和库文件。

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

13.x11grab
X11视频输入设备使用需要libxcb库,它会在编译时自动检测。另外,配置–enable-x11grab以对应遗留的Xlib用户。这个设备允许捕获X11显示区域。

//ffmpeg捕获(10,20)开始的屏幕尺寸,更详细参数请参照X11文档  
ffmpeg -f x11grab -framerate 25 -video_size cif -i :0.0+10,20 out.mpg

输出设备介绍

1.alsa
ALSA(Advanced Linux Sound Architecture) 音频输出设备

//在默认ALSA设备播放
ffmpeg -i INPUT -f alsa default
//在声卡1的7音频设备播放
ffmpeg -i INPUT -f alsa hw:1,7

2.caca
CACA输出设备,这个输出设备允许在CACA窗口显示视频流。每个程序仅有一个CACA窗口。所以在一个实例中你只能有一个CACA输出。

//强制一个80x25的CACA窗口输出
ffmpeg -i INPUT -vcodec rawvideo -pix_fmt rgb24 -window_size 80x25 -f caca
//列出有效设备并退出
ffmpeg -i INPUT -pix_fmt rgb24 -f caca -list_drivers true

3.decklink
在Blackmagic DeckLink设备输出回放。编译需要Blackmagic DeckLink SDK,以及配置 --extra-cflags和–extra-ldflags以允许。在Windows下,你需要通过widl运行IDL文件。

4.opengl
OpenGL输出设备, 编译允许配置选项–enable-opengl, 这个输出设备允许渲染输出OpenGL内容。内容可以是由程序提供或者默认创建的的SDL窗口。

//用OpenGL渲染播放到SDL窗口
ffmpeg -i INPUT -f opengl "window title"

5.sdl
SDL(Simple DirectMedia Layer)输出设备, 其可以允许在SDL窗口上显示视频流。每个进程仅能创建一个SDL窗口所以你的程序实例只有一个SDL设备输出。编译需要libsdl库。

6.andio
sndio 音频输出设备

7.xv
XV(XVideo)输出设备, 这个X环境设备允许在Xwindow系统的一个窗口上显示视频流。

猜你喜欢

转载自blog.csdn.net/yang1fei2/article/details/129900555