GPUimageview编辑视频方向不对

本文提供了解决拍摄视频方向错误的方法,包括如何通过检测视频文件的角度并调整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/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值