zoukankan      html  css  js  c++  java
  • IOS 视频分解图片、图片合成视频

    在IOS视频处理中,视频分解图片和图片合成视频是IOS视频处理中常常遇到的问题。这篇博客就这两个部分对IOS视频图像的相互转换做一下分析。

    (1)视频分解图片

    这里视频分解图片使用的是AVAssetImageGenerator。利用这个class能够非常方便的实现不同一时候间戳下,视频帧的抓取。注意一般这样的视频分解图片帧的方法都是放在子线程中的,而UI更新操作都是放在主线程中的。

    以下来看看核心代码:

        _imageGenerator = [[AVAssetImageGenerator alloc] initWithAsset:_asset];

        images = [[NSMutableArray alloc]initWithCapacity:10];

        _imageGenerator.maximumSize = THUMBNAIL_SIZE;

        CMTime duration = _asset.duration;

        CMTimeValue intervalSeconds = duration.value / 3;

        CMTime time = kCMTimeZero;

        NSMutableArray *times = [NSMutableArray array];

        for (NSUInteger i = 0; i < 3; i++) {

            [times addObject:[NSValue valueWithCMTime:time]];

            time = CMTimeAdd(time, CMTimeMake(intervalSeconds, duration.timescale));

        }

        [_imageGenerator generateCGImagesAsynchronouslyForTimes:times completionHandler:^(CMTime requestedTime,                                                                                      CGImageRef cgImage,

        CMTime actualTime,   

        AVAssetImageGeneratorResult result,

        NSError *error) {

            if (cgImage) {

                UIImage *image = [UIImage imageWithCGImage:cgImage];

                [images addObject:image];

            }

            if (images.count == 3) {

                dispatch_async(dispatch_get_main_queue(), ^{

                    self.imageview1.image = [images objectAtIndex:0];

                    self.imageview2.image = [images objectAtIndex:1];

                    self.imageview3.image = [images objectAtIndex:2];

                });

            }

        }];

    分解之后的帧效果例如以下:                               图片合成视频效果例如以下:

        

        (2)图片合成视频

        图片合成视频的方法相对来说更加复杂一点。我们主要用到的class是这个:

    AVAssetWriterInputPixelBufferAdaptor。

    不同之处在于这里我们还要设置图片合成视频的各种參数,比方帧率,编码方式等等。

        2.1 设置文件封装类型

    AVFileTypeQuickTimeMovie

        2.2 设置图片格式

    kCVPixelFormatType_32ARGB

        2.3 设置编码方式、图片尺寸

         NSDictionary *videoSettings = @{AVVideoCodecKey : AVVideoCodecH264,

                               AVVideoWidthKey : [NSNumber numberWithInt:(int)width],

                               AVVideoHeightKey : [NSNumber numberWithInt:(int)height]};

    2.4 图片合成開始

             CMTime lastTime = CMTimeMake(i, self.frameTime.timescale);

             CMTime presentTime = CMTimeAdd(lastTime, self.frameTime);

             [self.bufferAdapter appendPixelBuffer:sampleBuffer withPresentationTime:presentTime];





  • 相关阅读:
    windows系统下的文件夹链接功能mklink/linkd
    packetfence 7.2网络准入部署(一)
    packetfence 7.2网络准入部署(二)
    博客园转载其他博客园的文章:图片和源码
    使用ARP欺骗, 截取局域网中任意一台机器的网页请求,破解用户名密码等信息
    Huawei AP3030DN固件升级
    iOS高版本备份恢复到低版本系统的方法
    比较正确的 iPhone7/7+ 的进入DFU的方法是这样的
    使用kbmmw smarthttpservice 简单返回数据库结果
    kbmmw 5.07 正式发布
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/7143251.html
Copyright © 2011-2022 走看看