多媒体开发(2):录制

上一节小程介绍了用ffplay来播放文件(或url),这里有一个概念,如果是播放已经存在的文件,那叫“回放”,也就是Playback(从流媒体的角度也叫点播),如果播放的是正在录制的数据(边录边播),那叫直播。

不管是回放还是直播,都需要有媒体数据,那这个媒体数据是怎么来的呢?从已有的文件编辑而来是一个办法,但更直接更原始的办法是录制。

录制,就是通过硬件设备,把声音或者图像保存到文件(或者推到文件)。

在FFmpeg程序集中,有一个程序叫作ffmpeg(小写),这个程序提供了录制的功能。在上一节小程介绍了ffplay的安装,而实际上ffplay依赖于FFmpeg,所以当ffplay安装后,那FFmpeg程序集也就安装上了,也就是已经可以使用ffmpeg程序。

本文介绍如何通过ffmpeg程序来实现声音、图像以及屏幕的录制。

对于图像,可以通过摄像头或者屏幕来录入,而对于声音则通过麦克风来录入。

因为小程使用的是mac电脑,所以,有必要先查看一下mac电脑有没有录制的设备,也就是输入设备。

因为查看输入设备需要指定输入设备的格式类型,所以,先查看输入设备的格式类型

ffmpeg -devices

在小程的电脑上,有这样的输出:

D avfoundation AVFoundation input device
D lavfi Libavfilter virtual input device
D qtkit QTKit input device

第一个类型,即avfoundation,为本机输入设备的格式类型,有了这个类型,就可以进一步查看输入设备了:

ffmpeg -list_devices true -f avfoundation -i ""

可以看到这样的信息:

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

从上面的信息可以知道,视频输入(video devices)有两个设备,设备0为摄像头,设备1为屏幕,而声音输入(audio devices)则只有设备0,也就是麦克风。

在知道设备号之后,就可以启用这个设备来录制,比如只打开摄像头进行录制(按‘q‘结束录制):

ffmpeg -f avfoundation -framerate 30 -i "0" -s 320x240 cam.mp4

framerate是录制帧率,也就是一秒取多少帧,这些概念以后小程再详细介绍。-i "0"就是0号设备即摄像头,-s指定分辨率,比如可以设置一个在手机上较佳的使用分辨率。最后面的文件名,表示保存数据的文件。

但需要注意,参数并非可以随意改动的,因为参数的值跟输入设备有关,比如小程的mac只支持帧率30,而且分辨率也只有几个可以选择,所以,参数不能乱写。如果出错了,那应该根据出错信息作出修正。而且,参数的顺序也不能乱写,否则是可能出错的!

另外,不同的ffmpeg的版本,对参数的要求也不一样,比如ffmpeg3.x需要指定framerate跟分辨率,而ffmpeg2.x则不需要,但出错后都有相应的信息提醒,读者可以按指引来修正。

如果想同时录制到声音,那就同时打开摄像头跟麦克风,进行录制:

ffmpeg -f avfoundation -framerate 30 -i "0:0" -s 320x240 cam2.mp4

0:0,前面为图像设备,后面为声音设备。

如果只录制声音,则:

ffmpeg -f avfoundation -i ":0" sound.aac
或者:
ffmpeg -f avfoundation -i ":0" -acodec libmp3lame sound2.mp3

aac是音频的一种编码格式,小程用的FFmpeg3.1.2会编码成aac格式(FFmpeg3.x内置aac编码),当然也可以指定编码成mp3,但要借助libmp3lame这个组件。读者可以先忽略这些编码细节,只需要知道有这样一个功能就好。

小程在这里给出一个只用摄像头录制的效果,那是小程家里的灯,通过mac电脑录制到的视频:

如果只想录制屏幕,那只需要把-i "0"换成-i "1",也就是指定从屏幕录制。



总结一下,本文介绍了怎么通过ffmpeg来录制声音或者视频。录制往往只是某件事情的一个环节,比如:在拿视频测试样本时可以选择自己录制、在直播时需要录制、在截屏时可以用录屏的方式来实现,等等。所以,理解这个环节的一个实现是有价值的。

原文地址:https://www.cnblogs.com/freeself/p/10482594.html

时间: 2024-08-05 09:26:56

多媒体开发(2):录制的相关文章

Android多媒体开发介绍(转)

Android多媒体开发介绍 转自:http://blog.csdn.net/reiliu/article/details/9060557 一.       多媒体架构 基于第三方PacketVideo公司的OpenCORE来实现,支持所有通用的音频/视频/静态图像格式,包括:MPEG4.H.264.MP3.AAC.AMR.JPG.PNG.GIF等.从功能上分为两部分,一是音/视频的回放(PlayBack),二是音视频的纪录(Recorder). CODEC(编解码器)使用OpenMAX 1L

多媒体开发之---h264格式详解

http://blog.csdn.net/bluebirdssh/article/details/6533501 http://blog.csdn.net/d_l_u_f/article/details/7260772 http://blog.csdn.net/sunnylgz/article/details/7680262 http://blog.csdn.net/heanyu/article/details/6204414 多媒体开发之---h264格式详解,布布扣,bubuko.com

多媒体开发库 之 SDL 详解

SDL 简介 SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成.SDL提供了数种控制图像.声音.输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux.Windows.Mac OS X等)的应用软件.目前SDL多用于开发游戏.模拟器.媒体播放器等多媒体应用领域. SDL提供的功能 1. 视频 设置8bpp或更高的任意色彩深度的视频模式.如果某个模式硬件不支持,可以选择转化为另一模式. 直接写入线性的图像帧缓冲

Windows Phone - 多媒体开发

这里有一些比较好的wp源码下载:http://code.662p.com/list/14_1.html 前言在上篇文章讲述了如何新建一个Silverlight for Windows Phone的应用程序,这篇文章讲述如何在WindowsPhone上进行多媒体应用的开发.同时介绍当前Windows Phone Beta版本所支持媒体文件格式,以及讲述WindowsPhone多媒体开发的一些限制性和注意点.MediaElement控件的使用使用Silverlight开发一般的多媒体应用,使用Med

史上最全的iOS多媒体开发博客

这篇博客是史上最全的iOS多媒体开发博客,包括视频.音频.图片等多套API,如果要实现多媒体的功能,点进去找找有用的东西吧:http://www.cnblogs.com/kenshincui/p/4186022.html#autoid-0-0-0..

Android多媒体开发-stagefright及AwesomePlayer相关知识梳理

android的多媒体框架中, stagefright其实是AwesomePlayer的代理,就是个皮包公司. status_t StagefrightPlayer::setDataSource( const char *url, const KeyedVector<String8, String8> *headers) { return mPlayer->setDataSource(url, headers); } status_t StagefrightPlayer::prepare

用 GStreamer 简化 Linux 多媒体开发

一.基本概念 GStreamer 作为 GNOME 桌面环境推荐的流媒体应用框架,采用了基于插件(plugin)和管道(pipeline)的体系结构,框架中的所有的功能模块都被实现成可以插拔的组件(component), 并且在需要的时候能够很方便地安装到任意一个管道上,由于所有插件都通过管道机制进行统一的数据交换,因此很容易利用已有的各种插件"组装"出一个功能完善的多媒体应用程序. 1.1 元件处理 对于需要应用 GStreamer 框架的程序员来讲,GstElement 是一个必须

GStreamer 简化 Linux 多媒体开发

Streamer 是 GNOME 桌面环境下用来构建流媒体应用的开源多媒体框架(framework),其目标是要简化音/视频应用程序的开发,目前已经能够被用来处理像 MP3.Ogg.MPEG1.MPEG2.AVI.Quicktime 等多种格式的多媒体数据. 1简介编辑 GStreamer是一个开源的多媒体框架库.利用它,可以构建一系列的媒体处理模块,包括从简单的ogg播放功能到复杂的音频(混音)和视频(非线性编辑)的处理. 应用程序可以透明的利用解码和过滤技术.开发者可以使用简洁通用的接口来编

Android多媒体开发-- OpenMax IL简介

1.openmax 简介 http://www.khronos.org/openmax/ OpenMax是一个多媒体应用程序的框架标准,由NVIDIA公司和Khronos在2006年推出. OpenMAX分为3层: 第一层:OpenMax DL(Development Layer,开发层) 第二层:OpenMax IL(Integration Layer,集成层) 第三层:OpenMax AL(Appliction Layer,应用层) 2.OpenMax IL简介 OpenMax IL 处在中