Я пытаюсь воспроизвести фильм в замедленном режиме и прикрепить его к существующему фильму. Вот что я сделал до сих пор:
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];
Это корректно воспроизводит видео в замедленном режиме, но не сохраняет звук второго видео в замедленном режиме. т.е. второе видео в замедленном режиме, а звук нет!.
ОБНОВЛЕНИЕ 2:
Чтобы было ясно, если я попытаюсь воспроизвести originalVideo в проигрывателе quicktime сразу из моего приложения какао, звук второго видео будет воспроизводиться в замедленном темпе. Это только сохраненный файл, звук которого не синхронизирован.
Я отправляю полный код на всякий случай, если это поможет:
- (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]
и указываю новое местоположение, все работает как положено. Только когда я пытаюсь перезаписать файл, я сталкиваюсь со всевозможными проблемами.