视频 裁剪 合并 ios

简介:
声明:此文我是根据
http://www.raywenderlich.com/13418/how-to-play-record-edit-videos-in-ios?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+RayWenderlich+(Ray+Wenderlich+|+iPhone+Developer+and+Gamer)
这个编写出来的。
原文是合并视频.而我的项目要求是裁剪视频,所以我跟他的代码实现了自己的需求而已。

目前这块代码应该是能给视频里面添加logo之类的东西。但是我目前没实现,网上的代码我也暂时没找到。

- (void) loadVideoByPath:(NSString*) v_strVideoPath andSavePath:(NSString*) v_strSavePath {
     NSLog(@"nv_strVideoPath = %@ nv_strSavePath = %@n ",v_strVideoPath,v_strSavePath);
       AVAsset *avAsset = [AVAsset assetWithURL:[NSURL fileURLWithPath:v_strVideoPath]];
       CMTime assetTime = [avAsset duration];
       Float64 duration = CMTimeGetSeconds(assetTime);
       NSLog(@"视频时长 %fn",duration);
     
       AVMutableComposition *avMutableComposition = [AVMutableComposition composition];
     
       AVMutableCompositionTrac k *avMutableCompositionTrac k = [avMutableComposition addMutableTrackWithMedia Type:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
     
       AVAssetTrack *avAssetTrack = [[avAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];
     
       NSError *error = nil;
       // 这块是裁剪,rangtime .前面的是开始时间,后面是裁剪多长 (我这裁剪的是从第二秒开始裁剪,裁剪2.55秒时长.)
       [avMutableCompositionTrac k insertTimeRange:CMTimeRangeMake(CMTimeMakeWithSeconds(2.0f, 30), CMTimeMakeWithSeconds(2.55f, 30))
                                                                    ofTrack:avAssetTrack
                                                                      atTime:kCMTimeZero
                                                                        error:&error];
     
       AVMutableVideoCompositio n *avMutableVideoCompositio n = [[AVMutableVideoCompositio n videoComposition] retain];
// 这个视频大小可以由你自己设置。比如源视频640*480.而你这320*480.最后出来的是320*480这么大的,640多出来的部分就没有了。并非是把图片压缩成那么大了。
       avMutableVideoCompositio n.renderSize = CGSizeMake(320.0f, 480.0f);
       avMutableVideoCompositio n.frameDuration = CMTimeMake(1, 30); 
// 这句话暂时不用理会,我正在看是否能添加logo而已。 
       [self addDataToVideoByTool:avMutableVideoCompositio n.animationTool];
     
       AVMutableVideoCompositio nInstruction *avMutableVideoCompositio nInstruction = [AVMutableVideoCompositio nInstruction videoCompositionInstruct ion];
     
       [avMutableVideoCompositio nInstruction setTimeRange:CMTimeRangeMake(kCMTimeZero, [avMutableComposition duration])];
     
       AVMutableVideoCompositio nLayerInstruction *avMutableVideoCompositio nLayerInstruction = [AVMutableVideoCompositio nLayerInstruction videoCompositionLayerIns tructionWithAssetTrack:avAssetTrack];
       [avMutableVideoCompositio nLayerInstruction setTransform:avAssetTrack.preferredTransform atTime:kCMTimeZero];

       avMutableVideoCompositio nInstruction.layerInstructions = [NSArray arrayWithObject:avMutableVideoCompositio nLayerInstruction];
            

       avMutableVideoCompositio n.instructions = [NSArray arrayWithObject:avMutableVideoCompositio nInstruction];

     
       NSFileManager *fm = [[NSFileManager alloc] init];
       if ([fm fileExistsAtPath:v_strSavePath]) {
              NSLog(@"video is have. then delete that");
              if ([fm removeItemAtPath:v_strSavePath error:&error]) {
                     NSLog(@"delete is ok");
              }else {
                     NSLog(@"delete is no error = %@",error.description);
              }
       }
       [fm release];
     
       AVAssetExportSession *avAssetExportSession = [[AVAssetExportSession alloc] initWithAsset:avMutableComposition presetName:AVAssetExportPreset640x4 80];
       [avAssetExportSession setVideoComposition:avMutableVideoCompositio n];
       [avAssetExportSession setOutputURL:[NSURL fileURLWithPath:v_strSavePath]];
       [avAssetExportSession setOutputFileType:AVFileTypeQuickTimeMovie ];
       [avAssetExportSession setShouldOptimizeForNetw orkUse:YES];
       [avAssetExportSession exportAsynchronouslyWith CompletionHandler:^(void){
              switch (avAssetExportSession.status) {
                     case AVAssetExportSessionStat usFailed:
                            NSLog(@"exporting failed %@",[avAssetExportSession error]);
                            break;
                     case AVAssetExportSessionStat usCompleted:
                            NSLog(@"exporting completed");
                            // 想做什么事情在这个做
                            [self cutImageByVideoPath:v_strSavePath];
                            break;
                     case AVAssetExportSessionStat usCancelled:
                            NSLog(@"export cancelled");
                            break;
              }
       }];
       if (avAssetExportSession.status != AVAssetExportSessionStat usCompleted){
              NSLog(@"Retry export");
       }
       [avMutableVideoCompositio n release];
         [avAssetExportSession release];
}









本文转自 卓行天下  51CTO博客,原文链接:http://blog.51cto.com/9951038/1772553,如需转载请自行联系原作者
目录
相关文章
|
6月前
|
图形学 Android开发 iOS开发
穿越数字洪流,揭秘Unity3d中的视频魔法!Windows、Android和iOS如何征服RTSP与RTMP的终极指南!
【8月更文挑战第15天】在数字媒体的海洋中,实时视频流是连接世界的桥梁。对于那些渴望在Unity3d中搭建这座桥梁的开发者来说,本文将揭示如何在Windows、Android和iOS平台上征服RTSP与RTMP的秘密。我们将深入探讨这两种协议的特性,以及在不同平台上实现流畅播放的技巧。无论你是追求稳定性的RTSP拥趸,还是低延迟的RTMP忠实粉丝,这里都有你需要的答案。让我们一起穿越数字洪流,探索Unity3d中视频魔法的世界吧!
117 2
|
视频直播 API iOS开发
微信团队分享:详解iOS版微信视频号直播中因帧率异常导致的功耗问题
功耗优化一直是 app 性能优化中让人头疼的问题,尤其是在直播这种用户观看时长特别久的场景。怎样能在不影响主体验的前提下,进一步优化微信iOS端视频号直播的功耗占用,本文给出了一个不太一样的答案。
197 0
|
JavaScript Android开发 iOS开发
layui框架实战案例(6):上传图片和视频自动调用IOS或安卓系统的摄像头功能
layui框架实战案例(6):上传图片和视频自动调用IOS或安卓系统的摄像头功能
570 0
|
iOS开发
iOS MachineLearning 系列(6)—— 视频中的物体轨迹分析
轨迹分析是比物体追踪更上层的一种应用。Vision框架中提供了检测视频中多个物体的运动轨迹等能力,在健身,体育类应用中非常有用。
168 0
|
算法 API vr&ar
iOS MachineLearning 系列(5)—— 视频中的物体运动追踪
本系列的前面几篇文章中,我们将静态图片分析相关的API做了详尽的介绍。在Vision框架中,还提供了视频中物体追踪的能力。 仔细想来,其实视频的分析和静态图片的分析本质上并无太大的区别,我们可以将视频拆解成图片帧,之后再对图片进行静态分析。将所有图片帧的分析结果反馈到视频上,即实现了对视频的分析能力。 视频中物体运动的跟踪常在一些AR游戏中应用,这些现实增强类的应用常常需要实时追踪显示中的物体。
218 0
|
iOS开发
iOS视频镜像处理
在网上找了很多资料和dome都没有处理镜像的,于是就自己研究了下。在官方说明文档中找到了
356 0
iOS视频镜像处理
|
Web App开发 编解码 Android开发
iOS 视频转码处理
iOS 视频转码处理
|
编解码 iOS开发
iOS拍摄视频,压缩并上传服务器
iOS拍摄视频,压缩并上传服务器
504 0
|
存储 iOS开发
iOS wkwebview嵌入优酷视频,显示“请允许cookie存储”解决方法
iOS wkwebview嵌入优酷视频,显示“请允许cookie存储”解决方法
630 0
|
iOS开发
iOS 只有视频横屏解决方法
iOS 只有视频横屏解决方法
232 0

热门文章

最新文章

  • 1
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 2
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 3
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
  • 4
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 5
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 6
    iOS8 中无需开源库的内置功能一览
  • 7
    iOS7应用开发7:自定义视图、手势操作
  • 8
    IOS小工具以及精彩的博客
  • 9
    Facebook SDK(iOS)初学讲解
  • 10
    iOS - Swift NSPoint 位置
  • 1
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    14
  • 2
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    28
  • 3
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    34
  • 4
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    29
  • 5
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    23
  • 6
    uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
    143
  • 7
    【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
    235
  • 8
    app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
    90
  • 9
    深入探索iOS开发中的SwiftUI框架
    145
  • 10
    ios样式开关按钮jQuery插件
    60