iOS视频裁剪小工具——VideoTailor

最近在写swift,顺便写个小工具练练手。VideoTailor是对AVFoundation框架的封装,可以方便的裁剪视频区域以及时长,并允许指定输出视频的码率等参数。

0x00 如何使用

VideoTailor使用很简单,只暴露了export()方法对应的几个重载方法。使用时必须指定AVAsset视频对象,以及文件输出路径。
如果只想裁剪视频时长,可以调用export(_ asset: AVAsset, _ timeRange: CMTimeRange, _ outputUrl: URL)方法,参数timeRange表示需要裁剪的时间区间。
如果想裁剪一块视频区域,并指定视频输出分辨率,可以调用export(_ asset: AVAsset, _ rect: CGRect, _ outputSize: CGSize, _ outputUrl: URL)方法。参数rect是相对原始视频的裁剪区域,是归一化的比例值, 参数outputSize是输出视频的分辨率。 关于这两个参数,可以根据下图理解:

iOS视频裁剪小工具——VideoTailor_第1张图片
Paste_Image.png

0x01 内部实现

内部调用了iOS原生框架AVFoundation实现,AVAssetReader读取原始视频数据,应用AVMutableVideoComposition实现对视频的裁剪(实际只是位置等变换),最后输出到AVAssetWriter。
其实AVFoundation框架中还有一个AVExportSession可以实现视频输出,但这里不用它是因为AVAssetWriter可以实现更细颗粒度的设定,例如指定输出视频的分辨率,码率等参数。
这里视频的输出是pull-style的,顾名思义AVAssetWriterInput通过requestMediaDataWhenReady方法不断向AVAssetReaderOutput读取数据直到视频写入完成。
关键调用过程代码原理如图:


iOS视频裁剪小工具——VideoTailor_第2张图片
Paste_Image.png

比较复杂的部分是视频的裁剪变换,这部分实现的做的还不够简洁,但是暂时还没有想到简单的实现,具体代码还是直接上链接吧。

项目地址:https://github.com/WorthyZhang/VideoTailor

你可能感兴趣的:(iOS视频裁剪小工具——VideoTailor)