首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何编辑亮度、对比度和饱和度,并添加已创建视频的字幕保存在图书馆?

如何编辑亮度、对比度和饱和度,并添加已创建视频的字幕保存在图书馆?
EN

Stack Overflow用户
提问于 2013-12-17 05:18:12
回答 1查看 1.9K关注 0票数 1

我正在开发一个视频应用程序,在这个应用程序中,我必须调整已经创建的的亮度、对比度和饱和度,我必须在电影中添加字幕。我读了很多关于它的文章,并且了解到在创建视频时我们可以添加亮度、对比度和饱和度,但不能在已经创建的video.Also中编辑--我已经知道如何在视频中添加文本,但我希望它像电影这样的视频播放间隔期的字幕。

使用GPUImage,我在录制时就这样改变了亮度。

代码语言:javascript
复制
GPUImageFilter *selectedFilter = nil ;
selectedFilter = [[GPUImageBrightnessFilter alloc] init];
[(GPUImageBrightnessFilter*)selectedFilter setBrightness:brightnesSlider.value];

但我需要编辑的视频,已经制作和保存在gallery.Any线索。

参考资料:

苹果编辑演示

雷·温德里希

亮度、对比度和饱和度

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-10 13:13:05

这是对我有用的代码,我用了GPUImage

viewController.h

#导入"GPUImage.h“

代码语言:javascript
复制
GPUImageMovie *movieFile;
GPUImageOutput<GPUImageInput> *filter;
GPUImageMovieWriter *movieWriter;

int ArrayIndex;
UISlider *mSlider;

ViewController.m

代码语言:javascript
复制
NSURL *sampleURL = [[NSBundle mainBundle] URLForResource:@"sample_iPod" withExtension:@"m4v"];

    mSlider=[[UISlider alloc]initWithFrame:CGRectMake(60,380,200, 30)];
    mSlider.continuous=YES;
    [mSlider addTarget:self action:@selector(updatePixelWidth:) forControlEvents:UIControlEventValueChanged];
    [self.view addSubview:mSlider];

    movieFile = [[GPUImageMovie alloc] initWithURL:sampleURL];
    movieFile.runBenchmark = YES;
    movieFile.playAtActualSpeed = YES;

    if(ArrayIndex==0)
    {
         filter=[[GPUImageBrightnessFilter alloc]init];

        mSlider.maximumValue=1.0;
        mSlider.minimumValue=-1.0;
        mSlider.value=0.0;
    }
    else if(ArrayIndex==1)
    {
         filter=[[GPUImageContrastFilter alloc]init];

        mSlider.minimumValue=0.0;
        mSlider.maximumValue=4.0;
        mSlider.value=1.0;

    }
    else if(ArrayIndex==2)
    {
         filter=[[GPUImageSaturationFilter alloc]init];

        mSlider.minimumValue=0.0;
        mSlider.maximumValue=2.0;
        mSlider.value=1.0;

    }

    [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(640.0, 480.0)];
    [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];

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

        if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum (pathToMovie)) {
            UISaveVideoAtPathToSavedPhotosAlbum (pathToMovie,self, @selector(video:didFinishSavingWithError:contextInfo:), nil);
        }

    }];



- (void)updatePixelWidth:(id)sender
{
    if(ArrayIndex==0)
    {
        [(GPUImageBrightnessFilter *)filter setBrightness:[(UISlider *)sender value]];
    }
    else if (ArrayIndex==1)
    {
          [(GPUImageContrastFilter *)filter setContrast:[(UISlider *)sender value]];
    }
    else if (ArrayIndex==2)
    {
        [(GPUImageSaturationFilter *)filter setSaturation:[(UISlider *)sender value]];
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20626464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档