基本上,我通过使用
AVMutableVideoCompositionLayerInstruction
实现了所需的内容,然后使用AVAssetExportSession
创建带音频的结果视频。 但是,问题在于,在这样做之后,文件大小会大幅增加,例如,纠正原始文件的4.1MB会导致最终文件大小达到18.5MB!我只是将视频旋转180度!!顺便说一句,我尝试处理的视频实例最初是由UIImagePicker在使用videoQuality = UIImagePickerControllerQualityType640x480
进行“压缩”期间创建的,其实际上在iPad mini上产生了568 x 320的视频。我尝试了
AVAssetExportSession
上的各种presetName
设置,但无法获得所需的结果。就文件大小而言,我最接近的是使用AVAssetExportPresetMediumQuality
,大小为4.1MB(与源完全相同!),但是这也将结果视频的尺寸从我明确设置的568 x 320减小到480 x 272。这让我想研究其他选项,因此改用
AVAssetWriter
。 问题是,我找到的任何代码都无法工作!我尝试了在此SO帖子(Video Encoding using AVAssetWriter - CRASHES)上找到的代码,但无法让它工作。首先,对于这行代码,我得到编译错误:NSDictionary *videoOptions = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange] forKey:(id)kCVPixelBufferPixelFormatTypeKey];
编译错误如下:
Undefined symbols for architecture armv7: "_kCVPixelBufferPixelFormatTypeKey"
尝试将AVAssetReaderTrackOutput的outputSettings
设置为nil,但仍然有崩溃发生,根据头文件信息,这样做应该是可以的:
值为nil的outputSettings会将输出配置为以指定轨道存储的原始格式出售样本。
然而,在此行发生崩溃:
BOOL result = [videoWriterInput appendSampleBuffer:sampleBuffer];
简而言之,我无法让任何代码与AVAssetWriter
配合使用,因此我真的需要帮助。是否有其他方法可以实现我的期望结果?顺便说一句,我使用的是Xcode 4.6,目标是从iOS5开始的所有平台,使用ARC。