Я пытаюсь закодировать преобразование двойной сферы ("рыбий глаз") в равностороннее (360°) видео

Я использовал код для преобразования двухсферных видео в 360-градусные видео. Моя проблема в том, что он останавливается для видео продолжительностью более 10 секунд. Если я использую его для небольших видео по 10 Мб, это нормально. Но если я попробую это на 70-мегабайтных видео, оно остановится, когда будет достигнуто 30 секунд. Он не хочет завершать преобразование.

NSURL *sampleURL = [[NSBundle mainBundle] URLForResource:@"R0010050_20160823192340" withExtension:@"MP4"];

movieFile = [[GPUImageMovie alloc] initWithURL:sampleURL];
movieFile.runBenchmark = YES;
movieFile.playAtActualSpeed = NO;
filter = [[GPUImageDeFisheye alloc] init];

[movieFile addTarget:filter];

// Only rotate the video for display, leave orientation the same for recording
GPUImageView *filterView = (GPUImageView *)self.view;
[filter addTarget:filterView];

// In addition to displaying to the screen, write out a processed version of the movie to disk
NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Movie.m4v"];
unlink([pathToMovie UTF8String]); // If a file already exists, AVAssetWriter won't let you record new frames, so delete the old movie
NSURL *movieURL = [NSURL fileURLWithPath:pathToMovie];

movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(1920, 960)];
[filter addTarget:movieWriter];

// Configure this for video from the movie file, where we want to preserve all video frames and audio samples
movieWriter.shouldPassthroughAudio = YES;
movieFile.audioEncodingTarget = movieWriter;
[movieFile enableSynchronizedEncodingUsingMovieWriter:movieWriter];

[movieWriter startRecording];
[movieFile startProcessing];

timer = [NSTimer scheduledTimerWithTimeInterval:0.3f
                                         target:self
                                       selector:@selector(retrievingProgress)
                                       userInfo:nil
                                        repeats:YES];

[movieWriter setCompletionBlock:^{
    [filter removeTarget:movieWriter];
    [movieWriter finishRecording];

    dispatch_async(dispatch_get_main_queue(), ^{
        [timer invalidate];
        self.progressLabel.text = @"100%";
    });
}];

У кого-нибудь есть идея?

0 ответов

Другие вопросы по тегам