определенные кадры фильма редактируются с помощью GPUImage

Я хочу применить эффекты к определенным кадрам фильма, используя GPUImage. Я успешно добавил эффект ко всему файлу фильма, так есть ли способ добавить разные эффекты к разным кадрам?

Например, я хочу применить эффект сепии к видео от 5 до 10 секунд. Поэтому мне нужно 0-5 секунд для оригинального видео, 5-10 секунд с эффектом сепии и 10 секунд всего видео с оригинальным видео.

Кроме того, я хочу рисовать текст/изображение на определенных кадрах с помощью GPUImage, возможно ли это?

Любой ответ будет принят с благодарностью.


person iMOBDEV    schedule 10.05.2012    source источник


Ответы (1)


Вы можете попросить MPMoviePlayerController или AVAssetImageGenerator создать миниатюру в указанное вами время.

iPhone Чтение UIimage (кадров) из видео с помощью AVFoundation

AVAssetImageGenerator обеспечивает поворот изображений

Если вам нужны видео, а не просто кадры, вы можете вырезать часть видео и применить к нему эффект. Это берет URL-адрес вашего видео и обрезает его до указанного времени.

    AVURLAsset *videoAsset = [AVURLAsset URLAssetWithURL:videoURL options:nil]; 
    AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:videoAsset presetName:AVAssetExportPresetHighestQuality];
    exportSession.outputURL = [NSURL fileURLWithPath:outputURL];
    exportSession.outputFileType = AVFileTypeQuickTimeMovie;
    CMTimeRange timeRange = CMTimeRangeMake(CMTimeMake(startMilliseconds, 1000), CMTimeMake(endMilliseconds - startMilliseconds, 1000));
    exportSession.timeRange = timeRange;

    [exportSession exportAsynchronouslyWithCompletionHandler:^{
        switch (exportSession.status) {
            case AVAssetExportSessionStatusCompleted:
                 ///
                // Call something to apply the effect
               ///
                break;
            case AVAssetExportSessionStatusFailed:
                NSLog(@"Failed:%@", exportSession.error);
                break;
            case AVAssetExportSessionStatusCancelled:
                NSLog(@"Canceled:%@", exportSession.error);
                break;
            default:
                break;
        }
    }];

По завершении вы затем примените свой эффект, и если вы выбрали маршрут видеоклипа, объедините их и закодируйте.

Как объединить видеоклипы с разной ориентацией с помощью AVFoundation

person Brandon Schlenker    schedule 18.05.2012
comment
Брэндон, спасибо за альтернативное решение. Вы имеете в виду, что если я хочу применить эффект к видео от 5 до 10 секунд, я должен сначала экспортировать это 5-секундное видео, а затем применить эффект с помощью GPUImage, а затем вставить его в исходное видео? - person iMOBDEV; 19.05.2012
comment
Да, кажется, это лучшее решение, которое я могу найти. Я, конечно, не эксперт в этом, так что у кого-то может быть лучший ответ. - person Brandon Schlenker; 19.05.2012
comment
Спасибо за ваше решение, я уже думал об этом, но мне нужно лучшее решение для этого, потому что может потребоваться время, если я применю более одного эффекта в разных временных рамках. - person iMOBDEV; 19.05.2012