Tag: avassetexportsession

肖像video播放黑屏

更新 不要使用模拟器来testingvideo翻译 。 但我在这里有另一个问题的编解码器问题。 任何帮助表示赞赏。 我正在使用AVURLAsset来创build我的video,并且只要从画廊中选取的video处于横向模式,它们就能正常工作。 但是,当我使用纵向video时,它会以黑色屏幕(audio播放)播放,或者帧被扭曲(请参阅图像)。 更新:我尝试使用CGAffineTransform仍然没有运气。 代码如下: -(void) createVideo{ AVMutableComposition* mixComposition = [AVMutableComposition composition]; NSDictionary *options = @{AVURLAssetPreferPreciseDurationAndTimingKey:@YES}; _videoAsset = [[AVURLAsset alloc]initWithURL:video_url options:options]; CMTime startTimeV=CMTimeMakeWithSeconds(videoStartTime.floatValue, 1); CMTime endTimeV=CMTimeMakeWithSeconds(videoEndTime.floatValue, 1); CMTimeRange video_timeRange = CMTimeRangeMake(startTimeV,endTimeV); AVMutableCompositionTrack *a_compositionVideoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; [a_compositionVideoTrack insertTimeRange:video_timeRange ofTrack:[[_videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:kCMTimeZero error:nil]; AVMutableVideoCompositionInstruction *mainInstruction = [AVMutableVideoCompositionInstruction videoCompositionInstruction]; mainInstruction.timeRange = […]

使用mediaTypevideo从PHAsset修改元数据失败

我尝试使用mediaType == .video从PHAsset添加/修改元数据我发现一些问题mediaType == .video了类似的问题: 如何使用AVAssetWriter更改video元数据? 使用AVFoundation将自定义元数据添加到video 关于这些问题的答案,我构build了以下代码片段,它是PHAsset的扩展: let options = PHVideoRequestOptions() options.version = .original PHImageManager.default().requestAVAsset(forVideo: self, options: options, resultHandler: { asset, audioMix, info in if asset != nil && asset!.isKind(of: AVURLAsset.self) { let urlAsset = asset as! AVURLAsset let start = CMTimeMakeWithSeconds(0.0, 1) let duration = asset!.duration var exportSession = AVAssetExportSession(asset: asset!, presetName: AVAssetExportPresetPassthrough) […]

在后台工作的AVAssetExportSession

我试图在后台应用程序中pipe理AVAssetExportSession工作。 我有iOS 6设备并在那里testing。 所以即时通讯audio混合,并尝试导出audio。 当应用程序在前台即时通讯使得一切正常,但如果即时通讯到后台即时获取AVAssetExportSessionStatusFailed,并必须从头开始创build它。 那么,是否有可能在后台进行混音工作呢? 我尝试在NSOperationQueue中使[exportSession exportAsynchronouslyWithCompletionHandler:]或获取全局队列 – 但结果是相同的 – 当应用程序在后台运行并发送失败后停止。 有没有人有AVAssetExportSession在后台工作的例子?

Swift Video Resizer AVAsset

我有这个代码,将video的大小从1280 x 720调整到640 x 360,但是我想要resize而不用裁剪。 有没有办法做一个完整的调整不裁剪? 这是代码 class func resizer(inputURL : NSURL , completion: (outPutURL : NSURL?) -> Void ){ let videoAsset = AVAsset(URL: inputURL) as AVAsset let clipVideoTrack = videoAsset.tracksWithMediaType(AVMediaTypeVideo).first! as AVAssetTrack let composition = AVMutableComposition() composition.addMutableTrackWithMediaType(AVMediaTypeVideo, preferredTrackID: CMPersistentTrackID()) let videoComposition = AVMutableVideoComposition() videoComposition.renderSize = CGSizeMake(360,640) videoComposition.frameDuration = CMTimeMake(1, 30) let instruction = AVMutableVideoCompositionInstruction() […]

AVExportSession在后台运行

我正在处理一个需要合并多个video的应用程序。 我正在使用AVExportSession导出合并的video。 我也显示导出video的进度条。 它正常运行正常。 当我们locking屏幕或将应用程序置于后台模式时,就会出现这个问题。 这次如果正在处理导出,则在将应用程序置于后台模式后立即失败。 我也试图使用后台任务。 检查下面的代码。 bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ // Clean up any unfinished task business by marking where you. // stopped or ending the task outright. [[UIApplication sharedApplication] endBackgroundTask:bgTask]; bgTask = UIBackgroundTaskInvalid; }]; 但是这似乎不起作用。 我究竟做错了什么? 任何帮助,将不胜感激。

iOS – 反转video文件(.mov)

要求 : 这听起来像不同,但这是我想要实现的。 我想反向制作电影(.mov)文件。 就像我们如何倒带电影文件。 我也想保持相同的帧速率,因为我的video包含。 注:我不只是想以相反的顺序播放video文件。 我想生成新的电影文件以相反的顺序播放。 我的探索 : 我想到了下面的步骤来执行相同的操作。 使用AVAssetExportSession制作具有特定帧速率的video文件块 使用AVMutableComposition和AVAssetExportSession所有这些video块合并成单个电影文件。 在合并过程中还将每个文件的audio合并到新的video文件中。 使用上述步骤,我能够实现相反的结果video文件,但我有以下关注。 video持续时间长,需要很长时间。 它也消耗巨大的CPU周期和内存来完成这个过程。 有没有人有任何其他优化的方式来实现这一目标? 任何build议将不胜感激。

自定义AVVideoCompositing类不按预期方式工作

我正在尝试将CIFilter应用于AVAsset,然后使用应用的filter进行保存。 我这样做的方式是通过使用videoComposition的AVMutableVideoComposition设置为具有自定义AVVideoCompositing类的AVMutableVideoComposition对象。 我还将AVMutableVideoComposition对象的instructions设置为自定义组合指令类(符合AVMutableVideoCompositionInstruction )。 这个类传递一个跟踪ID,以及一些其他不重要的variables。 不幸的是,我遇到了一个问题 – 我的自定义video合成器类(符合AVVideoCompositing )中的startVideoCompositionRequest:函数未被正确调用。 当我将自定义指令类的passthroughTrackIDvariables设置为轨道ID时, startVideoCompositionRequest(request)函数不会被调用。 然而,当我没有设置我的自定义指令类的passthroughTrackIDvariables, startVideoCompositionRequest(request) 被调用,但不正确 – 打印request.sourceTrackIDs结果为一个空数组, request.sourceFrameByTrackID(trackID)结果为零值。 有趣的是,我发现cancelAllPendingVideoCompositionRequests:函数在尝试使用filter导出video时总是被调用两次。 它可以在startVideoCompositionRequest:之前被调用一次,也可以在startVideoCompositionRequest:未被调用的情况下连续两次。 我创build了三个类,用于filter导出video。 这里是实用程序类,它基本上只包含一个export函数,并调用所有必需的代码 class VideoFilterExport{ let asset: AVAsset init(asset: AVAsset){ self.asset = asset } func export(toURL url: NSURL, callback: (url: NSURL?) -> Void){ guard let track: AVAssetTrack = self.asset.tracksWithMediaType(AVMediaTypeVideo).first else{callback(url: nil); return} let composition = AVMutableComposition() let […]

AVAssetWriter破坏由AVAssetExportSession修剪的video

我正在修剪,然后压缩一个video文件。 为了修剪,我正在使用AVAssetExportSession 对于压缩,我正在使用AVAssetWriter 。 如果我单独使用这两个代码,每件事情都可以正常工作,但是如果我修剪,然后input压缩输出进行压缩,我得到了压缩,但损坏的video。 – (void)viewDidLoad { [super viewDidLoad]; [self trimVideo]; } 修剪代码 -(void)trimVideo { AVAsset *anAsset = [[AVURLAsset alloc]initWithURL:[self.asset valueForProperty:ALAssetPropertyAssetURL] options:nil]; AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:anAsset presetName:AVAssetExportPresetPassthrough]; NSString *fName = [NSString stringWithFormat:@"%@.%@", @"tempVid", @"mp4"]; saveURL = [NSURL fileURLWithPath:[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:fName]]; NSString *fName1 = [NSString stringWithFormat:@"%@.%@", @"tempVid1", @"mp4"]; saveURL1 = [NSURL […]

使用AVFoundation将章节信息添加到现有video

我正在尝试将章节标记(文本+图像)添加到iOS中的现有video。 使用内置函数读取它们非常简单: NSLocale * locale = [chapterLocalications lastObject]; NSLog(@"Locale: %@", [locale localeIdentifier]); NSArray *keys = @[AVMetadataCommonKeyTitle, AVMetadataCommonKeyArtwork]; NSArray *chapters = [asset chapterMetadataGroupsWithTitleLocale:locale containingItemsWithCommonKeys:keys]; for (AVTimedMetadataGroup * metadataGroup in chapters) { NSArray * items = metadataGroup.items; CMTimeRange timeRange = metadataGroup.timeRange; NSLog(@"time: %@", CMTimeCopyDescription(NULL, timeRange.start)); for (AVMetadataItem * metadataItem in items) { NSLog(@"key: %@", metadataItem.commonKey); NSLog(@"value: %@", […]

AVFoundation导出方向错误

我正在尝试将图片和video合并。 我有他们合并和出口,但它是旋转的方式。 抱歉批量代码粘贴。 我已经看到了关于应用一个转换到compositionVideoTrack.preferredTransform但是什么都不做的答案。 添加到AVMutableVideoCompositionInstruction也不会。 我觉得这个领域是事情开始出错的地方。 这儿这儿: // I feel like this loading here is the problem let videoTrack = videoAsset.tracksWithMediaType(AVMediaTypeVideo)[0] // because it makes our parentLayer and videoLayer sizes wrong let videoSize = videoTrack.naturalSize // this is returning 1920×1080, so it is rotating the video print("\(videoSize.width) , \(videoSize.height)") 所以在这里,我们的框架大小是错误的方法的其余部分。 现在,当我们尝试去创build覆盖图像层的框架是不正确的: let aLayer = CALayer() […]