如何在iOS上使用swift将HDR视频转换为SDR视频,而无需自定义库或ffmpeg



如何使用swift将HDR视频转换为SDR视频而无需自定义库或ffmpeg?

使用AVAssetExportSession,您可以轻松地将任何视频从HDR转换为SDR,而无需深入AVFoundation或VideoToolbox堆栈。

这里需要注意的是这只能使用非HEVC预设,例如这些H.264预设:

  • AVAssetExportPresetLowQuality
  • AVAssetExportPresetMediumQuality
  • AVAssetExportPresetHighestQuality
  • AVAssetExportPreset1920x1080或任何其他分辨率

AVAssetExportSession预设

不幸的是,苹果的文档并没有明确说明如何将HDR转换为SDR,除了在这次演讲中非常简要地说明:在您的应用程序中使用AVFoundation导出HDR媒体,大约在分钟09:30。

import AVFoundation
private func transcodeVideo(using inputVideoURL: URL, outputVideoURL: URL){

//-----HELPER
func reportProgressForAsyncExportSessionAndWait(exportSession: AVAssetExportSession, group: DispatchGroup) {
while exportSession.status == .waiting || exportSession.status == .exporting {
print("progress: (exportSession.progress)")
_ = group.wait(timeout: DispatchTime(uptimeNanoseconds: 1000 * NSEC_PER_MSEC))
}
print("TRANSCODE COMPLETED")
}
//-----

let dg = DispatchGroup()

let urlAsset:AVURLAsset = AVURLAsset(url: inputVideoURL)
if let exporter = AVAssetExportSession(asset: urlAsset, presetName: AVAssetExportPreset1920x1080){
exporter.outputURL = outputVideoURL
//exporter.outputFileType = .mp4
dg.enter()
exporter.exportAsynchronously {
dg.leave()
}

reportProgressForAsyncExportSessionAndWait(exportSession: exporter, group: dg)
}else{
// Error handling
}
}

最新更新