我想在视频上显示叠加显示并导出包含此显示的视频。我查看了AVFoundation Framework,AVCompositions,AVAssets等,但我仍然没有想法实现这一点。有一个名为AVSynchronizedLayer的类,它可以让动画与视频同步动画,但我不想动画,我只想将时间显示叠加到视频的每一帧中。有什么建议?iOS AVFoundation - 通过视频显示时间显示并导出
问候
我想在视频上显示叠加显示并导出包含此显示的视频。我查看了AVFoundation Framework,AVCompositions,AVAssets等,但我仍然没有想法实现这一点。有一个名为AVSynchronizedLayer的类,它可以让动画与视频同步动画,但我不想动画,我只想将时间显示叠加到视频的每一帧中。有什么建议?iOS AVFoundation - 通过视频显示时间显示并导出
问候
事情是这样的......
(注:从一个更大的项目剔除,所以我可能已包括事故发生一些不必要的作品)。
您需要抓住时钟/动画的CALayer,并将其设置为var myClockLayer(由动画工具使用的1/3)。
这也假定您的传入视频只有两个音轨 - 音频和视频。如果你有更多,你需要更仔细地设置“asTrackID:2”的轨道ID。
AVURLAsset* url = [AVURLAsset URLAssetWithURL:incomingVideo options:nil];
AVMutableComposition *videoComposition = [AVMutableComposition composition];
AVMutableCompositionTrack *compositionVideoTrack = [videoComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
AVAssetTrack *clipVideoTrack = [[url tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];
[compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, [url duration]) ofTrack:clipVideoTrack atTime:kCMTimeZero error:&error];
AVMutableVideoComposition* videoComposition = [[AVMutableVideoComposition videoComposition]retain];
videoComposition.renderSize = CGSizeMake(320, 240);
videoComposition.frameDuration = CMTimeMake(1, 30);
videoComposition.animationTool = [AVVideoCompositionCoreAnimationTool videoCompositionCoreAnimationToolWithAdditionalLayer:myClockLayer asTrackID:2];
AVMutableVideoCompositionInstruction *instruction = [AVMutableVideoCompositionInstruction videoCompositionInstruction];
instruction.timeRange = CMTimeRangeMake(kCMTimeZero, CMTimeMakeWithSeconds(60, 30));
AVMutableVideoCompositionLayerInstruction* layerInstruction = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:clipVideoTrack];
instruction.layerInstructions = [NSArray arrayWithObject:layerInstruction];
videoComposition.instructions = [NSArray arrayWithObject: instruction];
exporter = [[AVAssetExportSession alloc] initWithAsset:saveComposition presetName:AVAssetExportPresetHighestQuality] ;
exporter.videoComposition = videoComposition;
exporter.outputURL=url3;
exporter.outputFileType=AVFileTypeQuickTimeMovie;
[exporter exportAsynchronouslyWithCompletionHandler:^(void){}];
我认为你可以使用AVCaptureVideoDataOutput,处理每个帧,并使用AVAssetWriter记录处理frame.You可以参考此答案
使用AVAssetWriterPixelBufferAdaptor的appendPixelBuffer:withPresentationTime:方法导出
我强烈建议使用OpenCV的处理框架。这是一个很好的教程
OpenCV库非常棒。
我想要做同样的事情。你做到了吗?你能帮我,我怎么能更新“myClockLayer”根据亚当的答案。 – Nikunj 2013-02-25 06:38:54
你有什么关于这个? – 2013-11-01 06:33:38