如果对av foundation 不熟悉得话,建议先看看wwdc 2010 关于av foundation得讲座。http://blog.csdn.net/linzhiji/article/details/6752722
好的软件
Super 8 Qik viddy 8mm realDirector
以下内容来自论坛,和自己的编辑
在做视频特效的时候遇到了效率问题,怎么修改都无法达到super 8 的效果,我的做法是这样的:
使用AVAssetWriter *assetWriter;
AVAssetWriterInput *videoWriterInput;
AVAssetWriterInput *audioWriterInput;
AVAssetWriterInputPixelBufferAdaptor *pixelBufferAdaptor;
去进行视频输入和输出,以及audio的合成.
2) 在得到每一个视频frame的时候 进行图片合成再输出(输出用OpenGl 方式 )
CVPixelBufferLockBaseAddress(cameraFrame, 0); int bufferHeight = CVPixelBufferGetHeight(cameraFrame); int bufferWidth = CVPixelBufferGetWidth(cameraFrame); int bytesPerRow = CVPixelBufferGetBytesPerRow(cameraFrame); sourceTime = timeS*****p; frameBaseAddress = (unsigned char *)CVPixelBufferGetBaseAddress(cameraFrame); CGContextRef context = CGBitmapContextCreate(frameBaseAddress, bufferWidth, bufferHeight, 8, bytesPerRow, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst); CGContextDrawImage(context, CGRectMake (0, 0, 480, 360), coverImage); //和图片进行合成. CGContextRelease(context);
主要是在这里慢 CGContextDrawImage(context, CGRectMake (0, 0, 480, 360), coverImage); //和图片进行合成. ,在用Opengl绘制时候是很快的。
另外 stackflow有一个问答:
http://stackoverflow.com/questions/3741323/how-do-i-export-uiimage-array-as-a-movie