Swift-压缩视频文件

因此,目前我正在使用它来压缩视频:

func compressVideo(inputURL: NSURL, outputURL: NSURL, handler:(session: AVAssetExportSession)-> Void)

{

let urlAsset = AVURLAsset(URL: inputURL, options: nil)

let exportSession = AVAssetExportSession(asset: urlAsset, presetName: AVAssetExportPresetMediumQuality)

exportSession!.outputURL = outputURL

exportSession!.outputFileType = AVFileTypeQuickTimeMovie

exportSession!.shouldOptimizeForNetworkUse = true

exportSession!.exportAsynchronouslyWithCompletionHandler { () -> Void in

handler(session: exportSession!)

}

}

当我在2秒钟内录制视频时,大小为 ,当我在6秒钟内录制视频时,文件的大小为 。

有任何减小尺寸的提示吗?

回答:

此扩展专注于将其导出到较低质量的设置(在本例中为“中”),并使用mp4容器,而不是moviOS偏爱的容器。这可能会导致质量下降,但是您可以在尝试微调输出时尝试使用更高的输出设置和不同的格式。

extension PreviewVideoViewController: AVCaptureFileOutputRecordingDelegate {

func fileOutput(_ output: AVCaptureFileOutput,

didFinishRecordingTo outputFileURL: URL,

from connections: [AVCaptureConnection],

error: Error?) {

guard let data = try? Data(contentsOf: outputFileURL) else {

return

}

print("File size before compression: \(Double(data.count / 1048576)) mb")

let compressedURL = NSURL.fileURL(withPath: NSTemporaryDirectory() + UUID().uuidString + ".mp4")

compressVideo(inputURL: outputFileURL as URL,

outputURL: compressedURL) { exportSession in

guard let session = exportSession else {

return

}

switch session.status {

case .unknown:

break

case .waiting:

break

case .exporting:

break

case .completed:

guard let compressedData = try? Data(contentsOf: compressedURL) else {

return

}

print("File size after compression: \(Double(compressedData.count / 1048576)) mb")

case .failed:

break

case .cancelled:

break

}

}

}

func compressVideo(inputURL: URL,

outputURL: URL,

handler:@escaping (_ exportSession: AVAssetExportSession?) -> Void) {

let urlAsset = AVURLAsset(url: inputURL, options: nil)

guard let exportSession = AVAssetExportSession(asset: urlAsset,

presetName: AVAssetExportPresetMediumQuality) else {

handler(nil)

return

}

exportSession.outputURL = outputURL

exportSession.outputFileType = .mp4

exportSession.exportAsynchronously {

handler(exportSession)

}

}

}

以上是 Swift-压缩视频文件 的全部内容, 来源链接: utcz.com/qa/431426.html

回到顶部