修剪视频时如何检测视频方向?

Posted

技术标签:

【中文标题】修剪视频时如何检测视频方向?【英文标题】:How to detect video orientation when we are triming a video? 【发布时间】:2014-07-08 13:04:00 【问题描述】:

当我以横向模式录制视频时,我第二次遇到错误的视频方向。对于第一次记录,我在 didFinishMediaWithInfo 中获得了正确的视频方向

现在。我正在使用以下代码来检测视频方向。

 AVAsset *firstAsset = [AVAsset assetWithURL:videoUrl];
    AVAssetTrack *FirstAssetTrack = [[firstAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];

        UIImageOrientation FirstAssetOrientation_  = UIImageOrientationUp;

        BOOL  isFirstAssetPortrait_  = NO;

        CGAffineTransform firstTransform = [FirstAssetTrack preferredTransform];

        if(firstTransform.a == 0 && firstTransform.b == 1.0 && firstTransform.c == -1.0 && firstTransform.d == 0)
        
            FirstAssetOrientation_= UIImageOrientationRight; isFirstAssetPortrait_ = YES;
        
        if(firstTransform.a == 0 && firstTransform.b == -1.0 && firstTransform.c == 1.0 && firstTransform.d == 0)
        
            FirstAssetOrientation_ =  UIImageOrientationLeft; isFirstAssetPortrait_ = YES;
        
        if(firstTransform.a == 1.0 && firstTransform.b == 0 && firstTransform.c == 0 && firstTransform.d == 1.0)
        
            FirstAssetOrientation_ =  UIImageOrientationUp;
        
        if(firstTransform.a == -1.0 && firstTransform.b == 0 && firstTransform.c == 0 && firstTransform.d == -1.0)
        
            FirstAssetOrientation_ = UIImageOrientationDown;
        

 if(isFirstAssetPortrait_)
    
        NSLog(@"Portrait mode");
     
else
        NSLog(@"Landscape mode");


上面的代码给出了正确的方向,如果首先记录纵向模式。然后录制横向模式。如果用户再次以横向模式录制视频。那么它会给出错误的视频方向并使纵向 BOOL 是。

如果视频以横向模式录制并使用 AVAssetExportSession 修剪。然后修剪的视频在 MPMoviePlayer 中以错误的方向播放。如何解决这个问题?

请指导我。

【问题讨论】:

【参考方案1】:
AVURLAsset* movieAsset = [AVURLAsset URLAssetWithURL: movieFileURL options: nil];
NSArray *tracks = [movieAsset tracksWithMediaType:AVMediaTypeVideo];

CGSize videoSize = CGSizeZero;
if ([tracks count] != 0)

    AVAssetTrack *videoTrack = [tracks objectAtIndex:0];
    videoSize = videoTrack.naturalSize;

    CGRect videoRect = CGRectMake(0.0, 0.0, videoSize.width, videoSize.height);
    videoRect = CGRectApplyAffineTransform(videoRect, videoTrack.preferredTransform);

    if (videoRect.size.height > videoRect.size.width)
    
        NSLog(@"Portrait mode");
    
    else if (videoRect.size.height < videoRect.size.width)
    
        NSLog(@"Landscape mode");
    
    else
    
        NSLog(@"Square mode");
    

【讨论】:

这很有帮助。谢谢! 好的。但是方形视频方向呢?

以上是关于修剪视频时如何检测视频方向?的主要内容,如果未能解决你的问题,请参考以下文章

AVAssetExportSession - 如何从视频持续时间中修剪毫秒

如何使用 iOS SDK 修剪视频文件并转换为 15 秒视频?

修剪后无法在相机胶卷中显示视频

像whatsapp一样修剪视频

AVCaptureMovieFileOutput -- 在写入时修剪文件

不容错过的mac视频修剪技巧:Mac版Joyoshare Media Cutter入门指南