Skip to content

Instantly share code, notes, and snippets.

@iAmrSalman
Last active June 12, 2023 19:10
Show Gist options
  • Save iAmrSalman/0f2624ef3f4982600f53a4c9f0201fb0 to your computer and use it in GitHub Desktop.
Save iAmrSalman/0f2624ef3f4982600f53a4c9f0201fb0 to your computer and use it in GitHub Desktop.
[Convert MOV to MP4] function to convert MOV to MP4 video format#swift #avkit #avasset
// Don't forget to import AVKit
func encodeVideo(at videoURL: URL, completionHandler: ((URL?, Error?) -> Void)?) {
let avAsset = AVURLAsset(url: videoURL, options: nil)
let startDate = Date()
//Create Export session
guard let exportSession = AVAssetExportSession(asset: avAsset, presetName: AVAssetExportPresetPassthrough) else {
completionHandler?(nil, nil)
return
}
//Creating temp path to save the converted video
let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] as URL
let filePath = documentsDirectory.appendingPathComponent("rendered-Video.mp4")
//Check if the file already exists then remove the previous file
if FileManager.default.fileExists(atPath: filePath.path) {
do {
try FileManager.default.removeItem(at: filePath)
} catch {
completionHandler?(nil, error)
}
}
exportSession.outputURL = filePath
exportSession.outputFileType = AVFileType.mp4
exportSession.shouldOptimizeForNetworkUse = true
let start = CMTimeMakeWithSeconds(0.0, 0)
let range = CMTimeRangeMake(start, avAsset.duration)
exportSession.timeRange = range
exportSession.exportAsynchronously(completionHandler: {() -> Void in
switch exportSession.status {
case .failed:
print(exportSession.error ?? "NO ERROR")
completionHandler?(nil, exportSession.error)
case .cancelled:
print("Export canceled")
completionHandler?(nil, nil)
case .completed:
//Video conversion finished
let endDate = Date()
let time = endDate.timeIntervalSince(startDate)
print(time)
print("Successful!")
print(exportSession.outputURL ?? "NO OUTPUT URL")
completionHandler?(exportSession.outputURL, nil)
default: break
}
})
}
@fukemy
Copy link

fukemy commented Sep 22, 2022

i got error with ios 16:

[Error: convert failed for Users/thehe/Library/Developer/CoreSimulator/Devices/A69D905C-4531-438C-9123-85D8EE81EC54/data/Containers/Data/Application/06CC0F2D-3D96-4734-8AAB-05816F14F6B7/tmp/com.vedax.vedaxlinkv2-Inbox/IMG_1668.mp4.MOV, error: The operation could not be completed]

@sachinthanapm
Copy link

Not working with latest iOS versions

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment