首页 > 解决方案 > 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

标签: macosavfoundationavassetavassetexportsession

解决方案


推荐阅读