处理视频和写入文件的最佳性能方法 - ios AVFoundation

时间:2016-04-19 04:28:48

标签: ios swift avfoundation avasset

我想在磁盘上阅读视频资产并对其进行大量处理,比如在每个帧上使用CICropFilter并剪掉一个掩码,将一个视频分成几个较小的视频,以及将帧从原始轨道移除到"压缩"它下来,使它更像GIF。

我想出了一些可能的途径:

  1. AVAssetWriterAVAssetReader
  2. 在这种情况下,我会从文件中读取CMSampleBuffer s,执行我想要的操作,然后使用AVAssetWriter写回新文件。

    1. AVMutableComposition
    2. 在这里,给定一个CMTimes列表,我可以轻松剪切帧并重写视频,甚至为我想要创建的每个新视频创建多个合成,然后使用AVAssetExportSession导出所有这些视频。

      我关注的指标:性能和功耗。也就是说,我对能够在执行编辑方面提供最高效率的方法感兴趣,同时也让我可以灵活地按照自己的意愿行事。我想象我所描述的视频编辑类型可以通过这两种方法完成,但实际上我需要最高性能/最佳功能。

1 个答案:

答案 0 :(得分:1)

根据我的经验,AVAssetExportSession比直接格式A - >使用AVAssetReader和AVAssetWriter稍微更高效。格式B类型转换,但是说,它可能不足以过于关注。

根据Apple自己的文档https://developer.apple.com/library/ios/documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/00_Introduction.html#//apple_ref/doc/uid/TP40010188

  

您使用导出会话将现有资产重新编码为格式   由少数常用预设之一定义。如果你需要   更多地控制转换,在iOS 4.1及更高版本中你可以使用   资产阅读器和资产编写器对象串联转换资产   从一个表示到另一个表示。使用这些对象,你可以   例如,选择要在其中表示的曲目   输出文件,指定您自己的输出格式,或修改资产   在转换过程中。

鉴于您的问题的性质,您似乎对AVFoundation框架没有多少经验。我的建议是从AVAssetExportSession开始,然后当你遇到一个障碍时,将深层向下移动到AVAssetReader和AVAssetWriter。

最终,根据您采取的措施,您甚至可能希望编写自己的自定义合成器。