Note that there are some explanatory texts on larger screens.

plurals
  1. POMerge Two Video files in iPhone Application
    primarykey
    data
    text
    <p>In One of my application i need to add some image in video. so i cut break video in two part and also make one video from that image. now i want to combine this three video file and make one video file. but i am not get any idea to combine this three video. i see some code over here. but that is not helpful to me. for break video and for make video from image i used below code now i want code to merge this all video.</p> <p>Any other idea for put current view screen in video file in between.</p> <p><strong>For break video file</strong></p> <pre><code>NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Affagogato" ofType:@"mp4"]]; AVURLAsset *anAsset = [[AVURLAsset alloc] initWithURL:url options:nil]; for(int i = 0; i &lt; 2; i++) { AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:anAsset presetName:AVAssetExportPresetLowQuality]; NSString *filePath = nil; NSUInteger count = 0; do { filePath = NSTemporaryDirectory(); NSString *numberString = count &gt; 0 ? [NSString stringWithFormat:@"-%i", count] : @""; filePath = [filePath stringByAppendingPathComponent:[NSString stringWithFormat:@"Output-%@.mov", numberString]]; count++; } while([[NSFileManager defaultManager] fileExistsAtPath:filePath]); exportSession.outputURL = [NSURL fileURLWithPath:filePath]; exportSession.outputFileType = AVFileTypeQuickTimeMovie; CMTimeRange range; if(i == 0){ CMTime start = CMTimeMakeWithSeconds(0.0, 600); CMTime duration = CMTimeMakeWithSeconds(10.0, 600); range = CMTimeRangeMake(start, duration); }else{ CMTime start = CMTimeMakeWithSeconds(10.0, 600); range = CMTimeRangeMake(start, anAsset.duration); } exportSession.timeRange = range; [exportSession exportAsynchronouslyWithCompletionHandler:^ { dispatch_async(dispatch_get_main_queue(), ^{ [self exportDidFinish:exportSession Tag:i]; }); }]; } </code></pre> <p><strong>Get video from Images</strong></p> <pre><code>CGRect rect=CGRectMake(0, 0, 320, 480); view = [[UIView alloc]initWithFrame:rect]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = ([paths count] &gt; 0) ? [paths objectAtIndex:0] : nil; NSString *path = [documentsDirectory stringByAppendingPathComponent:[@"video2" stringByAppendingString:@".mov"]]; CGSize size = self.view.frame.size; NSMutableDictionary *attributes = [[NSMutableDictionary alloc]init]; [attributes setObject:[NSNumber numberWithUnsignedInt:kCVPixelFormatType_32ARGB] forKey:(NSString*)kCVPixelBufferPixelFormatTypeKey]; [attributes setObject:[NSNumber numberWithUnsignedInt:320] forKey:(NSString*)kCVPixelBufferWidthKey]; [attributes setObject:[NSNumber numberWithUnsignedInt:480] forKey:(NSString*)kCVPixelBufferHeightKey]; NSError *error = nil; AVAssetWriter *videoWriter = [[AVAssetWriter alloc] initWithURL: [NSURL fileURLWithPath:path] fileType:AVFileTypeQuickTimeMovie error:&amp;error]; NSParameterAssert(videoWriter); NSDictionary *videoSettings = [NSDictionary dictionaryWithObjectsAndKeys: AVVideoCodecH264, AVVideoCodecKey, [NSNumber numberWithInt:size.width], AVVideoWidthKey, [NSNumber numberWithInt:size.height], AVVideoHeightKey, nil]; AVAssetWriterInput* writerInput = [[AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeVideo outputSettings:videoSettings] retain]; AVAssetWriterInputPixelBufferAdaptor *adaptor = [AVAssetWriterInputPixelBufferAdaptor assetWriterInputPixelBufferAdaptorWithAssetWriterInput:writerInput sourcePixelBufferAttributes:nil]; NSParameterAssert(writerInput); NSParameterAssert([videoWriter canAddInput:writerInput]); [videoWriter addInput:writerInput]; //Start a session: [videoWriter startWriting]; [videoWriter startSessionAtSourceTime:kCMTimeZero]; CVPixelBufferRef buffer = NULL; //convert uiimage to CGImage. xPixel=0; yPixel=250; buffer = [self pixelBufferFromCGImage:[[UIImage imageNamed:@"1.jpeg"] CGImage]]; CVPixelBufferPoolCreatePixelBuffer (NULL, adaptor.pixelBufferPool, &amp;buffer); [adaptor appendPixelBuffer:buffer withPresentationTime:kCMTimeZero]; for (int i = 0;i&lt;2; i++) { if([writerInput isReadyForMoreMediaData]) { //NSLog(@"inside for loop %d",i); for(int pframetime=1;pframetime&lt;=2;pframetime++) { CMTime frameTime = CMTimeMake(pframetime,25); CMTime lastTime=CMTimeMake(i,1); //i is from 0 to 19 of the loop above CMTime presentTime=CMTimeAdd(lastTime, frameTime); if(i==0) buffer = [self pixelBufferFromCGImage:[[UIImage imageNamed:@"1.jpeg"] CGImage]]; else buffer = [self pixelBufferFromCGImage:[[UIImage imageNamed:@"2.jpeg"] CGImage]]; while ( ![writerInput isReadyForMoreMediaData] ) { [NSThread sleepForTimeInterval:0.05]; } [adaptor appendPixelBuffer:buffer withPresentationTime:presentTime]; i++; } if(buffer) CVBufferRelease(buffer); //[NSThread sleepForTimeInterval:0.1]; } } [writerInput markAsFinished]; [videoWriter finishWriting]; [videoPathArray addObject:path]; //Finish the session: [videoWriter release]; [writerInput release]; CVPixelBufferPoolRelease(adaptor.pixelBufferPool); </code></pre> <p><strong>For Merge video files i try this code but not useful here is some blank screen between video</strong></p> <pre><code> AVMutableComposition* mixComposition = [AVMutableComposition composition]; NSString *documentsDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSString* video_inputFilePath1 = [videoPathArray objectAtIndex:1]; NSURL* video_inputFileUrl1 = [NSURL fileURLWithPath:video_inputFilePath1]; NSString* video_inputFilePath2 = [videoPathArray objectAtIndex:0]; NSURL* video_inputFileUrl2 = [NSURL fileURLWithPath:video_inputFilePath2]; NSString* video_inputFilePath3 = [videoPathArray objectAtIndex:2]; NSURL* video_inputFileUrl3 = [NSURL fileURLWithPath:video_inputFilePath3]; NSString* outputFileName = @"outputFile.mov"; NSString* outputFilePath = [NSString stringWithFormat:@"%@/%@",documentsDirectoryPath,outputFileName]; NSURL* outputFileUrl = [NSURL fileURLWithPath:outputFilePath]; if ([[NSFileManager defaultManager] fileExistsAtPath:outputFilePath]) [[NSFileManager defaultManager] removeItemAtPath:outputFilePath error:nil]; CMTime nextClipStartTime = kCMTimeZero; AVURLAsset* videoAsset1 = [[AVURLAsset alloc]initWithURL:video_inputFileUrl1 options:nil]; AVURLAsset* videoAsset2 = [[AVURLAsset alloc]initWithURL:video_inputFileUrl2 options:nil]; AVURLAsset* videoAsset3 = [[AVURLAsset alloc]initWithURL:video_inputFileUrl3 options:nil]; CMTimeRange video_timeRange1 = CMTimeRangeMake(kCMTimeZero,videoAsset1.duration); AVMutableCompositionTrack *a_compositionVideoTrack1 = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; [a_compositionVideoTrack1 insertTimeRange:video_timeRange1 ofTrack:[[videoAsset1 tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:nextClipStartTime error:nil]; CMTimeRange video_timeRange3 = CMTimeRangeMake(nextClipStartTime,videoAsset3.duration); [a_compositionVideoTrack1 insertTimeRange:video_timeRange3 ofTrack:[[videoAsset3 tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:videoAsset1.duration error:nil]; CMTimeRange video_timeRange2 = CMTimeRangeMake(nextClipStartTime,videoAsset1.duration); [a_compositionVideoTrack1 insertTimeRange:video_timeRange2 ofTrack:[[videoAsset2 tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:videoAsset1.duration error:nil]; AVAssetExportSession* _assetExport = [[AVAssetExportSession alloc] initWithAsset:mixComposition presetName:AVAssetExportPresetLowQuality]; _assetExport.shouldOptimizeForNetworkUse = YES; _assetExport.outputFileType = @"com.apple.quicktime-movie"; _assetExport.outputURL = outputFileUrl; </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload