私はGPUImage library
hereを使用していましたが、役立つサンプルがたくさんありますが、フィルターを使用しているときにGPUImageVideoCamera
. 既に録画されたビデオにフィルターを適用しようとしましたが、フィルターは正常に機能していますが、フィルターの値を変更しようとすると、GPUImageVideoCamera
ビデオを録画する必要がないため、使用していないため、フィルターの値が反映されません。ただし、フィルタ プレビューを実装してから、選択したフィルタを適用して新しいムービーを作成する必要があります。
以下に、コードの一部を入れています
- (void)viewDidLoad
{
[super viewDidLoad];
//Creating Filter
filter=[[GPUImageSepiaFilter alloc] init];
//Playing Video
[self playVideo];
}
-(void)playVideo{
if(!movieFile){
movieFile = [[GPUImageMovie alloc] initWithURL:self.videoURL];
movieFile.playAtActualSpeed=YES;
movieFile.playSound=YES;
movieFile.delegate=self;
}
[movieFile addTarget:filter];
CGRect rect=self.viewMovie.frame;
rect.origin=CGPointZero;
self.filterView=[[GPUImageView alloc] initWithFrame:rect];
[self.viewMovie addSubview:self.filterView];
//Rotate the preview to fix portrait recored video to show properly
if([self.transformation isEqualToString:@"portrait"]){
self.filterView.rotation=kGPUImageRotateRight;
}
[self.filterView initMovie];
[filter addTarget:self.filterView];
double delayInSeconds = 0.5;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
[movieFile startProcessing];
});
}
- (IBAction)sliderAction:(id)sender {
[self applySliderValue:self.slider.value];
}
//Doesn't work
-(void)applySliderValue:(float)sliderValue{
[((GPUImageSepiaFilter *)filter) setIntensity:sliderValue];
}
どんな助けでも大歓迎です。
ありがとう。