短视频编辑中的AVFoundation框架(二)素材添加与处理-小专栏

短视频编辑的素材通常来自相册或者拍摄,苹果的PhotosKit提供了管理相册资源的接口,而AVFoundation中的Capture模块则负责相机拍摄的部分。

我们首先通过实现一个简单的拍照和录制视频(不支持暂停继续)的功能来认识拍摄模块的使用方式,需要使用的核心类如下:

上图是包含了最基础的照片拍摄和视频录制写入URLPath基本功能的流程。但是使用AVCaptureMovieFileOutput作为输出不能控制录制的暂停和继续。

要控制录制写入过程并实现分段录制,我们需要引入AVFoundaton中Assets模块的另一个类AVAssetWriter与AVCaptureVideoDataOutput和AVCaptureAudioDataOutput配合使用。

注意:

下面是读取一个视频轨道数据的示例:

AVAssetWriter使用示例:

NSURL*outputURL=...;//通过一个空文件的ur来创建写入器AVAssetWriter*assetWriter=[[AVAssetWriteralloc]initWithURL:outputURLfileType:AVFileTypeQuickTimeMovieerror:nil];//配置outsettingsNSDictionary*writerOutputSettings=AVVideoCodecKey:AVVideoCodecH264,AVVideoWidthKey:,AVVideoHeightKey:,AVVideoCompressionPropertiesKey:AVVideoMaxKeyFrameIntervalKey:,AVVideoAverageBitRateKey:,AVVideoProfileLevelKey:AVVideoProfileLevelH264Main31}};//使用视频格式文件作为输入AVAssetWriterInput*writerInput=[[AVAssetWriterInputalloc]initWithMediaType:AVMediaTypeVideooutputSettings:writerOutputSettings];[assetWriteraddInput:writerInput];//开始写入[assetWriterstartWriting];AVAssetWriter可用于实时操作和离线操作两种情况,对于每个场景有不同的方法将样本buffer添加到写入对象的输入中:

实时:处理实时资源时,例如从AVCaptureVideoDataOutput写入录制的样本时,AVAssetWriterInput应该设置expectsMediaDataInRealTime属性为YES来确保isReadyForMoreMediaData值被正确设置,不过在写入开始后,无法再修改此属性。

离线:当从离线资源读取媒体资源时,比如从AVAssetReader读取样本buffer,在附加样本前仍然需要观察写入的readyForMoreMediaData属性的状态,不过可以使用requestMediaDataWhenReadyOnQueue:usingBlock:方法控制数据的提供。传到这个方法中的代码会随写入器输入准备附加更多的样本而不断被调用,添加样本时开发者需要检索数据并从资源中找到下一个样本进行添加。

AVAssetReaderOutput和AVAssetWriterInput都可以配置outputSettings,outputSettings正是控制解、编码视频的核心。

AVVideoSettings

读取时,outputSetting传入nil,得到的将是未解码的数据。

AVAssetReader可以看做解码器,与AVAssetReaderOutput配套使用,决定以什么样的配置解码成buffer数据;AVAssetWriter可以看做编码器,与AVAssetWriterInput配套使用,决定将数据以什么配置编码成视频,CMSampleBuffer为编码的数据,视频经AVAssetReader后输出CMSampleBuffer,经AVAssetWriter可以重新将CMSampleBuffer编码成视频。

下面是AVAssetReader和AVAssetWriter成对使用用作视频转码示例:

下面是通过AVAssetWiter将AVCaptureVideoDataOutput的代理方法中的CMSampleBuffer写入文件的核心代码。

-(void)captureOutput:(AVCaptureOutput*)captureOutputdidOutputSampleBuffer:(CMSampleBufferRef)sampleBufferfromConnection:(AVCaptureConnection*)connection{[_writerstartWriting];[_writerstartSessionAtSourceTime:startTime];if(captureOutput==self.videoDataOutput){//视频输入是否准备接受更多的媒体数据if(_videoInput.readyForMoreMediaData==YES){//拼接视频数据[_videoInputappendSampleBuffer:sampleBuffer];}}else{//音频输入是否准备接受更多的媒体数据if(_audioInput.readyForMoreMediaData){//拼接音频数据[_audioInputappendSampleBuffer:sampleBuffer];}}}至此我们可以实现视频录制的暂停与继续,基本上已经介绍了大多数app相机模块实现的主要功能架构,如下:

苹果每年都会对设备的相机功能进行优化或扩展,除了简单的拍照和录像,我们还可以使用Capture模块得到更多数据。

AVFoundation中的人脸检测AVMetadataFaceObject功能在iOS6.0就开始支持,iOS13.0增加了对身体的检测,包含人体AVMetadataHumanBodyObject、猫身体AVMetadataCatBodyObject、狗身体AVMetadataDogBodyObject。他们都继承自AVMetadataObject,除了各自增加了诸如faceID、bodyID这样的属性外,他们的属性主要来自AVMetadataObject,其中bounds是检测到的目标的轮廓,当然,人脸检测补充了沿着z轴旋转的人脸角度rollAngle和是沿着y轴旋转的人脸角度yawAngle。

如果我们想要检测人脸的关键点数据,可以使用Vision框架中的VNDetectFaceRectanglesRequest和ARKit框架中的ARFaceTrackingConfiguration,都可以吊起相机获取人脸关键点的数据。

livephoto是iOS10.0推出的功能,系统相机app中选择“照片”项右上角的live标志控制是否开启拍摄livephoto功能。开启livephoto功能会拍摄下用户点击拍摄按钮前后各0-1.5秒(官网说的是1.5秒)的视频,取中间的一帧作为静态图片和一个3秒内的视频一起保存下来,在相册中长按照片可以播放其中的视频。

使用livephoto拍摄API,需要使用AVCapturePhotoOutput的isLivePhotoCaptureSupported属性判断是否支持该功能,将photoOutput的livePhotoCaptureEnabled属性设为YES,然后创建一个视频保存的路径为photoSettings的livePhotoMovieFileURL属性赋值,其他跟静态照片拍摄一样。

注意livephoto只能运行在AVCaptureSessionPresetPhoto预设模式下,且不能和AVCaptureMovieFileOutput共存。

livephoto的拍摄有自己的两个回调方法:

//已经完成整段视频的录制,还没写入沙盒-(void)captureOutput:(AVCapturePhotoOutput*)captureOutputdidFinishRecordingLivePhotoMovieForEventualFileAtURL:(NSURL*)outputFileURLresolvedSettings:(AVCaptureResolvedPhotoSettings*)resolvedSettings;//视频已经写入沙盒-(void)captureOutput:(AVCapturePhotoOutput*)captureOutputdidFinishProcessingLivePhotoToMovieFileAtURL:(NSURL*)outputFileURLduration:(CMTime)durationphotoDisplayTime:(CMTime)photoDisplayTimeresolvedSettings:(AVCaptureResolvedPhotoSettings*)resolvedSettingserror:(NSError*)error;注意:保存LivePhoto必须和图片使用同一个PHAssetCreationRequest对象,才能将两者关联起来,要展示实况照片,需要使用PHLivePhotoView,它默认添加了长按播放实况照片的手势。

景深是指摄像头拍照时获取到图片中的物体在现实世界的远近数据,苹果在iOS11.0在具有双摄像头的设备中推出了带有景深数据的人像模式,最初后置摄像头的景深数据是使用跳眼法通过两个摄像头的数据根据相似三角形原理计算得来,前置摄像头通过红外线探测,后来苹果引入了LiDAR模组,通过光线探测测距能够得到精确的景深数据,它对AR模块也有很大帮助。

用来描述景深数据的是AVDepthData类,其包含的核心属性如下:

depthDataType:景深数据的数据类型,kCVPixelFormatType_DisparityX表示的是视差数据,kCVPixelFormatType_DepthX表示的是深度数据,可以转换。depthDataMap:景深的数据缓冲区,可以转成UIImageisDepthDataFiltered:是否启动插值depthDataAccuracy:景深数据的准确度注意:通过UIImge创建的imag不会包含景深数据,需要使用photosKit框架读取。

在AVFoundation的Capture模块,景深数据录制分为静态景深录制和实时景深录制。

self.dataOutputSynchronizer=[[AVCaptureDataOutputSynchronizeralloc]initWithDataOutputs.videoOutput,self.depthOutput]];[self.dataOutputSynchronizersetDelegate:selfqueue:self.cameraProcessingQueue];然后我们就可以在代理方法中得到AVCaptureSynchronizedDataCollection实例

在添加了实时景深输出后,相机的架构变成了这样:

AVFoundation的Capture模块为我们提供了自定义相机的拍照、录像、实况照片、景深人像模式、人脸身体检测、机器码识别等等,此外诸如多相机拍摄、图像分割(头发、牙齿、眼镜、皮肤)。。。不再深入介绍。

前面已经介绍了如何使用自定义相机拍摄和保存实况照片,而大多app从相册中直接获取去使用交给UIImage的往往是一张静态图片,要转为视频进行编辑,我们需要使用PhotosKit提供的API。

至此,无论是从相机拍摄还是相册获取,我们都能结合AVFoundation框架得到我们想要的视频文件来作为视频编辑的主素材,可以正式开始我们的编辑了。

上一篇《短视频编辑中的AVFoundation框架(一)框架概述与基础》我们对AVFoundation有了初步的认识,本篇正式开始短视频编辑的第一步:添加和处理素材。

THE END
1.VisionPro爆猛料,16年前就已完成设计Vision Pro爆猛料,16年前就已完成设计极果酷玩 北京 0 打开网易新闻 体验效果更佳堪称世界第一,沈飞造全球最大无人机,就连美俄都造不出来 哈哈社V 172跟贴 打开APP 63岁大妈捡到10w,交给了警察叔叔 浅浅的生活趣事 2跟贴 打开APP 嚣张男子乱停车被砸,还无耻要赔偿,结果被狠人当场教育 开挂的大龙 1031跟贴 ...https://m.163.com/v/video/VPH61KRMM.html
2.视觉中国VCG.COM版权图片插画矢量视频音乐图片视频音频字体 茫崖翡翠湖VCG211427490187 微缩创意春天绿叶室内装修的工人VCG211373330183 杭州龙井采茶VCG211431426250 戴机车墨镜的小猫咪VCG211436521208 三个青年男女在户外滑雪场扔雪花嬉戏玩耍VCG211272676241 意大利的BogliascoVCG41N163739027 鱼群VCG211361630647 ...https://www.vcg.com/
3.PlayList素材网站PlayList视频创作者素材网站。涵盖音乐素材、音效、视频素材、图片素材、AI语音转换,海量正版素材畅选,满足各类个人、商用素材需求。https://www.playlistmusic.com.cn/
4.京东视频素材免费下载京东世界初全工程自动化仓库物流广告宣传片高清最新企业宣传片视频素材,京东方BOE - 智能制造,京东生鲜 x 今锦上大闸蟹情人节专题,京东家电专卖店宣传片《改变》,1. FORONE _ 京东快递MV《如此相信》,京东超市-职场妈妈篇,仟得广告影视制作案例:南京同仁堂六味地黄丸熬制篇https://www.aigei.com/video/idea/jd_com/
5.视频素材,videomaterial英语短句,例句大全视频素材,video material 1)video material视频素材 1.Manufacturing the fine instructional video film needs massive video materials.要想制作精美的教学电视片需要大量视频素材,视频素材采集分为电脑内部采集、外部采集和自己制作视频素材等三大类。 英文短句/例句 1.On collection and application of full - motion ...https://www.xjishu.com/en/003/y19271.html
1.维度视频维度高清原创视频下载新片场汇聚全球原创优质视频及创作人,提供4K、无广告、无水印视频观看,专业的视频艺术学习教程,正版视觉素材交易等,与百万创作人一起成长 关注「新片场」 网站导航 视频素材音乐素材图片素材 关于 关于我们加入我们使用帮助用户协议 活动 金雀奖海浪电影周创作吧少年NEW VISION毕业季更多活动 新片场集团 新片场社区新片场素材...https://www.xinpianchang.com/search/11963
2....LR预设摄影教程平面设计AE模板PR模板FCPX插件Precision-柯达 Vision3 500T 胶片 精密制作的胶片仿真 LUT Crafted Film Emulation LUT (2024) LUTS预设 0 0 621 Juan Melara – Fujifilm X-H2S to Alexa PowerGrade and LUTs 富士X-H2S仿阿莱色彩调色节点+LUT LUTS预设 0 1 672 Tropic Colour 真实CRT视觉美学模拟散景耀斑纹理转场过渡音效视频素材包 ANALOGUE...https://www.cgaep.com/
3.VisionPro使用斑点工具的视频教程码农集市专业分享IT编程学习资源1. 打开 VisionPro,导入视频素材。 2. 在时间线上选择要编辑的视频片段。 3. 点击工具栏中的“斑点工具”图标,或者使用快捷键“Ctrl+B”。 4. 在视频上单击鼠标左键,选择要编辑的斑点。 5. 使用鼠标拖动斑点,调整视频片段的长度。 6. 点击工具栏中的“完成”按钮,或使用快捷键“Ctrl+Enter”完成编辑。 7...https://www.coder100.com/index/index/content/id/2941018
4.新片场素材新片场素材库一站式正版视觉素材平台.Pond5版权素材中国区代理商,授权内容包含正版音乐素材,正版视频素材及正版图片素材等可商用素材和版权素材,为数千家企业提供版权素材解决方案。http://static10.xpccdn.com/
5.手机如何提取网页文字?4、 如果你想找视频素材,可以到iStock、Gettyimages等相关平台,这些平台上都有很多专业的视频素材可以选择。 5、 如果你想要精美而有创意的视频素材,可以到Vimeo、Vevo、DailyMotion等视频分享平台上去找,这些多媒体分享平台上有很多优质的视频素材可供选择。 https://tool.a5.cn/article/show/101726.html
6.CG资源网AE模板PR模板C4D教程FCPX插件视频素材CG资源网内容涵盖AE模板,AE插件,AE教程,PR模板,FCPX插件,C4D插件,C4D教程,3D模型;分享Premiere,Photoshop,Realflow,Houdini,DaVinci Resolve,3Ds Max,Maya,Zbrush,Nuke等软件学习资源;后期VFX特效合成制作,包括实拍视频,背景素材视频,背景音乐素材;CG资源网不断汇聚更多https://www.cgown.com/
7.抖音网址导航介绍:文字动画视频制作神器 11、InShot 网址:http://inshotapp.com/ 介绍:专业照片视频编辑 12、VUEVLOG 网址:https://vuevideo.net/ 介绍:Vlog社区与编辑 13、来画视频 网址:https://www.laihua.com/ 介绍:像做PPT一样做视频 四、视频素材 1、巨量创意 ...https://blog.csdn.net/wsyx768/article/details/112178666
8.视频调色软件达芬奇最新中文版,达芬奇DaVinci18安装教程下载...DaVinci软件是一款专业的视频编辑软件,可以帮助用户将多个视频片段、音频、图片等素材进行剪辑、合成、调整效果等操作,最终制作出高质量的视频作品。 首先,DaVinci软件的界面非常直观,用户可以轻松找到所需的功能,而且界面美观易用,让使用者感觉非常舒适。其次,DaVinci软件提供了丰富的特效、转场、滤镜等工具,让用户可以...https://cloud.tencent.com/developer/article/2243340
9.微软视频素材下载,微软AE模板下载VJ师网提供最新最全的微软视频素材,原创高清微软视频素材模板,版权微软视频素材等实拍正版短视频素材下载服务https://so.vjshi.com/216509.html
10.ae怎么给视频人物瘦身?有何视频瘦身技巧?在Adobe After Effects中给视频人物瘦身,可以使用以下步骤:导入素材:将需要进行瘦身处理的视频素材导入AE...https://www.yutu.cn/question/tiwen_183253.html
11.AppStore上的“素材神器素材神器是一款短视频,UP主必备的素材软件工具大全,视频制作辅助神器,收录了大量的高清无水印视频素材、炫酷视频特效、BGM背景音乐、视频配套文案、各类素材模板,还提供了短视频提取保存、一键提取短视频视频文案、一键提取短视频配音文案、一键保存高清视频、图片、音频、文案、修改短视频Md5、好物混剪、小说推文超级混剪、...https://apps.apple.com/cn/app/id1644312329
12.剪辑之家–专注视频剪辑素材视频素材 0 0 329 加载更多 插件库 全部PR插件AE插件会声会影插件更多 视觉特效插件大合集 RE:VisionFX Effections Plus v17.0 CE Win版本 素材信息 支持 Win 系统: Adobe After Effects CS5 – CC 2018 Adobe Premiere Pro CS5 – CC 2018 RE:Vision Effects 插件目录: DE:Flicker v1.4.11 去闪烁插件 ...http://jianji666.com/