在我的应用中,用户录制视频并将其上传到YouTube视频频道。我注意到,对于4秒的视频,我的应用需要两倍于官方Youtube应用上传视频的时间。我正在使用谷歌的ios rest Framework,所以我认为我的4秒视频和官方YouTube应用程序上传的4秒视频之间的重量有所不同。所以我想减少我的视频文件重量,但同时我想保持1920x1080的分辨率,所以我怎么能这样做? 我必须在每一帧上工作,以获得更低的质量? 我必须降低比特率?
我的实际approch是录制完整质量的视频并将其保存为文档目录中的文件。然后我重新拍摄视频以尝试压缩。
我试过了:
- (void)compressVideo:(NSURL*)inputURL
outputURL:(NSURL*)outputURL2
handler:(void (^)(AVAssetExportSession*))completion {
AVURLAsset *urlAsset = [AVURLAsset URLAssetWithURL:inputURL options:nil];
AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:urlAsset presetName:AVAssetExportPreset1920x1080];
exportSession.outputURL = outputURL2;
exportSession.outputFileType = AVFileTypeQuickTimeMovie;
exportSession.shouldOptimizeForNetworkUse = YES;
[exportSession exportAsynchronouslyWithCompletionHandler:^{
//completion(exportSession);
NSData *prima = [NSData dataWithContentsOfURL:self.outputURL];
NSLog(@"Size of new Video before compression is (bytes):%lu",(unsigned long)[prima length]);
NSData *newDataForUpload = [NSData dataWithContentsOfURL:outputURL2];
NSLog(@"Size of new Video after compression is (bytes):%lu",(unsigned long)[newDataForUpload length]);
[self performSegueWithIdentifier:@"registraToSaved" sender:nil];
}];
}
但是这个代码本身只有在我改变视频大小时才会减轻重量。 我读过这样的解决方案: How can I reduce the file size of a video created with UIImagePickerController? 但它们与AssetWriter一起工作,而在我用来记录视频的库中没有使用这个对象。有一种方法可以在LLSimpleCamera库中使用类似的概念吗?或者也许有办法修改我的compressVideo方法来实现这个结果?
修改
这是我测试上传的方式。我可以直接在我的应用程序中录制视频(使用LLSimpleCamera库),因此:通过我的应用程序录制4秒视频 - >通过我的应用和谷歌休息库上传到youtube。 为了与官方的YouTube应用程序匹配,我已经通过youtube应用程序记录了相同的主题4秒,然后,总是通过YouTube应用程序,我已经上传到我的频道。 可能这两个录制的视频具有不同的确切权重,但差异肯定是最小的。无论如何,我的应用程序上传时间很长,所以我开始认为youtube创建一个较小的文件录制视频1920x1080比我的应用程序录制了44秒