zoukankan      html  css  js  c++  java
  • 第5月第14天 视频编辑

    1.视频方向

    + (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;
    }

     http://www.tuicool.com/articles/IjyUnmb

    2.

      // 3.1 - Create AVMutableVideoCompositionInstruction
      AVMutableVideoCompositionInstruction *mainInstruction = [AVMutableVideoCompositionInstruction videoCompositionInstruction];
      mainInstruction.timeRange = CMTimeRangeMake(kCMTimeZero, self.videoAsset.duration);
    
      // 3.2 - Create an AVMutableVideoCompositionLayerInstruction for the video track and fix the orientation.
      AVMutableVideoCompositionLayerInstruction *videolayerInstruction = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:videoTrack];
      AVAssetTrack *videoAssetTrack = [[self.videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];
      UIImageOrientation videoAssetOrientation_  = UIImageOrientationUp;
      BOOL isVideoAssetPortrait_  = NO;
      CGAffineTransform videoTransform = videoAssetTrack.preferredTransform;
      if (videoTransform.a == 0 && videoTransform.b == 1.0 && videoTransform.c == -1.0 && videoTransform.d == 0) {
        videoAssetOrientation_ = UIImageOrientationRight;
        isVideoAssetPortrait_ = YES;
      }
      if (videoTransform.a == 0 && videoTransform.b == -1.0 && videoTransform.c == 1.0 && videoTransform.d == 0) {
        videoAssetOrientation_ =  UIImageOrientationLeft;
        isVideoAssetPortrait_ = YES;
      }
      if (videoTransform.a == 1.0 && videoTransform.b == 0 && videoTransform.c == 0 && videoTransform.d == 1.0) {
        videoAssetOrientation_ =  UIImageOrientationUp;
      }
      if (videoTransform.a == -1.0 && videoTransform.b == 0 && videoTransform.c == 0 && videoTransform.d == -1.0) {
        videoAssetOrientation_ = UIImageOrientationDown;
      }
      [videolayerInstruction setTransform:videoAssetTrack.preferredTransform atTime:kCMTimeZero];
      [videolayerInstruction setOpacity:0.0 atTime:self.videoAsset.duration];
    
      // 3.3 - Add instructions
      mainInstruction.layerInstructions = [NSArray arrayWithObjects:videolayerInstruction,nil];
    
      AVMutableVideoComposition *mainCompositionInst = [AVMutableVideoComposition videoComposition];
    
      CGSize naturalSize;
      if(isVideoAssetPortrait_){
        naturalSize = CGSizeMake(videoAssetTrack.naturalSize.height, videoAssetTrack.naturalSize.width);
      } else {
        naturalSize = videoAssetTrack.naturalSize;
      }
    
      float renderWidth, renderHeight;
      renderWidth = naturalSize.width;
      renderHeight = naturalSize.height;
      mainCompositionInst.renderSize = CGSizeMake(renderWidth, renderHeight);
      mainCompositionInst.instructions = [NSArray arrayWithObject:mainInstruction];
      mainCompositionInst.frameDuration = CMTimeMake(1, 30);
    
      [self applyVideoEffectsToComposition:mainCompositionInst size:naturalSize];
    - (void)applyVideoEffectsToComposition:(AVMutableVideoComposition *)composition size:(CGSize)size
    {
      // 1 - set up the overlay
      CALayer *overlayLayer = [CALayer layer];
      UIImage *overlayImage = nil;
      if (_frameSelectSegment.selectedSegmentIndex == 0) {
        overlayImage = [UIImage imageNamed:@"Frame-1.png"];
      } else if(_frameSelectSegment.selectedSegmentIndex == 1) {
        overlayImage = [UIImage imageNamed:@"Frame-2.png"];
      } else if(_frameSelectSegment.selectedSegmentIndex == 2) {
        overlayImage = [UIImage imageNamed:@"Frame-3.png"];
      }
     
      [overlayLayer setContents:(id)[overlayImage CGImage]];
      overlayLayer.frame = CGRectMake(0, 0, size.width, size.height);
      [overlayLayer setMasksToBounds:YES];
     
      // 2 - set up the parent layer
      CALayer *parentLayer = [CALayer layer];
      CALayer *videoLayer = [CALayer layer];
      parentLayer.frame = CGRectMake(0, 0, size.width, size.height);
      videoLayer.frame = CGRectMake(0, 0, size.width, size.height);
      [parentLayer addSublayer:videoLayer];
      [parentLayer addSublayer:overlayLayer];
     
      // 3 - apply magic
      composition.animationTool = [AVVideoCompositionCoreAnimationTool
                                   videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer:videoLayer inLayer:parentLayer];
    
    }

    http://www.cocoachina.com/ios/20141208/10542.html

  • 相关阅读:
    springboot springcloud zuul 过滤器
    springboot springcloud eureka 熔断器
    javaweb servlet filter
    maven nexus 搭建私服(二)
    springboot springcloud zuul 网关入门
    springboot springcloud 配置中心
    springboot springcloud eureka 入门
    java rabbitmq
    java jvm调优
    maven nexus 搭建私服(一)
  • 原文地址:https://www.cnblogs.com/javastart/p/6396289.html
Copyright © 2011-2022 走看看