设置AVMutableComposition的帧时长

8

我正在使用来自苹果WWDC 2010示例包中的AVEditDemo项目,涉及IT技术,现在我想要改变导出视频的帧率。该视频是使用AVMutableComposition导出的,其中frameDuration被设置为:

videoComposition.frameDuration = CMTimeMake(1, 30); // 30 fps

有些原因导致将30改为25不会改变使用AVAssetExportSession导出的视频的帧率。有人知道为什么吗?

3个回答

8
客户端可以将sourceTrackIDForFrameTiming设置为kCMPersistentTrackID_Invalid,并将frameDuration设置为适当的值,以指定与源跟踪时间无关的最大输出帧速率。
videoComposition.sourceTrackIDForFrameTiming = kCMPersistentTrackID_Invalid;
videoComposition.frameDuration = CMTimeMake(1, 30);

1
你是如何发现将sourceTrackIDForFrameTiming设置为kCMPersistentTrackID_Invalid是一个选项的? - Drew

5
回复MonsieurDart的答案: 我没有尝试过AVEditDemo,但在iOS 8上我没有遇到这个问题,而且在iOS 7上也没有遇到过。
我正在使用AVMutableVideoComposition,并将其设置为AVAssetExportSession的videoComposition。
.
.
AVMutableVideoCompositionInstruction * instruction = [AVMutableVideoCompositionInstruction videoCompositionInstruction];
AVMutableVideoCompositionLayerInstruction *layerInstruction = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:videoTrack];
AVMutableVideoComposition *compositionInstruction = [AVMutableVideoComposition videoComposition];
compositionInstruction.instructions = @[instruction];
compositionInstruction.frameDuration = CMTimeMake(1, 30);
.
.    
AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:composition AVAssetExportPresetHighestQuality];
exporter.videoComposition = compositionInstruction;

视频轨道videoTrack是从资产中创建的AVMutableCompositionTrack


4

你知道这个问题是否已经被修复了吗? - smdvlpr
苹果公司没有任何消息... :-( - MonsieurDart
你在iOS 8或OS X Yosemite上测试过吗? - smdvlpr
不,如果有人这样做了,我会对答案感兴趣。 - MonsieurDart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接