减少使用AVAssetExportSession导出的视频的大小 - iOS Swift

时间:2018-05-28 07:10:24

标签: swift avfoundation ios11 avassetexportsession avkit

我目前正以下列方式导出视频:

   let exporter = AVAssetExportSession.init(asset: mixComposition, presetName: AVAssetExportPreset1280x720)
   exporter?.outputURL = outputPath
   exporter?.outputFileType = AVFileType.mp4
   exporter?.shouldOptimizeForNetworkUse = true
   exporter?.videoComposition = mainCompositionInst

15秒的视频消耗大约20MB的数据。与Snapchat的2MB视频相比,这个数字似乎完全不可接受。

我已经降低了出口和捕获会话的质量(1280x720)。

视频是在自定义相机上拍摄的。 <{1}}未使用。

AVAssetExportSession用于默认设置。

有什么办法可以缩小视频的尺寸吗? 非常感谢!

编辑1: 我试图使用这个库:https://cocoapods.org/pods/NextLevelSessionExporter

不幸的是,这会产生尺寸问题并删除我的音频:

UIImagePickerController

enter image description here

2 个答案:

答案 0 :(得分:3)

要减小文件大小,请尝试使用以下属性设置HEVC编解码器(使用cocoa pod NextLevelSessionExporter):

let compressionDict: [String: Any] = [
AVVideoAverageBitRateKey: NSNumber(integerLiteral: 2500000), //lower it if you wish
AVVideoProfileLevelKey: AVVideoProfileLevelH264BaselineAutoLevel as String,
]
exporter.videoOutputConfiguration = [
    AVVideoCodecKey: AVVideoCodecType.h264,
    AVVideoWidthKey: NSNumber(integerLiteral: 1280),
    AVVideoHeightKey: NSNumber(integerLiteral: 720),
    AVVideoScalingModeKey: AVVideoScalingModeResizeAspectFill,
    AVVideoCompressionPropertiesKey: compressionDict
]

您需要升级到macOS High SierraiOS 11才能使用HEVC视频编解码器。

如果由于某种原因无法使用HEVC,请使用比特率较低的常规H.264

AVVideoCodecKey: AVVideoCodecType.h264:

enter image description here

  

另外,请查看此SO post about video bitrate in iOS

答案 1 :(得分:0)

我终于破解了。

使用exportSession.fileLengthLimit = 1048576 * 10 //10 MB

10MB是硬编码号码。根据所需的比特率使用。

  

fileLengthLimit / *表示文件长度,即   会话数不应超过。取决于来源的内容   资产,输出可能会略大于文件   长度限制。如果您要检查输出文件的长度   要求在使用前必须遵守严格的限制   输出。另请参见maxDuration和timeRange。 * /