0

画像の配列からビデオを作成しようとしています。

ビデオを作成しましたが、プレゼンテーション時間に問題がありCMTimeます。

次のコードを使用してビデオを作成しています

   int frameCount = 1;

    // Adding images here to buffer
    for( int i = 0; i<[ fileArray count]; i++ )
    {
        // Create Pool
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

        NSString *imageTag = [fileArray objectAtIndex:i];
        // Create file path
        NSString *imgPath = [folderPath stringByAppendingPathComponent:imageTag];
        // Get image
        UIImage *img = [self getImageFromPath:imgPath];
        buffer = [self pixelBufferFromCGImage:[img CGImage] size:size];

        BOOL append_ok = NO;
        int j = 0;

        // Try 5 times if append failes
        while ( !append_ok && j < 30 )
        {
            if (adaptor.assetWriterInput.readyForMoreMediaData)
            {
                printf("appending %d attemp %d\n", frameCount, j);

                NSTimeInterval duration = 7.0;
                if ( [mArrAudioFileNames objectAtIndex:i] != [NSNull null] )
                {
                    // Get Audio file
                    NSString *docsDir = [[self dataFolderPathForAudio]
                                         stringByAppendingPathComponent:
                                         [mArrAudioFileNames objectAtIndex:i]];

                    NSURL *soundFileURL = [NSURL fileURLWithPath:docsDir];

                    // Create AudioPlayer
                    NSError *error;
                    AVAudioPlayer  *audioPlayer = [[AVAudioPlayer alloc]
                                                   initWithContentsOfURL:soundFileURL
                                                   error:&error];

                    // Get Audio duration
                    duration = [audioPlayer duration];
                    [audioPlayer release];
                }

                CMTime frameTime = CMTimeMake(frameCount,(int32_t)1);
                append_ok = [adaptor appendPixelBuffer:buffer
                                  withPresentationTime:frameTime];

                [NSThread sleepForTimeInterval:0.05];
            }
            else
            {
                printf("adaptor not ready %d, %d\n", frameCount, j);
                [NSThread sleepForTimeInterval:0.1];
            }
            j++;
        }
        if (!append_ok) {
            printf("error appending image %d times %d\n", frameCount, j);
            isError = YES;
        }
        frameCount++;
        CVBufferRelease(buffer);

        // drain the pool
        [pool drain];
    }

    [videoWriterInput markAsFinished];
    [videoWriter finishWriting];

    [videoWriterInput release];
    [videoWriter release];

配列に7つの画像がある場合、これにより7秒のビデオが作成されます。つまり、各画像が 1 秒間再生されます。

私の質問は、同じ画像セット (7 と仮定) でビデオを作成するにはどうすればよいですか? ビデオの各画像の表示時間が異なる場合です。

たとえば、ビデオの合計再生時間から最初の画像が 9 秒間再生された場合、2 番目の画像は 5 秒間、3 番目の画像は 20 秒間再生されます。

前もって感謝します。

4

0 に答える 0