objective-c – 将UIImages导出到MP4
发布时间:2020-12-16 07:03:03 所属栏目:百科 来源:网络整理
导读:好的,所以我陷入了困境,我一直盯着这个问题看得太清楚了. 基本上,我只需要一个接收图像的NSArray并将mp4或其他视频格式写入磁盘的方法. 我并不担心监控用户的手势或类似的事情.图像已经存在于磁盘上 – 我只需要进行转换. 我知道我需要一个AVWriter,例如: -
好的,所以我陷入了困境,我一直盯着这个问题看得太清楚了.
基本上,我只需要一个接收图像的NSArray并将mp4或其他视频格式写入磁盘的方法. 我并不担心监控用户的手势或类似的事情.图像已经存在于磁盘上 – 我只需要进行转换. 我知道我需要一个AVWriter,例如: - (CVPixelBufferRef) pixelBufferFromCGImage: (CGImageRef) image { NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithBool:YES],kCVPixelBufferCGImageCompatibilityKey,[NSNumber numberWithBool:YES],kCVPixelBufferCGBitmapContextCompatibilityKey,nil]; CVPixelBufferRef pxbuffer = NULL; CVPixelBufferCreate(kCFAllocatorDefault,CGImageGetWidth(image),CGImageGetHeight(image),kCVPixelFormatType_32ARGB,(CFDictionaryRef) options,&pxbuffer); CVPixelBufferLockBaseAddress(pxbuffer,0); void *pxdata = CVPixelBufferGetBaseAddress(pxbuffer); CGColorSpaceRef rgbColorSpace = CGColorSpaceCreateDeviceRGB(); CGContextRef context = CGBitmapContextCreate(pxdata,8,4*CGImageGetWidth(image),rgbColorSpace,kCGImageAlphaNoneSkipFirst); CGContextConcatCTM(context,CGAffineTransformMakeRotation(0)); // CGAffineTransform flipVertical = CGAffineTransformMake( // 1,-1,CGImageGetHeight(image) // ); // CGContextConcatCTM(context,flipVertical); // CGAffineTransform flipHorizontal = CGAffineTransformMake( // -1.0,0.0,1.0,0.0 // ); // // CGContextConcatCTM(context,flipHorizontal); CGContextDrawImage(context,CGRectMake(0,CGImageGetHeight(image)),image); CGColorSpaceRelease(rgbColorSpace); CGContextRelease(context); CVPixelBufferUnlockBaseAddress(pxbuffer,0); return pxbuffer; } 我只是看不出如何将它全部放入一个干净的帮手.在你问我之前看过:How to display video from images之类的,但只是在UIImageView中运行图像并不是我在这里寻找的.这需要App Store合法,因此FFMPeg不是一个选项. 有什么想法/指导吗? 解决方法
https://github.com/meslater/MSImageMovieEncoder将图像编码为H.264.
您必须提供图像作为上下文引用或CVPixelBufferRefs(参见 sample code here)实现 -(BOOL)nextFrameInCVPixelBuffer:(CVPixelBufferRef*)pixelBuf; 每次调用此方法都应该返回一个缓冲区并返回YES.如果没有更多图像返回NO,您将在磁盘上找到该电影. 有关更多详细信息,请阅读How do I export UIImage array as a movie?(它基本上是相同的代码)或读取github文件. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |