macos - AVAssetExportSession 不保留原始日期和时间 (macOS)
问题描述
我正在尝试将 H.264 转码为 m4v 格式的 HEVC 文件,但在获取 AVAssetExportSession 以保留原始文件的 CreateDate 时遇到问题。我尝试通过使用元数据值应用原始日期来强制该值,但这只会导致创建新的 QuickTime 标记 DateTimeOriginal。CreateDate、TrackCreateDate 和 MediaCreateDate 都采用当前日期和时间。
这是我正在使用的代码(在 macOS 操场上)。
import Cocoa
import AVFoundation
let videoAsset = AVURLAsset(url: URL(fileURLWithPath: "input.mp4"))
AVAssetExportSession.determineCompatibility(ofExportPreset: AVAssetExportPresetHEVCHighestQuality, with: videoAsset, outputFileType: AVFileType.m4v, completionHandler: { (isCompatible) in
if !isCompatible {
print("Format not compatible.")
return
}})
if (AVAssetExportSession.exportPresets(compatibleWith: videoAsset).contains(AVAssetExportPresetHEVCHighestQuality)) {
let exporter = AVAssetExportSession(asset: videoAsset, presetName: AVAssetExportPresetHEVCHighestQuality)
exporter?.outputURL = URL(fileURLWithPath: "output.mp4")
exporter?.outputFileType = AVFileType.m4v
exporter?.shouldOptimizeForNetworkUse = true
exporter?.canPerformMultiplePassesOverSourceMediaData = true
let creationDate = AVMutableMetadataItem()
creationDate.keySpace = videoAsset.creationDate?.keySpace
creationDate.key = videoAsset.creationDate?.key
creationDate.value = videoAsset.creationDate?.value
print(creationDate)
var newMetaData = videoAsset.metadata
newMetaData.append(creationDate)
print(newMetaData)
exporter?.metadata = newMetaData
exporter?.exportAsynchronously{() -> Void in
switch exporter!.status {
case .failed:
print("Export failed: \(String(describing: exporter?.error?.localizedDescription))")
case .cancelled:
print("Export canceled.")
case .completed:
print("Successful!")
default:
break
}
}
}
else {
print("Preset not compatible.")
}
时间通常如下所示(7 月日期为原始日期,9 月日期为当前日期):
---- File ----
FileModifyDate: 2018:09:24 23:51:12+08:00
FileAccessDate: 2018:09:24 23:53:22+08:00
FileInodeChangeDate: 2018:09:24 23:51:12+08:00
---- QuickTime ----
CreateDate: 2018:09:24 15:49:50
ModifyDate: 2018:09:24 15:51:12
TrackCreateDate: 2018:09:24 15:49:50
TrackModifyDate: 2018:09:24 15:51:12
MediaCreateDate: 2018:09:24 15:49:50
MediaModifyDate: 2018:09:24 15:51:12
DateTimeOriginal: 2018:07:16 19:59:03Z
解决方案
推荐阅读
- docker - Docker OutOfMemoryError 中的 Corda:Java 堆空间
- python - 加载生命线失败(结果显示:属性错误:模块'scipy.misc'没有属性'logsumexp')
- excel - 如何检查重复项、突出显示重复项以及计算单列中突出显示的重复项?
- html - 溢出-y:自动剪切左侧绝对定位的元素。在滚动上移动元素的解决方案
- android - 带有空参数的房间(SQLite)WHERE 子句不起作用
- windows - Windows CMD - 为什么延迟扩展被禁用时,感叹号前面的两个插入符号都被删除?
- c# - ConcurrentBag:System.ObjectDisposedException:无法访问已处置的对象
- data-binding - 在 SAP UI5 中使用双向绑定将记录添加到 V2 odata 模型的正确方法是什么?
- r - for循环中的变量名
- python - 我收到运行 django-admin 的错误消息。我已经安装了 django