合并帶有透明通道的視頻

在此之前需要了解視頻的組成

視頻是由多張圖片不間斷連續(xù)播放形成的,所有的視頻擴(kuò)展屬性其實(shí)都是對(duì)圖片間隔,壓縮比,寬高比進(jìn)行調(diào)整,當(dāng)然除了圖片自身的像素點(diǎn)處理,這里需要對(duì)openGL了解透徹(https://www.shangmayuan.com/a/db8f23382bf6427da7ca0218.html)。

編碼格式:一個(gè)視頻文件本身,通常由音頻和視頻兩部分組成,常見(jiàn)的視頻編碼格式有Xvid,AVC/H.264,MPEG1,MPEG2 等,常見(jiàn)的音頻編碼有MP3、AAC等。

視頻碼率:是指視頻文件在單位時(shí)間內(nèi)使用的數(shù)據(jù)流量,也叫碼流率。碼率越大,說(shuō)明單位時(shí)間內(nèi)取樣率越大,數(shù)據(jù)流精度就越高,這樣表現(xiàn)出來(lái)的的效果就是:視頻畫(huà)面更清晰畫(huà)質(zhì)更高。

視頻幀率:通常說(shuō)一個(gè)視頻的25幀,指的就是這個(gè)視頻幀率,即1秒中會(huì)顯示25幀;視頻幀率影響的是畫(huà)面流暢感,也就是說(shuō)視頻幀率超高,表現(xiàn)出來(lái)的效果就是:畫(huà)面越顯得流暢。你也可以這樣理解,假設(shè)1秒只顯1幀,那么一段視頻看起來(lái),就是有很明顯的卡頓感,不流暢不連慣。當(dāng)然視頻幀率越高,意味著畫(huà)面越多,也就相應(yīng)的,這個(gè)視頻文件的大小也會(huì)隨之增加,占用存儲(chǔ)空間也就增大了。

視頻分辨率:分辨率就是我們常說(shuō)的600x400分辨率、1920x1080分辨率,分辨率影響視頻圖像的大小,與視頻圖像大小成正比:視頻分辨率越高,圖像越大,對(duì)應(yīng)的視頻文件本身大小也會(huì)越大。

正文:
在任何的圖片視頻中都含有透明軌道 : Alpha通道,代表數(shù)字圖像中像素點(diǎn)的透明信息。白色的Alpha像素用以定義不透明的彩色像素,而黑色的Alpha定以透明像素,黑白之間的灰階則是彩色圖片中的半透明部分。

所以任何基于在圖片視頻上層添加的效果,就需要有透明軌道的視頻,比如合并雪花,燈光,爆破。。。

實(shí)驗(yàn)用AVFoundation即使原視頻包含透明軌道,在合成視頻后透明軌道消失了,需要后續(xù)花時(shí)間研究。
這里我用的是GPUImage 這個(gè)工具,可以講雪花無(wú)縫隙的結(jié)合起來(lái)。

_movieFile = [[GPUImageMovie alloc] initWithURL:url];    
 
_movieFile.runBenchmark = YES;
    _movieFile.playAtActualSpeed = NO;
    _movieFile2 = [[GPUImageMovie alloc] initWithURL:url2];
    _movieFile2.runBenchmark = YES;
    _movieFile2.playAtActualSpeed = NO;
    _filter = [[GPUImageScreenBlendFilter alloc] init];
    //    filter = [[GPUImageUnsharpMaskFilter alloc] init];
    [_movieFile addTarget:self.filter];
    [_movieFile2 addTarget:self.filter];
    // Only rotate the video for display, leave orientation the same for recording
    // In addition to displaying to the screen, write out a processed version of the movie to disk
    NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/last.mov"];
    unlink([pathToMovie UTF8String]); // If a file already exists, AVAssetWriter won't let you record new frames, so delete the old movie
    
    NSLog(@"file = %@",pathToMovie);
    NSURL *movieURL = [NSURL fileURLWithPath:pathToMovie];
    
    self.movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(640.0, 360.0)];
    [self.filter addTarget:self.movieWriter];
    // Configure this for video from the movie file, where we want to preserve all video frames and audio samples
    self.movieWriter.shouldPassthroughAudio = YES;
    //movieFile.audioEncodingTarget = self.movieWriter;
    [_movieFile enableSynchronizedEncodingUsingMovieWriter:self.movieWriter];
    
    [self.movieWriter startRecording];
    [_movieFile startProcessing];
    [_movieFile2 startProcessing];
    __block mlkiMovie * sself = self;
    
    [self.movieWriter setCompletionBlock:^{
        [sself.filter removeTarget:sself.movieWriter];
        [sself.movieFile endProcessing];
        [sself.movieFile2 endProcessing];
        [sself.movieWriter finishRecording];
        NSLog(@"ok");
    }];
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容