7

Kayıtlı videoyu, belirli başlangıç ​​noktasından kullanıcı tarafından girilen veya seçilen belirli son noktaya kadar kırpmam gereken bir görev üzerinde çalışıyorum. Bunu nasıl yapacağım? Önceden UIVideoEditorController kullandım ama varsayılan görünümü kullanmak istemiyorum ve videoyu doğrudan kırpmak istiyorum.Bir videoyu belirli bir süre boyunca hızlı bir şekilde nasıl kırpacaksınız

let FinalUrlTosave = NSURL(string: "\(newURL)") 
    exportSession!.outputURL=FinalUrlTosave 
    exportSession!.shouldOptimizeForNetworkUse = true 
    // exportSession.outputFileType = AVFileTypeQuickTimeMovie 
    exportSession!.outputFileType = AVFileTypeQuickTimeMovie; 
    let start:CMTime 
    let duration:CMTime 
    var st = starttime.doubleValue 
    var ed = endTime.doubleValue 
    start = CMTimeMakeWithSeconds(st, 600) 
    duration = CMTimeMakeWithSeconds(ed, 600) 
    // let timeRangeForCurrentSlice = CMTimeRangeMake(start, duration) 
    let range = CMTimeRangeMake(start, duration); 
    exportSession!.timeRange = range 

     exportSession!.exportAsynchronouslyWithCompletionHandler({ 
     switch exportSession!.status{ 
     case AVAssetExportSessionStatus.Failed: 

      print("failed \(exportSession!.error)") 
     case AVAssetExportSessionStatus.Cancelled: 
      print("cancelled \(exportSession!.error)") 
     default: 
      print("complete....complete") 
      //    self.SaveVideoToPhotoLibrary(destinationURL1!) 

     } 
    }) 

Bunu kullanarak hedefime ulaşmaya çalışıyorum ama başarılı olmam.

Hata mesajı:

(Opsiyonel başarısız Hata Alan = NSURLErrorDomain Kodu = -1100 " İstenen URL bu sunucuda bulunamadı." Userınfo = {NSErrorFailingURLStringKey = file: /// var/mobile/Containers/Data/Application/E68D3BFD-6923-4EA6-9FB3-C020CE4AA9D4/Documents/moment/jGq_9AUFa47s2ZiiPP4x.mp4, NSErrorFailingURLKey = dosya: /// var/mobil/Konteynerler/Veri/Uygulama/E68D3BFD-6923-4EA6- 9FB3-C020CE4AA9D4/Documents/moment/jGq_9AUFa47s2ZiiPP4x.mp4, NSLocalizedDescription = İstenen URL bu sunucusunda bulunamadı., NSUnderlyingError = 0x1553c220 {Err veya Domain = N

Hata ikinci kez oluştu:

İsteğe bağlı başarısız (hata Alan = NSURLErrorDomain Kodu = -3000 " Dosya oluşturulamıyor" UserInfo = {NSUnderlyingError = 0x14e00000 {Hata Alan = NSOSStatusErrorDomain Kod = -12.124 "(boş)"}, NSLocalizedDescription = dosyası})

+0

nasıl başarısız oluyor? Hata nedir? – hola

+0

newURL parametresine bir url iletiyorum ve her zaman başarısız hata bloğuna gidiyor ... –

+0

Evet ama * hata iletisi nedir *? – Moritz

cevap

12

Ben bu yöntemi kullanarak benim çözüm buldu oluşturulamaz ve .... bir cazibe gibi

01 çalışır
func cropVideo(sourceURL1: NSURL, statTime:Float, endTime:Float) 
{ 
    let manager = NSFileManager.defaultManager() 

    guard let documentDirectory = try? manager.URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: true) else {return} 
    guard let mediaType = "mp4" as? String else {return} 
    guard let url = sourceURL1 as? NSURL else {return} 

    if mediaType == kUTTypeMovie as String || mediaType == "mp4" as String { 
     let asset = AVAsset(URL: url) 
     let length = Float(asset.duration.value)/Float(asset.duration.timescale) 
     print("video length: \(length) seconds") 

     let start = statTime 
     let end = endTime 

     var outputURL = documentDirectory.URLByAppendingPathComponent("output") 
     do { 
      try manager.createDirectoryAtURL(outputURL, withIntermediateDirectories: true, attributes: nil) 
      let name = Moment.newName() 
      outputURL = outputURL.URLByAppendingPathComponent("\(name).mp4") 
     }catch let error { 
      print(error) 
     } 

     //Remove existing file 
     _ = try? manager.removeItemAtURL(outputURL) 


     guard let exportSession = AVAssetExportSession(asset: asset, presetName: AVAssetExportPresetHighestQuality) else {return} 
     exportSession.outputURL = outputURL 
     exportSession.outputFileType = AVFileTypeMPEG4 

     let startTime = CMTime(seconds: Double(start ?? 0), preferredTimescale: 1000) 
     let endTime = CMTime(seconds: Double(end ?? length), preferredTimescale: 1000) 
     let timeRange = CMTimeRange(start: startTime, end: endTime) 

     exportSession.timeRange = timeRange 
     exportSession.exportAsynchronouslyWithCompletionHandler{ 
      switch exportSession.status { 
      case .Completed: 
       print("exported at \(outputURL)") 
       self.saveVideoTimeline(outputURL) 
      case .Failed: 
       print("failed \(exportSession.error)") 

      case .Cancelled: 
       print("cancelled \(exportSession.error)") 

      default: break 
      } 
     } 
    } 
} 
+1

Büyük cevap! @Parv Bhasker –

+0

Teşekkürler çalışıyor, ancak çıkış videosu ses yok. – user3306145

İlgili konular