我試圖在慢動作中播放電影並將其附加到現有電影中。這是我到目前爲止已經完成:QTKit慢動作播放電影
QTMovie *originalMovie = ...;
QTMovie *slowMotionMovie = ...;
[originalMovie insertSegmentOfMovie:slowMotionMovie timeRange:QTMakeTimeRange(QTZeroTime, [slowMotionMovie duration]) atTime:[originalMovie duration]];
這正確添加第二個電影的firts之一,但它不會在過程中的慢動作播放。我知道還有另一種方法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];
這正常播放慢動作視頻,但不保存慢動作中的第二個視頻的音頻。 I.E.第二個視頻是慢動作,但它的音頻不是!
更新2:
要清楚,如果我嘗試將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]
並指定一個新的位置,一切都按預期工作。只有當我嘗試覆蓋一個文件時,我會遇到各種問題。