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
}
})
}
@champion555
Copy link

it's code is very good.
but it don't work in ios 13.
do you have any solution to fix it in ios 13?
if you have solution, please contact to bestchampion555@gmail.com
Best Regards.

@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