2013-01-09 19 views
16

मैं छवि मैजिक लाइब्रेरी द्वारा दी गई छवियों से एक वीडियो फ़ाइल बनाने की कोशिश कर रहा हूं। कुछ प्रभावों को एक अस्पष्टता अंतर की तरह एक करके लागू करने के बाद, यह सफलतापूर्वक कम हो गया है लेकिन Quick time player त्रुटि " video file could not be opened. The movie's file format isn't recognized " देता है।मूवी के फ़ाइल प्रारूप के कारण वीडियो फ़ाइल खोला नहीं जा सका

मैं निम्नलिखित कोड का उपयोग कर रहा:

double d = 0.00; 

- (void)posterizeImageWithCompression:(id)sender { 

    // Here we use JPEG compression. 
    NSLog(@"we're using JPEG compression"); 

    MagickWandGenesis(); 
    magick_wand = NewMagickWand(); 
    magick_wand = [self magiWandWithImage:[UIImage imageNamed:@"iphone.png"]]; 

    MagickBooleanType status; 

    status = MagickSetImageOpacity(magick_wand, d); 

    if (status == MagickFalse) { 
     ThrowWandException(magick_wand); 
    } 
    if (status == MagickFalse) { 
     ThrowWandException(magick_wand); 
    } 
    size_t my_size; 
    unsigned char * my_image = MagickGetImageBlob(magick_wand, &my_size); 
    NSData * data = [[NSData alloc] initWithBytes:my_image length:my_size]; 
    free(my_image); 
    magick_wand = DestroyMagickWand(magick_wand); 
    MagickWandTerminus(); 
    UIImage * image = [[UIImage alloc] initWithData:data]; 

    d = d + 0.05; 
    if (status == MagickFalse) { 
     ThrowWandException(magick_wand); 
    } 

    NSData *data1; 

    NSArray *paths; 

    NSString *documentsDirectory,*imagePath ; 

    UIImage *image1 = image; 

    paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 

    documentsDirectory = [paths objectAtIndex:0]; 

    imagePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%f.png",d]]; 

    data1 = UIImagePNGRepresentation(image1); 

    if (d <= 1.0) { 

     [data1 writeToFile:imagePath atomically:YES]; 

     [imageViewButton setImage:image forState:UIControlStateNormal]; 

     // If ready to have more media data 
     if (assetWriterPixelBufferAdaptor.assetWriterInput.readyForMoreMediaData) { 
      CVReturn cvErr = kCVReturnSuccess; 
      // get screenshot image! 
      CGImageRef image1 = (CGImageRef) image.CGImage; 

      // prepare the pixel buffer 
      CVPixelBufferRef pixelsBuffer = NULL; 

      // Lock pixel buffer address 
      CVPixelBufferLockBaseAddress(pixelsBuffer, 0); 

      // pixelsBuffer = [self pixelBufferFromCGImage:image1]; 

      CVPixelBufferUnlockBaseAddress(pixelsBuffer, 0); 

      CFDataRef imageData= CGDataProviderCopyData(CGImageGetDataProvider(image1)); 
      NSLog (@"copied image data"); 
      cvErr = CVPixelBufferCreateWithBytes(kCFAllocatorDefault, 
                FRAME_WIDTH, 
                FRAME_HEIGHT, 
                kCVPixelFormatType_32BGRA, 
                (void*)CFDataGetBytePtr(imageData), 
                CGImageGetBytesPerRow(image1), 
                NULL, 
                NULL, 
                NULL, 
                &pixelsBuffer); 
      NSLog (@"CVPixelBufferCreateWithBytes returned %d", cvErr); 

      // calculate the time 
      CFAbsoluteTime thisFrameWallClockTime = CFAbsoluteTimeGetCurrent(); 
      CFTimeInterval elapsedTime = thisFrameWallClockTime - firstFrameWallClockTime; 
      NSLog (@"elapsedTime: %f", elapsedTime); 
      CMTime presentationTime = CMTimeMake (elapsedTime * TIME_SCALE, TIME_SCALE); 

      // write the sample 
      BOOL appended = [assetWriterPixelBufferAdaptor appendPixelBuffer:pixelsBuffer withPresentationTime:presentationTime]; 

      if (appended) { 
       NSLog (@"appended sample at time %lf", CMTimeGetSeconds(presentationTime)); 
      } else { 
       NSLog (@"failed to append"); 
       [self stopRecording]; 
      } 

      // Release pixel buffer 
      CVPixelBufferRelease(pixelsBuffer); 
      CFRelease(imageData); 
     } 
    } 


} 

यह भी तरह त्रुटि दिखाता है ...

VideoToolbox`vt_Copy_32BGRA_2vuyITU601 + 91 and 
VideoToolbox`vtPixelTransferSession_InvokeBlitter + 574 and 
VideoToolbox`VTPixelTransferSessionTransferImage + 14369 and 
VideoToolbox`VTCompressionSessionEncodeFrame + 1077 and 
MediaToolbox`sbp_vtcs_processSampleBuffer + 599 
+0

तो क्या आप छवियों से वीडियो बनाना चाहते हैं? –

+0

क्या आपने इस सुविधा के लिए ffmpeg का उपयोग करने का प्रयास किया है? – Swati

+0

मुझे लगता है कि यह गलत प्रस्तुति समय के कारण हो सकता है। हमें 'TIME_SCALE' को दिया गया मान और एफपीएस क्या है जो आप अपनी अंतिम फिल्म में होने की उम्मीद कर रहे हैं। – uchiha

उत्तर

1

क्यूटी प्लेयर बहुत जानकारीपूर्ण नहीं किया जा रहा है। आम तौर पर, खिलाड़ी लापता कोडेक का नाम प्रदान करेंगे। यदि आपने फ़ाइल जेनरेट की है और इसे उसी कंप्यूटर पर प्रोग्रामेटिक रूप से वापस चलाया है क्योंकि आप इसे क्यूटी में असफल कर रहे थे, तो, किसी भी कारण से, प्रोग्राम लाइब्रेरी कोडेक स्पष्ट रूप से देख सकता था (क्योंकि इसका इस्तेमाल किया गया था) ओएस के साथ पंजीकृत नहीं है। खोल में, आप "फ़ाइल" कर सकते हैं और फ़ाइल प्रकार और संभवतः कोडेक प्राप्त कर सकते हैं। यदि नहीं, तो आपको वीएलसी, ट्रांसकोड, या जीस्ट्रीमर के साथ कोडेक ढूंढने में सक्षम होना चाहिए और फिर ओएस में आवश्यक कोडेक को डाउनलोड और इंस्टॉल करने में ऐप्पल के निर्देशों का पालन करना चाहिए।