Swift mov视频格式转成其他的文件的格式

.mov格式是Apple公司开发的一种音频,视频的格式,由苹果系统的相机录制出来的视频都是以.mov格式进行存储的。最近要搞本地相册视频上传,如果要是以.mov格式上传的话,安卓端播放起来有可能会出现麻烦,所以就想在视频上传之前将其转换一下格式,统一的转换成.mp4格式,下面就是实现的代码:Swift .mov转.mp4的写法,记录下来跟大家分享,也为自己做笔记。

    //视频转换格式.mov 转成 .mp4
    //方法中sourceUrl参数为.mov的URL数据
    class func movFileTransformToMp4WithSourceUrl(sourceUrl: URL) {
        //以当前时间来为文件命名
        let date = Date()
        let formatter = DateFormatter.init()
        formatter.dateFormat = "yyyyMMddHHmmss"
        let fileName = formatter.string(from: date) + ".mp4"
        
        //保存址沙盒路径
        let docPath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)[0] as NSString
        let videoSandBoxPath = (docPath as String) + "/ablumVideo" + fileName
        
        print(videoSandBoxPath)
        
        //转码配置
        let avAsset = AVURLAsset.init(url: sourceUrl, options: nil)

        //取视频的时间并处理,用于上传
        let time = avAsset.duration
        let number = Float(CMTimeGetSeconds(time)) - Float(Int(CMTimeGetSeconds(time)))
        let totalSecond = number > 0.5 ? Int(CMTimeGetSeconds(time)) + 1 : Int(CMTimeGetSeconds(time))
        let photoId = String(totalSecond)
        
        
        let exportSession = AVAssetExportSession.init(asset: avAsset, presetName: AVAssetExportPresetMediumQuality)
        exportSession?.shouldOptimizeForNetworkUse = true
        exportSession?.outputURL = URL.init(fileURLWithPath: videoSandBoxPath)
        exportSession?.outputFileType = AVFileTypeMPEG4 //控制转码的格式
        exportSession?.exportAsynchronously(completionHandler: {
            if exportSession?.status == AVAssetExportSessionStatus.failed {
                print("转码失败")
            }
            if exportSession?.status == AVAssetExportSessionStatus.completed {
                print("转码成功")
                //转码成功后就可以通过dataurl获取视频的Data用于上传了
                let dataurl = URL.init(fileURLWithPath: videoSandBoxPath)
                 //上传视频的话是需要同时上传一张视频封面图片的,这里附带一个获取视频封面截图的方法,方法实现在下方
                let image = getVideoCropPicture(videoUrl: sourceUrl)
            }
        })
    }

获取视频封面截图

    class func getVideoCropPicture(videoUrl: URL) -> UIImage {
        let avAsset = AVAsset(url: videoUrl)
        let generator = AVAssetImageGenerator(asset: avAsset)
        generator.appliesPreferredTrackTransform = true
        let time = CMTimeMakeWithSeconds(0.0, 600)
        var actualTime: CMTime = CMTimeMake(0, 0)
        let imageP = try? generator.copyCGImage(at: time, actualTime: &actualTime)
        let image = UIImage.init(cgImage: imageP!)
        return image
    }

最后说一句废话 不要忘了要引入 AVFoundation 框架

import AVFoundation
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,262评论 4 61
  • 房产销售存在技巧与套路,深入分析可以解释与中介交互中不经意和曾认为理所当然的东西,对于销售来说,产品并不是全部.通...
    英勇意志的晨星阅读 270评论 0 0
  • --致我们回不去的青春 你远离的日子 我随风流浪了很久 昨日旅途依旧 风光旖旎 落下一地快乐时光 温暖还在掌心漫延...
    小青金阅读 328评论 5 8
  • “男女之间,真爱是什么感觉?有人说,必须是如痴如醉、要死要活,才可算数。这种激情状态当然很可贵也很美好,但一定是暂...
    汪汪的爱阅读 158评论 0 2
  • 这是一张“不用老师评讲的寒假作业试卷”。难一点的题目旁边,都贴着一个二维码,用爸爸妈妈的微信扫一扫,就跳出一个...
    教育学人阳建阅读 1,201评论 0 1