我有一个iPhone相机附件,以9FPS捕捉视频,并将其作为单独的UIImages提供。我正在尝试将这些图像拼接在一起以创建使用AVFoundation的相机所看到的间隔拍摄视频。
我不确定如何正确转换帧和时序以实现我想要的时间压缩。
例如 - 我希望将1小时的真实片段转换为1分钟的时间间隔。这告诉我,我需要捕获每个第60帧并将其附加到游戏中时光倒流。
下面的代码是否完成了60秒到1秒的时间间隔转换?或者我需要在kRecordingFPS
之后再添加一些乘法/除法吗?
#define kRecordingFPS 9
#define kTimelapseCaptureFrameWithMod 60
//frameCount is the number of frames that the camera has output so far
if(frameCount % kTimelapseCaptureFrameWithMod == 0)
{
//...
//convert image and prepare it for recording
[self appendImage:image
atTime:CMTimeMake(currentRecordingFrameNumber++, kRecordingFPS)];
}
答案 0 :(得分:1)
你的代码每隔1/9对你的电影进行60帧中的1帧,每次增加一帧frameIndex。
结果应该是[frameCount的最大值] /(60 * 9)的影片。如果你有32400帧(1小时的胶片,9fps),那么这部电影将是{540:9 = 60s}。
尝试每次拨打appendImage:atTime:
时使用CMTimeShow()打印CMTime以进行检查。
//at 5 fps, 300 frames recorded per 60 seconds
//to compress 300 frames into 1 second at 5 fps, we need to take every 300/5 = 60th frame
//to compress 300 frames into 1 second at 15 fps, take every 300/15 = 20th frame
//to compress 300 frames into 1 sec at 30 fps, take every 300/30 = 10th frame
#define kReceivedFPS 9
#define kStoreFPS 9
#define kSecondsPerSecondCompression 60
#define kTimelapseCaptureFrameWithMod (kSecondsPerSecondCompression * kReceivedFPS) / kStoreFPS