问题:
当我在UIImagePickerControllerallowEditing设置为YES的情况下录制视频,然后使用视频捕获后的trim-interface修剪视频时,我返回原始视频,而不是修剪过的视频.
建立:
我正在使用UIImagePickerController视频捕获,allowsEditing属性设置为YES.在delegate方法中didFinishPickingMediaWithInfo,我使用UIImagePickerControllerMediaURLinfo NSDictionary来获取路径URL.官方的Apple文档遗憾的是没有提到任何已修改的视频网址.
码:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
NSString *mediaType = [info objectForKey: UIImagePickerControllerMediaType];
if (CFStringCompare ((__bridge CFStringRef) mediaType, kUTTypeMovie, 0)
== kCFCompareEqualTo) {
self.tempVideoPath = [[info objectForKey:
UIImagePickerControllerMediaURL] path];
}
}
Run Code Online (Sandbox Code Playgroud)
我意识到这个问题类似于其他 的人在这里张贴在SO,但没有明确的答案,为什么它不工作或者为什么选择是即使在那里.如果它是这样的,我不明白为什么选择器有'allowsEditing'属性.
编辑:在我收到的信息词典中有以下键:
info: {
UIImagePickerControllerMediaType = "public.movie";
UIImagePickerControllerMediaURL = "file://localhost/private/var/mobile/Applications/F12E4608-FE5A-4EE3-B4E2-8F7D2508C4C8/tmp/capture-T0x21d810.tmp.wabFCC/capturedvideo.MOV";
"_UIImagePickerControllerVideoEditingEnd" = "5.498333333333333";
"_UIImagePickerControllerVideoEditingStart" = "4.273402690887451";
}
Run Code Online (Sandbox Code Playgroud)
这是否意味着我们必须自己修剪这些数据?那么Apple文档对此并不十分清楚.如果是这样,你知道一个好的做法吗?
我在做慢动作使用音频和视频AVFoundation(视频)和狄拉克(音频).作为其中的一部分,我将视频显示为用户将选择帧进行慢动作的帧.例如:10分钟视频的5-6分钟.
我必须通过我的应用程序本身的录像机向用户显示两种视频.2.来自画廊.
案例1:没问题 现在,我可以通过录像机录制视频,并将视频显示为框架供用户选择.一旦用户选择一些帧(例如:10分钟记录视频的5到6分钟),使用下面的代码,我能够找到所选帧或视频的开始/结束持续时间.
NSNumber *start = [info objectForKey:@"_UIImagePickerControllerVideoEditingStart"];
NSNumber *end = [info objectForKey:@"_UIImagePickerControllerVideoEditingEnd"];
int startMilliseconds = ([start doubleValue] * 1000);
int endMilliseconds = ([end doubleValue] * 1000);
Run Code Online (Sandbox Code Playgroud)
案例2: 在这种情况下,我可以从图库中选择视频,并以帧的形式显示给用户进行选择.但是,当我尝试查找视频的开始/结束持续时间时,就像我在案例1中使用相同的代码所做的那样,它不起作用.开始/结束时间我总是"0".
我要修剪视频文件。我只想从图库中选择视频并将其转换为15秒的视频。我正在使用Objective C的此 链接。它对我来说很好用,但我是Swift语言的初学者。谁能帮助我在Swift中转换此代码?
以下是我在Objective C中的代码:
-(void)cropVideo:(NSURL*)videoToTrimURL{
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:videoToTrimURL options:nil];
AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetHighestQuality];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *outputURL = paths[0];
NSFileManager *manager = [NSFileManager defaultManager];
[manager createDirectoryAtPath:outputURL withIntermediateDirectories:YES attributes:nil error:nil];
outputURL = [outputURL stringByAppendingPathComponent:@"output.mp4"];
// Remove Existing File
[manager removeItemAtPath:outputURL error:nil];
//
exportSession.outputURL = [NSURL fileURLWithPath:outputURL];
exportSession.shouldOptimizeForNetworkUse = YES;
exportSession.outputFileType = AVFileTypeQuickTimeMovie;
CMTime start = CMTimeMakeWithSeconds(1.0, 600); // you will modify time range here
CMTime duration = CMTimeMakeWithSeconds(19.0, 600); …Run Code Online (Sandbox Code Playgroud) 我在iPhone录制视频我希望获得录制的录制持续时间.有没有办法获得录制的视频持续时间.
这是我获取录制视频和路径的代码.
if ([type isEqualToString:(NSString *)kUTTypeVideo] || [type isEqualToString:(NSString *)kUTTypeMovie])
{
NSURL*videoURL = [info objectForKey:UIImagePickerControllerMediaURL];
videoData = [[NSData dataWithContentsOfURL:videoURL] retain];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSDateFormatter *dateFormat = [[[NSDateFormatter alloc] init] autorelease];
[dateFormat setDateFormat:@"dd-MM-yyyy_HH:mm:SS"];
NSDate *now = [[[NSDate alloc] init] autorelease];
NSDate* theDate = [dateFormat stringFromDate:now];
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"Default Album"];
if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath])
[[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:nil];
NSString*testUser=TitleTextField.text;
NSString *videopath= [[[NSString alloc] initWithString:[NSString stringWithFormat:@"%@/%@.mov",documentsDirectory,testUser]] autorelease];
BOOL success = [videoData …Run Code Online (Sandbox Code Playgroud)