在使用 FFmpeg 作为编码器时,可以使用FFmpeg采集本地的音视频采集设备的数据,然后进行编码、封装、传输等操作。

例如,我们可以采集摄像头的图像作为视频,采集麦克风的数据作为音频,然后对采集的音视频数据进行编码,最后将编码后的数据封装成多媒体文件或者作为音视频流发送到服务器上(流媒体)。

出于硬件环境和篇幅的限制,本文主要讲的时Mac平台下通过FFmpeg采集的方法和步骤。通常Mac上采集数据主要使用的是avfoundation进行采集。

一、Mac 下查看设备列表

FFmpeg可以直接从Mac系统的采集设备中采集摄像头、桌面、麦克风等。在采集设备之前,我们需要知道当前系统都支持哪些设备。

在终端上输入以下命令行,即可查看当前系统支持的设备基本信息:

ffmpeg -devices

输出如下:

Devices:
D. = Demuxing supported
.E = Muxing supported
--
D avfoundation AVFoundation input device
D lavfi Libavfilter virtual input device

从输出内容中可以看到,通过ffmpeg -devices查看的信息分为两大部分:

  • 解封装或封装的支持情况
  • 设备列表

系统当前可以支持的设备具体如下:

  • 输出设备:avfoundation、lavfi

本文重点介绍设备avfoundation。下面我们先看一下avfoundation的参数。

在终端上输入命令行,可以查看avfoundation的参数:

ffmpeg -h demuxer=avfoundation

输出如下:

Demuxer avfoundation [AVFoundation input device]:
AVFoundation input device AVOptions:
-list_devices <int> .D...... list available devices (from to ) (default false)
true .D......
false .D......
-video_device_index <int> .D...... select video device by index for devices with same name (starts at ) (from - to INT_MAX) (default -)
-audio_device_index <int> .D...... select audio device by index for devices with same name (starts at ) (from - to INT_MAX) (default -)
-pixel_format <pix_fmt> .D...... set pixel format (default yuv420p)
-framerate <video_rate> .D...... set frame rate (default "ntsc")
-video_size <image_size> .D...... set video size
-capture_cursor <int> .D...... capture the screen cursor (from to ) (default )
-capture_mouse_clicks <int> .D...... capture the screen mouse clicks (from to ) (default )

FFmpeg对avfoundation设备操作可以使用的参数已经列举在上面了,主要涉及枚举设备、音视频设备编号、像素格式、帧率、图像分辨率等,接下来,我们来讲解一下这些参数使用的例子。

二、Mac 下查看采集设备列表

在使用avfoundation操作设备采集之前,需要枚举avfoundation支持的输入设备,可以通过以下命令行来进行查看:

ffmpeg -f avfoundation -list_devices true -i "" 

执行命令后,输入如下:

[AVFoundation input device @ 0x7feb49c04040] AVFoundation video devices:
[AVFoundation input device @ 0x7feb49c04040] [] FaceTime HD Camera
[AVFoundation input device @ 0x7feb49c04040] [] Capture screen
[AVFoundation input device @ 0x7feb49c04040] AVFoundation audio devices:
[AVFoundation input device @ 0x7feb49c04040] [] Built-in Microphone

从输出的信息可以看到,当前系统包含了三个设备,分别是:

视频输入设备:

  • [0] FaceTime HD Camera
  • [1] Capture screen 0

音频输入设备:

  • [0] Built-in Microphone

三、Mac 下采集设备

1、采集内置摄像头

执行以下命令可以直接获得摄像头并将摄像头内容录制下来或者直播推出去,以下命令就是采集命令行:

ffmpeg -f avfoundation -s 1280x720 -r  -i  out.mp4

执行命令后,会生成out.mp4视频文件,播放out.mp4就能看到FFmpeg从电脑摄像头采集到的图像:

ffplay out.mp4 

2、采集Mac桌面

执行以下命令,就可以采集到桌面图像:

ffmpeg -f avfoundation -i  -r  out.yuv

命令执行后,就会录制桌面的画面为out.yuv,然后我们播放以下,就可以看到录制的效果了。

如果需要录制下来鼠标,则可以修改命令,增加capture_cursor来指定:

ffmpeg -f avfoundation -capture_cursor  -i  -r  out.yuv

播放的时候可以使用以下类型的命令行,来检测之前的录制是否成功:

ffplay -s 3360x2100 -pix_fmt uyvy422 out.yuv 

其中,-s的参数,需要根据自己的电脑的状态来调整。-pix_fmt的参数,根据录制时的格式输出来调整。

3、采集麦克风

我们使用ffmpeg除了可以获得头像之外,还可以获得音频数据,命令如下:

ffmpeg -f avfoundation -i : out.wav

如果需要同时录制音视频,那么可以使用如下命令行:

ffmpeg -f avfoundation -video_device_index  -r  -s 1280x720  -i : out.mp4

注意:采集摄像头或者桌面,只需要改一下index的值就可以。

FFmpeg命令行工具学习(四):FFmpeg 采集设备的更多相关文章

  1. FFmpeg命令行工具学习(一):查看媒体文件头信息工具ffprobe

    一.简述 ffprobe是ffmpeg命令行工具中相对简单的,此命令是用来查看媒体文件格式的工具. 二.命令格式 在命令行中输入如下格式的命令: ffprobe [文件名] 三.使用ffprobe查看 ...

  2. FFmpeg命令行工具学习(三):媒体文件转换工具ffmpeg

    一.简述 ffmpeg是一个非常强大的工具,它可以转换任何格式的媒体文件,并且还可以用自己的AudioFilter以及VideoFilter进行处理和编辑.有了它,我们就可以对媒体文件做很多我们想做的 ...

  3. FFmpeg命令行工具学习(二):播放媒体文件的工具ffplay

    一.简述 ffplay是以FFmpeg框架为基础,外加渲染音视频的库libSDL构建的媒体文件播放器. 在使用ffplay之前必须要安装到系统中,MAC的安装教程为:http://www.cnblog ...

  4. FFmpeg命令行工具学习(五):FFmpeg 调整音视频播放速度

    FFmpeg对音频.视频播放速度的调整的原理不一样.下面简单的说一下各自的原理及实现方式: 一.调整视频速率 调整视频速率的原理为:修改视频的pts,dts 实现: ffmpeg -i input.m ...

  5. FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑

    FFmpeg_Tutorial FFmpeg工具和sdk库的使用demo 一.使用FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑 1.基本介绍 对于每一个从事音视频技术开发的工程师,想必没 ...

  6. FFMPEG 命令行工具-ffprobe

    ffprobe 简介 ffprobe 是一个多媒体流分析工具.它从多媒体流中收集信息,并且以人类和机器可读的形式打印出来. 它可以用来检测多媒体流的容器类型,以及每一个多媒体流的格式和类型.它可以作为 ...

  7. FFMPEG 命令行工具- ffmpeg

    ffmpeg 简介 ffmpeg 用于转码的应用程序,命令格式: ffmpeg [options] [[infile options] -i infile]... {[outfile options] ...

  8. FFMPEG 命令行工具- ffplay

    ffplay 简介 ffplay是ffmpeg工程中提供的播放器,功能相当的强大,凡是ffmpeg支持的视音频格式它基本上都支持.甚至连VLC不支持的一些流媒体都可以播放,但是它的缺点是其不是图形化界 ...

  9. Android命令行工具学习总结

    15.setting命令 setting命令可以很方便的更改系统设置中的参数(如修改系统默认输入法) 安卓Settings模块浅析:https://www.jianshu.com/p/ed8508fe ...

随机推荐

  1. servlet3异步原理与实践

    一.什么是Servlet servlet 是基于 Java 的 Web 组件,由容器进行管理,来生成动态内容.像其他基于 Java 的组件技术一样,servlet 也是基于平台无关的 Java 类格式 ...

  2. Vue中 $ref 的用法

    说明:vm.$refs 一个对象,持有已注册过 ref 的所有子组件(或HTML元素)使用:在 HTML元素 中,添加ref属性,然后在JS中通过vm.$refs.属性来获取注意:如果获取的是一个子组 ...

  3. ASP.NET Core使用NLog记录日志到Microsoft Sql Server

    在之前的文章中介绍了如何在ASP.NET Core使用NLog,本文为您介绍在ASP.NET Core使用NLog记录到Microsoft Sql Server 1.我们需要添加依赖: NLog.We ...

  4. How to Reset VW Steering Assist 1S1909144P with OBDSTAR X300 DP

    Vehicle model:VW Polo 2015 (or other Audi, Seat, Skoda, VW with unit 1S1 909 144 P) Module:Control u ...

  5. Winform 利用 Oracle.ManagedDataAccess访问Oracle数据库

    Winform 利用 Oracle.ManagedDataAccess访问Oracle数据库时出现以下错误: Message = "每个配置文件中只允许存在一个 <configSect ...

  6. Linux开发黑客

    参考网站:http://blog.chinaunix.net/uid/20543672/abstract/1.html tekkamanninja

  7. Game Theory

    HDU 5795 || 3032 把x个石子的堆分成非空两(i, j)或三堆(i, j, k)的操作->(sg[i] ^ sg[j])或(sg[i] ^ sg[j] ^ sg[k])是x的后继 ...

  8. python实现简单动画——生命游戏

    生命游戏 生命游戏的宇宙是一个无限的,其中细胞的二维正交网格,每个细胞处于两种可能的状态之一,即*活着*或*死亡*(分别是*人口稠密*和*无人居住*).每个细胞与它的八个邻居相互作用,这八个邻居是水平 ...

  9. FeatureTools

    featuretools一种自动特征工程的工具.可快速生成较多类型的特征,取得不错的效果. 1.输入:把原始数据转换成featuretools的输入 2. 可以适当调整特征个数,防止训练的模型过拟合 ...

  10. JavaScript-BOM与DOM

    BOM与DOM BOM: Browser Object Model(浏览器对象模型),即把 浏览器 当做一个对象来看待.BOM 除了可以访问文档中的组件之外,还可以访问 浏览器组件,比如页面中的 na ...