我正在使用zoul的解决方案将UIImage数组导出为电影.但我的镜架都变形了.这是原始图片:

这是一个类似的失真例子:http: //oi56.tinypic.com/8wkqys.jpg
我在这里读到它与纵横比有关,但没有解释如何修复它.
是否可以将过滤器应用于AVLayer并将其添加到以addSublayer的形式查看?我想改变颜色,并使用Swift从相机中添加一些噪音,我不知道如何.
我想,可以像这样添加filterLayer和previewLayer:
self.view.layer.addSublayer(previewLayer)
self.view.layer.addSublayer(filterLayer)
Run Code Online (Sandbox Code Playgroud)
这可以用我的自定义过滤器创建视频,但我认为,有可能更有效地使用AVComposition
所以我需要知道的是:
谢谢你的每一个建议..
我已经使用Swift实现了以前的建议(如何在iPhone中使用CVPixelBufferPool和AVAssetWriterInputPixelBufferAdaptor?),但在使用CVPixelBufferPoolCreatePixelBuffer作为指导时,却遇到了"kCVReturnInvalidArgument"(错误值:-6661).
我基本上试图从图像创建一个电影,但由于缓冲池未成功创建,我无法附加像素缓冲区 - 这是我执行此操作的代码.
任何建议都非常感谢!
import Foundation
import Photos
import OpenGLES
import AVFoundation
import CoreMedia
class MovieGenerator {
var _videoWriter:AVAssetWriter
var _videoWriterInput: AVAssetWriterInput
var _adapter: AVAssetWriterInputPixelBufferAdaptor
var _buffer = UnsafeMutablePointer<Unmanaged<CVPixelBuffer>?>.alloc(1)
init(frameSize size: CGSize, outputURL url: NSURL) {
// delete file if exists
let sharedManager = NSFileManager.defaultManager() as NSFileManager
if(sharedManager.fileExistsAtPath(url.path!)) {
sharedManager.removeItemAtPath(url.path, error: nil)
}
// video writer
_videoWriter = AVAssetWriter(URL: url, fileType: AVFileTypeQuickTimeMovie, error: nil)
// writer input
var videoSettings = [AVVideoCodecKey:AVVideoCodecH264, AVVideoWidthKey:size.width, AVVideoHeightKey:size.height]
_videoWriterInput = AVAssetWriterInput(mediaType: AVMediaTypeVideo, …Run Code Online (Sandbox Code Playgroud) 我目前正在制作一个小应用程序,将我的mac上的网络摄像头延时,将捕获的帧保存到png,我正在考虑将捕获的帧导出为单个视频.
我使用CGImage来处理原始图像,并将它们设置在一个数组中,但我不确定那里是从那里开始的.我从自己的研究中得知,我必须以某种方式使用AVAssetWriter和AVAssetWriterInput.
我在这里看了一下,阅读了苹果文档并搜索了谷歌.但是所有的指南等都是obj-c而不是swift,这使得它很难理解(因为我没有Obj-C的经验).
任何帮助将非常感谢.
非常感谢,卢克.
我正在尝试从视频中获取图像,然后使用此图像生成静态影片第一步效果很好,但第二步在设置applyPreferredTrackTransform = true后生成格式错误的视频
从视频中提取的正常图像
从图像生成的格式错误的视频

这是怎么来的?正常图像会生成格式错误的视频吗?此外,如果我在#2中放置GenerateMovieFromImage.generateMovieWithImage块,应用程序将在CGContextDrawImage(context,CGRectMake(0,0,frameSize.width,frameSize.height),image)中崩溃;
我做了如下(在swift中):
var asset: AVAsset = AVAsset.assetWithURL(self.tmpMovieURL!) as AVAsset
var imageGen: AVAssetImageGenerator = AVAssetImageGenerator(asset: asset)
var time: CMTime = CMTimeMake(0, 60)
imageGen.appliesPreferredTrackTransform = true
imageGen.generateCGImagesAsynchronouslyForTimes( [ NSValue(CMTime:time) ], completionHandler: {
(requestTime, image, actualTime, result, error) -> Void in
if result == AVAssetImageGeneratorResult.Succeeded {
ALAssetsLibrary().writeImageToSavedPhotosAlbum(image, metadata: nil, completionBlock: {
(nsurl, error) in
// #2
})
GenerateMovieFromImage.generateMovieWithImage(image, completionBlock:{
(genMovieURL) in
handler(genMovieURL)
})
Run Code Online (Sandbox Code Playgroud)
GenerateMovieFromImage.generateMovieWithImage来自这个答案
+ (void)generateMovieWithImage:(CGImageRef)image completionBlock:(GenerateMovieWithImageCompletionBlock)handler
{
NSLog(@"%@", image);
NSString *path = [NSTemporaryDirectory() stringByAppendingPathComponent: [@"tmpgen" stringByAppendingPathExtension:@"mov" …Run Code Online (Sandbox Code Playgroud) 我已经找到导出[UIImage]作为电影,但它全部在ObjectiveC中,我无法弄清楚Swift.
我需要从[UIImage]创建一个视频
通过以上链接研究Zoul的答案.第1部分)连接作者
我到目前为止:
let paths = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
let documentsURL = paths[0] as! NSURL
let videoWriter:AVAssetWriter = AVAssetWriter(URL: documentsURL, fileType: AVFileTypeQuickTimeMovie, error: nil)
var videoSettings: NSDictionary = NSDictionary(
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚他正确的Swift版本
NSDictionary *videoSettings = [NSDictionary dictionaryWithObjectsAndKeys:
AVVideoCodecH264, AVVideoCodecKey,
[NSNumber numberWithInt:640], AVVideoWidthKey,
[NSNumber numberWithInt:480], AVVideoHeightKey,
nil];
Run Code Online (Sandbox Code Playgroud)
我正在Swift中制作一个应用程序(我有最新的xcode更新),该应用程序必须从某些图像生成视频。
我从此答案中获得了代码。如何将UIImage数组导出为电影?
我这样调用该函数:
let size = CGSize(width: 1280, height: 720)
let pathVideo = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
let percorsoVideo = pathVideo[0]
writeImagesAsMovie(arrayImmagini, videoPath: percorsoVideo+"/prova.mp4", videoSize: size, videoFPS: 1)
Run Code Online (Sandbox Code Playgroud)
“ arrayImmagini”的字面定义如下:
var arrayImmagini = [UIImage(imageLiteral: "Frames/turtle/turtle0.jpg"), UIImage(imageLiteral: "Frames/turtle/turtle1.jpg"), ...]
Run Code Online (Sandbox Code Playgroud)
当我尝试运行代码时,我得到了一个全黑的视频,而xcode给我这2个错误是数组中图像数量的两倍:
Sep 5 09:24:15 Prova[1554] <Error>: CGBitmapContextCreate: invalid data bytes/row: should be at least 7680 for 8 integer bits/component, 3 components, kCGImageAlphaPremultipliedFirst.
Sep 5 09:24:15 Prova[1554] <Error>: CGContextDrawImage: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental …Run Code Online (Sandbox Code Playgroud) 我有一个使用UIImagePickerController对象获取视频文件进行共享的应用程序.
我正在设置媒体类型(picker.mediaTypes = [kUTTypeMovie as String])并使用该字段UIImagePickerControllerMediaURL来获取视频详细信息.这可以正常工作,并且当所有设备都是H.264实时编码或所有设备都是H.265实时解码时都没有问题.
问题是我需要支持无法播放H.265内容的设备.我想采取"创建单一兼容文件"的路线.无论录制设备的功能如何,如何告诉UIImagePickerController我H.264视频呢?
我正在将屏幕从iPhone设备记录到Mac。作为预览层,我直接从中收集样本缓冲区AVCaptureVideoDataOutput,从中创建纹理并使用渲染它们Metal。我遇到的问题是,在macOS中工作的代码10.13在更新到后就停止工作了10.13。即
CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(_currentSampleBuffer);
if (!imageBuffer) return;
CVPixelBufferLockBaseAddress(imageBuffer,0);
size_t width = CVPixelBufferGetWidth(imageBuffer);
size_t height = CVPixelBufferGetHeight(imageBuffer);
CVMetalTextureRef metalTexture = NULL;
CVReturn result = CVMetalTextureCacheCreateTextureFromImage(nil,
self.textureCache,
imageBuffer,
nil,
self.pixelFormat,
width,
height,
0,
&metalTexture);
if (result == kCVReturnSuccess) {
self.texture = CVMetalTextureGetTexture(metalTexture);
}
Run Code Online (Sandbox Code Playgroud)
返回值result = -6660(可以转换为通用值)kCVReturnError,可以在官方的Apple文档中看到,以及metalTexture = NULL。
我使用的是像素格式MTLPixelFormatBGRG422,因为来自相机的样本是2vuy。
作为metalTexture从创建的替代方法sampleBuffer,我现在正在创建一个中间件,NSImage如下所示:
CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(_currentSampleBuffer);
NSCIImageRep …Run Code Online (Sandbox Code Playgroud) 我正在使用AVAssetWriter将一系列图像编码为电影文件,遵循Zoul的答案:如何将UIImage数组导出为电影?.
总之,我的过程是:
这在大多数情况下都能正常工作,但有时编码的.mov文件会失真(参见下图).我想知道这种类型的失真图像输出是否为任何人所熟悉,如果有任何步骤我可能会采用编码导致这种情况的帧.当我使用的源图像是通过Titanium到ImageView.toBlob()的调用生成时,会出现问题.除了Titanium之外,任何关于如何出现这种结果的提示都会很棒!
谢谢,亚历山大
电影屏幕:http: //tinypic.com/view.php?pic = 8wkqys&s = 7
原图:http://commons.wikimedia.org/wiki/File : Phalaenopsis_ (aka).jpg

我有一个有趣的问题,我需要研究与非常低级别的视频流.
有没有人有过将原始字节流(分成每像素信息,但不是标准格式的视频)转换为低分辨率视频流的经验?我相信我可以将数据映射到每像素字节的RGB值,因为与原始数据中的值对应的颜色值将由我们确定.我不知道从那里去哪里,或者每个像素需要RGB格式.
我看过FFMPeg,但它的文档很大,我不知道从哪里开始.
我所包含的具体问题是,是否可以使用该像素数据创建CVPixelBuffer?如果我这样做,我需要转换为每像素数据的格式是什么?
另外,我是否应该更深入地研究OpenGL,如果是这样,哪里可以找到有关此主题的信息的最佳位置?
那么CGBitmapContextCreate呢?例如,如果我去了,我就是这样的,一个典型的像素字节需要看起来像什么?这是否足够快以保持帧速率高于20fps?
编辑:
我认为在你们的帮助下,以及我自己的一些研究,我已经制定了一个如何构建原始RGBA数据的计划,然后根据该数据构建CGImage,从而创建一个来自CGImage的CVPixelBuffer来自CGImage的CVPixelBuffer.
然而,为了在数据进入时播放,我不确定我会看到什么样的FPS.我是否将它们绘制到CALayer,或者是否有类似AVAssetWriter的类,我可以使用它来添加CVPixelBuffers.我的经验是使用AVAssetWriter将构建的CoreAnimation层次结构导出到视频,因此视频总是在开始播放之前构建,而不是显示为实时视频.
我正在构建一个可以实时获取视图的 IP 摄像头应用程序,现在我想使用 Swift 录制 MJPEG 格式的视频。
let imageData = receivedData , imageData.length > 0,
let receivedImage = UIImage(data: imageData as Data)
Run Code Online (Sandbox Code Playgroud)
这里我有收到的每个图像并将它们保存为 UIImage,问题是如何记录图像流?我在 Github 上找到了一个有用的资源但是我失败了,链接被炸了:https : //gist.github.com/acj/6ae90aa1ebb8cad6b47b
任何人都可以给我一些提示或者你们有示例项目吗?真的很感激,谢谢!
更新:我使用 Amrit Tiwari 的答案中的代码,但收到此错误:为 640.0x640.0 视频创建资产编写器错误将图像转换为视频:开始会话后 pixelBufferPool nil
if let imageData = receivedData , imageData.length > 0,
let receivedImage = UIImage(data: imageData as Data){
let size = CGSize(width: 640, height: 640)
writeImagesAsMovie([receivedImage], videoPath: "test.mp4", videoSize: size, videoFPS: 2)
}
Run Code Online (Sandbox Code Playgroud)
我不确定路径参数是否正确(我想将它保存在 Documents 目录中)。请帮帮我,谢谢!
我想将一系列图像转换为iphone中的视频
任何人都可以为此提出方法或框架.
谢谢你们