Почему GPUImage не может редактировать полное видео? - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь редактировать видео с помощью GPUImage. Но когда он достигает определенного процента, он больше не редактирует. Например, для видео продолжительностью 28 секунд оно останавливается после 7% обработки редактирования видео. Вот мой код

- (void)viewDidLoad {
    [super viewDidLoad];

    NSURL *sampleURL = [[NSBundle mainBundle] URLForResource:@"a" withExtension:@"mp4"];
    movieFile = [[GPUImageMovie alloc] initWithURL:sampleURL];
    movieFile.runBenchmark = YES;
    movieFile.playAtActualSpeed = NO;
    filter = [[GPUImagePixellateFilter alloc] init];
    [movieFile addTarget:filter];
    NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Movie.mp4"];
    unlink([pathToMovie UTF8String]);
    NSURL *movieURL = [NSURL fileURLWithPath:pathToMovie];
    movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(640.0, 480.0)];
    [filter addTarget:movieWriter];
    movieWriter.shouldPassthroughAudio = YES;
    movieFile.audioEncodingTarget = movieWriter;
    [movieFile enableSynchronizedEncodingUsingMovieWriter:movieWriter];
    [movieWriter startRecording];
    [movieFile startProcessing];
    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.0f target:self selector:@selector(retrievingProgress) userInfo:nil repeats:YES];
    [movieWriter setCompletionBlock:^{
        [filter removeTarget:movieWriter];
        [movieWriter finishRecording];
        dispatch_async(dispatch_get_main_queue(), ^{
            [timer invalidate];
        });
    }];

}

- (void)retrievingProgress
{
    self.labelView.text = [NSString stringWithFormat:@"Your video edited %d%%", (int)(movieFile.progress * 100)];
    NSLog(@"%d%%",(int)(movieFile.progress*100));
}
...