GPUimageview編輯視頻方向不對

拍攝的時候是豎屏,結果添加水印之後導出是橫屏播放了。或者還是豎屏播放但是畫面顛倒等等視頻方向不對,那該怎麼辦呢?先確認視頻角度:

+ (NSUInteger)degressFromVideoFileWithURL:(NSURL *)url {
    NSUInteger degress = 0;
    
    AVAsset *asset = [AVAsset assetWithURL:url];
    NSArray *tracks = [asset tracksWithMediaType:AVMediaTypeVideo];
    if([tracks count] > 0) {
        AVAssetTrack *videoTrack = [tracks objectAtIndex:0];
        CGAffineTransform t = videoTrack.preferredTransform;
        
        if(t.a == 0 && t.b == 1.0 && t.c == -1.0 && t.d == 0){
            // Portrait
            degress = 90;
        }else if(t.a == 0 && t.b == -1.0 && t.c == 1.0 && t.d == 0){
            // PortraitUpsideDown
            degress = 270;
        }else if(t.a == 1.0 && t.b == 0 && t.c == 0 && t.d == 1.0){
            // LandscapeRight
            degress = 0;
        }else if(t.a == -1.0 && t.b == 0 && t.c == 0 && t.d == -1.0){
            // LandscapeLeft
            degress = 180;
        }
    }
    return degress;
}

如果只是用來預覽錄製的視頻,只需要更改GPUImageView的方向。

   switch (_degress) {
       case 90:
          [filterView setInputRotation:kGPUImageRotateRight atIndex:0];
          break;
        case 180:
            [filterView setInputRotation:kGPUImageRotate180 atIndex:0];
           break;
       case 270:
          [filterView setInputRotation:kGPUImageRotateLeft atIndex:0];
           break;

        default:
           break;
   }

如果需要預覽同時點擊濾鏡切換濾鏡,那麼設置濾鏡的方向即可,不用去改GPUImageView的方向。

-(void)setRotaionForFilter:(GPUImageOutput<GPUImageInput>*)filter{
    if(_degress==90){
        [filter setInputRotation:kGPUImageRotateRight atIndex:0];
    }
    else if (_degress==180){
        [filter setInputRotation:kGPUImageRotate180 atIndex:0];
    }
    else if (_degress==270){
        [filter setInputRotation:kGPUImageRotateLeft atIndex:0];
    }

}

另外,如果使用GPUImageMovieWriter錄製視頻,方向可以這樣設定:

[movieWriter startRecordingInOrientation:CGAffineTransformMakeRotation(_degress/180.0*M_PI)];

 

其他文章請查看個人博客:http://zhangqq166.cn/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章