Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Setting AVMutableComposition's frameDuration

I'm playing with the AVEditDemo project, from Apple's WWDC 2010 sample pack, and I'm trying to change the frame rate of the exported video. The video is exported using an AVMutableComposition on which the frameDuration is set like that:

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

For some reason, changing the 30 to 25 does not change the framerate of the video exported with the AVAssetExportSession. Does anyone have an idea why?

like image 935
MonsieurDart Avatar asked Mar 15 '12 17:03

MonsieurDart


3 Answers

replying MonsieurDart's answer: I didn't try the AVEditDemo but I'm not having this issue on iOS 8, nor did I have it on iOS 7.

I'm using a AVMutableVideoComposition and setting it as the AVAssetExportSession's 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;

where the videoTrack is a AVMutableCompositionTrack created from the asset

like image 144
Oferm Avatar answered Oct 23 '22 17:10

Oferm


The client can set sourceTrackIDForFrameTiming to kCMPersistentTrackID_Invalid and frameDuration to an appropriate value in order to specify the maximum output frame rate independent of the source track timing.

videoComposition.sourceTrackIDForFrameTiming = kCMPersistentTrackID_Invalid;
videoComposition.frameDuration = CMTimeMake(1, 30);
like image 5
yong wei Avatar answered Oct 23 '22 16:10

yong wei


It seems that the AVAssetExportSession preset takes precedence over the AVVideoComposition frameDuration. I've opened a bug report:

http://openradar.appspot.com/11127156

like image 4
MonsieurDart Avatar answered Oct 23 '22 18:10

MonsieurDart