Carré de recadrage et de fixation de la vidéo de l'orientation dans iOS
Je suis la capture de la vidéo à l'aide de UIImagePickerController, je peux découper la vidéo en utilisant le code suivant,
AVAsset *asset = [AVAsset assetWithURL:url];
//create an avassetrack with our asset
AVAssetTrack *clipVideoTrack = [[asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];
//create a video composition and preset some settings
AVMutableVideoComposition* videoComposition = [AVMutableVideoComposition videoComposition];
videoComposition.frameDuration = CMTimeMake(1, 30);
//here we are setting its render size to its height x height (Square)
videoComposition.renderSize = CGSizeMake(clipVideoTrack.naturalSize.height, clipVideoTrack.naturalSize.height);
//create a video instruction
AVMutableVideoCompositionInstruction *instruction = [AVMutableVideoCompositionInstruction videoCompositionInstruction];
instruction.timeRange = CMTimeRangeMake(kCMTimeZero, CMTimeMakeWithSeconds(60, 30));
AVMutableVideoCompositionLayerInstruction* transformer = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:clipVideoTrack];
//Here we shift the viewing square up to the TOP of the video so we only see the top
CGAffineTransform t1 = CGAffineTransformMakeTranslation(clipVideoTrack.naturalSize.height, -20);
//Use this code if you want the viewing square to be in the middle of the video
//CGAffineTransform t1 = CGAffineTransformMakeTranslation(clipVideoTrack.naturalSize.height, -(clipVideoTrack.naturalSize.width - clipVideoTrack.naturalSize.height) /2 );
//Make sure the square is portrait
CGAffineTransform t2 = CGAffineTransformRotate(t1, M_PI_2);
CGAffineTransform finalTransform = t2;
[transformer setTransform:finalTransform atTime:kCMTimeZero];
//add the transformer layer instructions, then add to video composition
instruction.layerInstructions = [NSArray arrayWithObject:transformer];
videoComposition.instructions = [NSArray arrayWithObject: instruction];
//Create an Export Path to store the cropped video
NSString *outputPath = [NSString stringWithFormat:@"%@%@", NSTemporaryDirectory(), @"video.mp4"];
NSURL *exportUrl = [NSURL fileURLWithPath:outputPath];
//Remove any prevouis videos at that path
[[NSFileManager defaultManager] removeItemAtURL:exportUrl error:nil];
//Export
AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetLowQuality] ;
exporter.videoComposition = videoComposition;
exporter.outputURL = exportUrl;
exporter.outputFileType = AVFileTypeMPEG4;
[exporter exportAsynchronouslyWithCompletionHandler:^
{
dispatch_async(dispatch_get_main_queue(), ^{
//Call when finished
[self exportDidFinish:exporter];
});
}];
Mais je ne sais pas comment corriger l'orientation de la question. Comme instagram et vine app , (j'.e) si j'ai fait une capture de la vidéo, même en mode paysage, il doit être en mode portrait et la nécessité de recadrer la vidéo sous forme de carrés. Pls me donner la solution... je suis aux prises avec ce problème...
- hey, je suis en utilisant le code dans la réponse et j'ai obtenu ma récolte de travail mais je vois cela bizarre contour vert sur le fond et le côté droit, avez-vous eu ce problème?
Vous devez vous connecter pour publier un commentaire.
Je suppose que le code source de venir à partir de ce lien ( projet de code inclus )
http://www.one-dreamer.com/cropping-video-square-like-vine-instagram-xcode/
Vous devez d'abord connaître le RÉEL la vidéo de l'orientation:
J'ai fait cette fonction de façon à ce qu'il revienne au droit orientation, comme si c'était une image
Ensuite, j'ai modifié la fonction de fixer le droit de l'orientation, le soutien à la culture de la région et pas seulement un carré, comme ceci:
Testé dans toutes les vidéos enregistrées à l'orientation (en Haut,en Bas,Paysage R, Paysage L) dans les deux normal et caméra frontale cas. Je l'ai testé sur l'iPhone 5S (iOS 8.1), l'iPhone 6 Plus (iOS 8.1)
Espère que cela aide
C'est mon code pour créer une vigne, comme la vidéo à partir d'une vidéo sur le disque. C'est écrit dans swift:
Je sais que cette question est vieux, mais certaines personnes peuvent encore se demander pourquoi certaines vidéos de la pellicule de zoom dans l'après ils sont rognées. J'ai été confronté à ce problème et s'aperçut que la cropRect j'ai été en utilisant comme cadre n'a pas été mis à l'échelle pour les différents rapports d'aspect de la vidéo. Pour résoudre ce problème, j'ai simplement ajouté le code ci-dessous pour recadrer tout en haut de la vidéo dans un carré. Si vous souhaitez modifier la position il suffit de changer la valeur de y, mais assurez-vous de mettre à l'échelle en fonction de la vidéo. Luca Iaco donné une très grande code pour commencer avec. J'apprécie!