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

news/2024/7/10 19:42:00 标签: 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系统的一个窗口上显示视频流。


http://www.niftyadmin.cn/n/185310.html

相关文章

SpringBoot自动装配原理和spring.factories

SpringBoot自动装配原理 也就是核心注解 启动类上面的注解是SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:  SpringBootConfiguration:组合了 Configuration 注解,实现配置文…

硬件语言Verilog HDL牛客刷题day03 时序逻辑部分

1.VL21 根据状态转移表实现时序电路 1.题目: 某同步时序电路转换表如下,请使用D触发器和必要的逻辑门实现此同步时序电路,用Verilog语言描述。 2.解题思路 2.1 首先同步时序电路 , 时钟上升沿触发, 复位信号rst 低电…

动力节点王鹤SpringBoot3学习笔记——第二章 掌握SpringBoot基础篇

目录 二、掌控SpringBoot基础篇 2.1 Spring Boot ? 2.1.1 与Spring关系 2.1.2 与SpringCloud关系 2.1.3 最新的Spring Boot3 新特性 2.1.4 如何学好框架 2.2 脚手架 2.2.1 使用脚手架创建项目 2.2.2 IDEA创建SpringBoot项目 2.3 代码结构 2.3.1.1 单一模块 2…

2022财年收入利润双增长,巨子生物开启“长坡厚雪”新周期

在合成生物学高速发展的新时代,越来越多的创新技术和新材料推动着医美行业的不断升级。而重组胶原蛋白作为一种新兴填充原材料,在市场上逐渐崭露头角。 其中,巨子生物,作为重组胶原蛋白领域的领军企业,自上市以来便备…

LeakCanary原理解析

作者:左大侠 LeakCanary,由Square开源的一款轻量第三方内存泄露检测工具。能够在不影响程序正常运行的情况下,动态收集程序存在的内存泄露问题。小的内存泄露可能不会直接导致程序崩溃,但随着数量增多,量变引起质变&am…

Eclipse的使用与快捷键(超详细)

👨‍💻作者简介:练习时长两年半的java博主 📖个人主页:君临๑ 🎞️文章介绍:eclipse的使用以及常用快捷键的介绍 🎁 如果文章对你有用,就点个免费的赞吧👍 文…

使用 React 和 GPT-4 技术构建智能语言翻译应用

Midjourney 创作,Language Translation in future在今天的互联世界中,语言翻译在弥合沟通差距和促进全球合作方面发挥着至关重要的作用。随着像 OpenAI 的 GPT-4 这样先进的 AI 模型的出现,我们现在有机会创建高度精确和上下文感知的翻译工具…

阿维塔城区NCA智驾导航辅助,复杂路口,全面胜任

阿维塔11城区NCA智驾导航辅助将于3月在上海、深圳等城市分阶段开启体验,以看得清、判得准、控得稳的“智驾”,进一步巩固业界智能天花板的地位。智能驾驶里程碑,拨杆两下开启都市安适旅程作为AVATRANS智能领航系统的重要组成部分,…