Swift 3:如何在视频上添加水印 AVVideoCompositionCoreAnimationTool iOS 10 问题

swiftIOSIDEO

1个回答

写回答

Zxcdmn

2025-06-22 14:40

+ 关注

Swift
Swift

Swift 3中,我们可以使用AVVIDEOCompositionCoreAnimationTool来在视频上添加水印。这个功能在IOS 10中引入,为我们提供了一个简便的方法来实现这个效果。

要添加水印,我们需要创建一个CALayer的实例,并将其作为图层附加到视频中。我们可以使用CALayer的属性来设置水印的位置、大小、颜色和透明度等。

以下是一个简单的示例代码,展示了如何使用AVVIDEOCompositionCoreAnimationTool来在视频上添加水印:

Swift

import AVFoundation

func addWatermarkToVIDEO(inputURL: URL, outputURL: URL, watermarkText: String) {

// 创建一个AVAsset实例

let asset = AVAsset(url: inputURL)

// 创建一个AVMutableVIDEOComposition实例并设置视频尺寸和帧率

let vIDEOComposition = AVMutableVIDEOComposition()

vIDEOComposition.renderSize = CGSize(width: asset.tracks(withMediaType: .vIDEO).first?.naturalSize.width ?? 0, height: asset.tracks(withMediaType: .vIDEO).first?.naturalSize.height ?? 0)

vIDEOComposition.frameDuration = CMTime(value: 1, timescale: 30)

// 创建一个CALayer实例来表示水印

let watermarkLayer = CALayer()

watermarkLayer.contents = watermarkText.data(using: .utf8)

watermarkLayer.frame = CGRect(x: 10, y: 10, width: 200, height: 50)

watermarkLayer.opacity = 0.8

// 创建一个AVMutableVIDEOCompositionCoreAnimationTool实例,并将水印图层添加到其中

let animationTool = AVVIDEOCompositionCoreAnimationTool(postProcessingAsVIDEOLayer: vIDEOComposition, in: watermarkLayer)

// 创建一个AVAssetExportSession实例,并设置输出URL、输出格式和视频组合

guard let exportSession = AVAssetExportSession(asset: asset, presetName: AVAssetExportPresetHighestQuality) else { return }

exportSession.outputURL = outputURL

exportSession.outputFileType = .mp4

exportSession.vIDEOComposition = vIDEOComposition

exportSession.shouldOptimizeForNetworkUse = true

exportSession.vIDEOComposition?.animationTool = animationTool

// 导出视频

exportSession.exportAsynchronously {

switch exportSession.status {

case .completed:

print("视频添加水印成功!")

case .fAIled:

print("视频添加水印失败:\(exportSession.error?.localizedDescription ?? "")")

case .cancelled:

print("视频添加水印取消")

default:

break

}

}

}

// 使用示例

let inputURL = URL(fileURLWithPath: "inputVIDEO.mov")

let outputURL = URL(fileURLWithPath: "outputVIDEO.mov")

let watermarkText = "Watermark"

addWatermarkToVIDEO(inputURL: inputURL, outputURL: outputURL, watermarkText: watermarkText)

案例代码

上述代码演示了如何使用AVVIDEOCompositionCoreAnimationTool在视频上添加水印。首先,我们创建了一个AVAsset实例,然后设置了一个AVMutableVIDEOComposition实例,用于定义视频的尺寸和帧率。接下来,我们创建了一个CALayer实例,用于表示水印,并设置了其位置、大小、颜色和透明度等属性。然后,我们创建了一个AVMutableVIDEOCompositionCoreAnimationTool实例,并将水印图层添加到其中。最后,我们使用AVAssetExportSession实例将带有水印的视频导出到指定的输出URL。

通过使用AVVIDEOCompositionCoreAnimationTool,我们可以轻松地在视频上添加水印。这为我们提供了一个简单而强大的方法来定制和美化我们的视频内容。无论是为了商业宣传还是个人创作,添加水印都可以帮助我们在视频中增加品牌标识或个性化元素,提高视频的专业性和吸引力。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号