gpt4 book ai didi

objective-c - 使用 QTKit 以随机帧速率将 NSImage 添加到电影中

转载 作者:行者123 更新时间:2023-12-03 17:23:13 25 4
gpt4 key购买 nike

我是一个 OS X 编程新手,我必须以不同的时间间隔从互联网上获取一堆 NSImage,并从中构建一个渐进式电影文件。例如,NSImage 的到达速率可以是从毫秒到最多 3 秒的间隔。

  1. 我想知道这是否是使用 QTKit 执行此操作的正确方法,以及如何计算帧速率,因为帧几乎是随机进入的。

  2. 我还想知道内存使用情况,它会在最后写入之前尝试将整个电影保留在内存中吗?

这是我从网上拼凑出来的代码:

-(void)startRecording  
{
NSDictionary *myDict = nil;
myDict = [NSDictionary dictionaryWithObjectsAndKeys:@"mp4v",
QTAddImageCodecType,
[NSNumber numberWithLong:codecHighQuality],
QTAddImageCodecQuality,
nil];

long long timeValue = 1;
long timeScale = 3;
QTTime duration = QTMakeTime(timeValue, timeScale);
QTMovie *mMovie =[[QTMovie alloc] initToWritableFile:@"tmpfps.tmp" error:NULL];

self.mMovie=mMovie;
self.duration=duration;
self.myDict=myDict;
}

-(void) addFrame:(NSImage*)imageFrame
{
[mMovie addImage:imageFrame
forDuration:self.duration
withAttributes:self.myDict];
}

-(void) stopRecording
{
myDict = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES]
forKey:QTMovieFlatten];
[self.mMovie writeToFile:@"my.mov" withAttributes:myDict];
self.mMovie=nil;
}

最佳答案

自从我使用 QTKit 以来已经有一段时间了,但在过去我编写了一个应用程序,它的功能与您所描述的非常相似(通过网络获取有点不规则的图像并将它们写入 QuickTime 电影) .

  1. 当调用-[QTMovie addImage:forDuration:withAttributes]时,duration参数是影片中图像的持续时间。 QTKit 将负责复制它以创建足够的电影帧来覆盖持续时间。简而言之,您不需要直接担心帧速率,只需担心每一帧的持续时间即可。

    您可以通过跟踪接收帧的时间和接收最后一帧的时间来计算帧的持续时间。本质上,当下一个图像出现时,您将每个图像添加到影片中,并使用两个图像的接收时间之间的时间差作为持续时间。当然,您必须做一些稍微不同的事情来解释最后一个图像,具体取决于录制的停止方式(由用户明确停止,通过超时等)。

  2. 我不太确定这个问题的答案,但我认为您可以假设这是一个您不需要担心的实现细节。当您使用可写文件初始化 QTMovie 对象时,您可能确实可以定期调用 -updateMovieFile 将当前内存中的更改刷新到磁盘。这需要进行测试,但与所有性能优化一样,在测试和分析表明存在问题之前,您不必担心它。

关于objective-c - 使用 QTKit 以随机帧速率将 NSImage 添加到电影中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14986044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com