gpt4 book ai didi

objective-c - QTKit 慢动作播放电影

转载 作者:行者123 更新时间:2023-12-03 16:48:00 25 4
gpt4 key购买 nike

我正在尝试以慢动作播放电影并将其附加到现有电影中。这是我到目前为止所做的:

QTMovie *originalMovie = ...;
QTMovie *slowMotionMovie = ...;

[originalMovie insertSegmentOfMovie:slowMotionMovie timeRange:QTMakeTimeRange(QTZeroTime, [slowMotionMovie duration]) atTime:[originalMovie duration]];

这正确地将第二部电影添加到第一部电影中,但它当然不会以慢动作播放。我知道还有另一种方法 insertSegmentOfMovie:fromRange:scaledToRange: 但我不知道如何在其中设置时间范围。

如有任何帮助,我们将不胜感激

更新:我可以使用以下代码添加慢动作:

[slowMotionMovie setAttribute:[NSNumber numberWithBool:YES] forKey:QTMovieEditableAttribute];
QTTime newDuration = QTMakeTime([slowMotionMovie duration].timeValue * 2, [slowMotionMovie duration].timeScale);
[slowMotionMovie scaleSegment:QTMakeTimeRange(QTZeroTime, [slowMotionMovie duration]) newDuration:newDuration];

这会正确地以慢动作播放视频,但不会以慢动作保存第二个视频的音频。 IE。第二个视频是慢动作,但它的音频不是!。

更新2:

需要明确的是,如果我尝试立即从我的 cocoa 应用程序中在 QuickTime 播放器中播放 OriginalVideo,第二个视频的音频会以慢动作播放。这只是保存的文件的音频不同步。

我发布完整的代码以防万一它有帮助:

- (void)captureOutput:(QTCaptureFileOutput *)captureOutput didFinishRecordingToOutputFileAtURL:(NSURL *)outputFileURL forConnections:(NSArray *)connections dueToError:(NSError *)error
{

QTMovie *originalMovie = [QTMovie movieWithURL:outputFileURL error:nil];
[originalMovie setAttribute:[NSNumber numberWithBool:YES] forKey:QTMovieEditableAttribute];

QTMovie *slowMotionMovie = [QTMovie movieWithURL:outputFileURL error:nil];
[slowMotionMovie setAttribute:[NSNumber numberWithBool:YES] forKey:QTMovieEditableAttribute];

// Scale the second video
QTTime newDuration = QTMakeTime([slowMotionMovie duration].timeValue * 2, [slowMotionMovie duration].timeScale);
[slowMotionMovie scaleSegment:QTMakeTimeRange(QTZeroTime, [slowMotionMovie duration]) newDuration:newDuration];

// Attach Slow motion video
[originalMovie insertSegmentOfMovie:slowMotionMovie timeRange:QTMakeTimeRange(QTZeroTime, [slowMotionMovie duration]) atTime:[originalMovie duration]];

// If I play originalMovie, both video and audio of slowMotionMovie are correct (i.e. in slow motion)

[originalMovie updateMovieFile];
// However, the video that's being saved here has its audio out of sync (i.e. not in slow motion)
}

更新3:

如果我使用 Quicktime 以外的程序(例如 vlc)打开最终文件,视频会在第一个视频结束时停止播放(运动应该开始的地方),但音频会继续播放直到结束。

更新4:

如果我使用[originalMovie writeToFile:withAttributes]并指定一个新位置,一切都会按预期工作。只有当我尝试覆盖文件时,我才会遇到各种问题。

最佳答案

好的,要以慢动作添加第二部电影,需要执行以下操作:

- (void)captureOutput:(QTCaptureFileOutput *)captureOutput didFinishRecordingToOutputFileAtURL:(NSURL *)outputFileURL forConnections:(NSArray *)connections dueToError:(NSError *)error
{

QTMovie *originalMovie = [QTMovie movieWithURL:outputFileURL error:nil];
[originalMovie setAttribute:[NSNumber numberWithBool:YES] forKey:QTMovieEditableAttribute];

QTMovie *slowMotionMovie = [QTMovie movieWithURL:outputFileURL error:nil];
[slowMotionMovie setAttribute:[NSNumber numberWithBool:YES] forKey:QTMovieEditableAttribute];

// Scale the second video
QTTime newDuration = QTMakeTime([slowMotionMovie duration].timeValue * 2, [slowMotionMovie duration].timeScale);
[slowMotionMovie scaleSegment:QTMakeTimeRange(QTZeroTime, [slowMotionMovie duration]) newDuration:newDuration];

// Attach Slow motion video
[originalMovie insertSegmentOfMovie:slowMotionMovie timeRange:QTMakeTimeRange(QTZeroTime, [slowMotionMovie duration]) atTime:[originalMovie duration]];

}

但是,如果您尝试覆盖 OriginalMovie,您可能会遇到各种错误,因此请使用 [originalMovie writeToFile] 将其保存在新位置。

关于objective-c - QTKit 慢动作播放电影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6341939/

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