Convert a Video to MP4 in Swift

Cloudmersive
2 min readJun 1, 2021

Thanks to its web-friendly design, the MP4 file is one of the most popular video formats. If you have a large video file that needs compressing or a video you want to make more accessible by adding subtitles, converting it to the MP4 format may be the solution you’re looking for. The following API will allow you to automatically convert a wide variety of video formats to MP4, with a maximum output file size of 50GB.

To perform the operation, simply add your target file to the following code:

import Foundation
#if canImport(FoundationNetworking)
import FoundationNetworking
#endif
var semaphore = DispatchSemaphore (value: 0)let parameters = [
[
"key": "inputFile",
"src": "/path/to/file",
"type": "file"
]] as [[String : Any]]
let boundary = "Boundary-\(UUID().uuidString)"
var body = ""
var error: Error? = nil
for param in parameters {
if param["disabled"] == nil {
let paramName = param["key"]!
body += "--\(boundary)\r\n"
body += "Content-Disposition:form-data; name=\"\(paramName)\""
if param["contentType"] != nil {
body += "\r\nContent-Type: \(param["contentType"] as! String)"
}
let paramType = param["type"] as! String
if paramType == "text" {
let paramValue = param["value"] as! String
body += "\r\n\r\n\(paramValue)\r\n"
} else {
let paramSrc = param["src"] as! String
let fileData = try NSData(contentsOfFile:paramSrc, options:[]) as Data
let fileContent = String(data: fileData, encoding: .utf8)!
body += "; filename=\"\(paramSrc)\"\r\n"
+ "Content-Type: \"content-type header\"\r\n\r\n\(fileContent)\r\n"
}
}
}
body += "--\(boundary)--\r\n";
let postData = body.data(using: .utf8)
var request = URLRequest(url: URL(string: "https://api.cloudmersive.com/video/convert/to/mp4")!,timeoutInterval: Double.infinity)
request.addValue("<string>", forHTTPHeaderField: "fileUrl")
request.addValue("<integer>", forHTTPHeaderField: "maxWidth")
request.addValue("<integer>", forHTTPHeaderField: "maxHeight")
request.addValue("<boolean>", forHTTPHeaderField: "preserveAspectRatio")
request.addValue("<integer>", forHTTPHeaderField: "frameRate")
request.addValue("<integer>", forHTTPHeaderField: "quality")
request.addValue("multipart/form-data", forHTTPHeaderField: "Content-Type")
request.addValue("YOUR-API-KEY-HERE", forHTTPHeaderField: "Apikey")
request.addValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
request.httpMethod = "POST"
request.httpBody = postData
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data else {
print(String(describing: error))
semaphore.signal()
return
}
print(String(data: data, encoding: .utf8)!)
semaphore.signal()
}
task.resume()
semaphore.wait()

This helpful tool uses 1 API call per 10 MB of file size, and 1 API call per additional minute of processing time over 5 minutes, up to a max of 25 min total processing time. If you need to obtain an API key, you may do so by registering for a free account on the Cloudmersive website; this will provide 800 calls/month across our entire library of APIs.

--

--

Cloudmersive

There’s an API for that. Cloudmersive is a leader in Highly Scalable Cloud APIs.