热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

多媒体开发(2):录制

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

上一节小程介绍了用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来录制声音或者视频。录制往往只是某件事情的一个环节,比如:在拿视频测试样本时可以选择自己录制、在直播时需要录制、在截屏时可以用录屏的方式来实现,等等。所以,理解这个环节的一个实现是有价值的。


推荐阅读
  • 在Android的多媒体类中,MediaMuxer和MediaCodec算是比较年轻的,它们是JB4.1和JB4.3才引入的。前者用于将音频和视频进行混合生成多媒体文件。缺点是目前 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Android实现彩信附件的添加与删除功能-本文实例讲述了Android实现彩信附件的添加与删除功能。分享给大家供大家参考,具体如下:添加附件在ComposeMessageActi ... [详细]
  • 删除iPad或iPhone目录privatevarkeychainskeychain-2.db文件,重启iPad或iPhone。1.如何卸载机内自带软件? ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • python3 logging
    python3logginghttps:docs.python.org3.5librarylogging.html,先3.5是因为我当前的python版本是3.5之所 ... [详细]
  • ffmpeg  spydroid jrtplib
    2019独角兽企业重金招聘Python工程师标准手机上采用Spydroid程序。https:github.comfyhertzspydroid-ipcamera先用libcu ... [详细]
  • 本篇文章为大家展示了FFmpeg命令行如何实现视频倍速播放,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收 ... [详细]
  • 《Python数据可视化编程实战》——5.4 在matplotlib中创建动画
    本节书摘来自异步社区《Python数据可视化编程实战》一书中的第5章,第5.4节,作者[爱尔兰]IgorMilovanović,颛青山译& ... [详细]
  • ffmpeg【百度百科】
    FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件)。它提供了录 ... [详细]
author-avatar
min-章_998
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有