HarmonyOS鸿蒙Next中如何给AI生成的视频添加标识
HarmonyOS鸿蒙Next中如何给AI生成的视频添加标识 【问题描述】:AI处理完视频后,如何添加“AI生成”的水印在视频的在右下角
【问题现象】:如何实现图片中的效果

【版本信息】:6.0.2
【复现代码】:不涉及
【尝试解决方案】:不涉及
更多关于HarmonyOS鸿蒙Next中如何给AI生成的视频添加标识的实战教程也可以访问 https://www.itying.com/category-93-b0.html
开发者你好,
视频添加水印请参考如下方案
更多关于HarmonyOS鸿蒙Next中如何给AI生成的视频添加标识的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
好建议
没有吧
是的
告诉AI,生成视频的时候,在右下角添加【AI生成】水印
在HarmonyOS鸿蒙Next中,给AI生成的视频添加标识,可以使用ArkUI的媒体处理能力。通过VideoComponent结合Canvas或自定义组件,可以在视频上层叠加文本、图片等标识。利用VideoController控制播放,并通过布局属性调整标识位置。标识内容需通过UI组件实时渲染到视频画面上。
在HarmonyOS Next中,为AI生成的视频添加“AI生成”标识,核心是使用VideoComposer和ImageSource进行视频与图片(水印)的合成。以下是实现步骤和关键代码:
1. 核心思路 将原始视频与一个包含“AI生成”文字的图片(或直接绘制文字)作为新的视频轨道进行叠加合成,并指定水印的位置(如右下角)。
2. 实现步骤与代码示例
-
步骤1:准备资源 准备原始视频文件路径和作为水印的图片(如PNG格式,背景透明)或直接使用Canvas绘制文字生成
PixelMap。// 假设已有原始视频URI和水印图片URI let originalVideoUri: string = 'file://.../input.mp4'; let watermarkImageUri: string = 'file://.../watermark.png'; // 或通过Canvas生成PixelMap -
步骤2:创建视频合成器(VideoComposer)并配置轨道 创建
VideoComposer实例,添加原始视频轨道和水印图片轨道。通过Layout设置水印位置和大小。import { videoComposer } from '@kit.MultimediaKit'; import { image } from '@kit.ImageKit'; import { BusinessError } from '@kit.BasicServicesKit'; async function addWatermarkToVideo() { // 创建VideoComposer实例 let composer: videoComposer.VideoComposer = videoComposer.createVideoComposer(); // 1. 添加原始视频轨道 let videoSource: videoComposer.VideoSource = videoComposer.createVideoSource(originalVideoUri); let videoTrack: videoComposer.VideoTrack = composer.addVideoTrack(); videoTrack.addSource(videoSource); // 2. 添加水印图片轨道 let imageSource: videoComposer.ImageSource = videoComposer.createImageSource(watermarkImageUri); let imageTrack: videoComposer.VideoTrack = composer.addVideoTrack(); // 配置水印布局:置于右下角,大小为视频宽度的1/5(示例) let layout: videoComposer.Layout = { // 位置:右下角。假设视频分辨率是1920x1080,水印宽w、高h。 // x = 视频宽度 - 水印宽度 - 右边距(如20像素) // y = 视频高度 - 水印高度 - 下边距(如20像素) // 这里使用相对比例更通用,假设目标水印宽度为视频宽度的0.2,高度按比例缩放。 // 实际计算可能需要先获取视频和水印的尺寸信息。 x: '80%', // 水平起始位置在80%处,可根据水印宽度调整 y: '80%', // 垂直起始位置在80%处,可根据水印高度调整 width: '15%', // 水印宽度为视频宽度的15% height: 'auto' // 高度按图片比例自动缩放 }; imageSource.setLayout(layout); imageTrack.addSource(imageSource); // 步骤3:设置输出路径并开始合成 let outputUri: string = 'file://.../output_with_watermark.mp4'; composer.setOutputUri(outputUri); try { await composer.compose(); console.info('视频合成完成,输出路径: ' + outputUri); } catch (error) { let err: BusinessError = error as BusinessError; console.error(`合成失败,错误码: ${err.code}, 错误信息: ${err.message}`); } // 步骤4:释放资源 videoSource.release(); imageSource.release(); composer.release(); } -
步骤3:动态生成水印图片(可选) 如果不想预存水印图片文件,可以使用
Canvas绘制文字并生成PixelMap,然后创建ImageSource。import { drawing } from '@kit.ArkGraphics2D'; async function createTextWatermarkPixelMap(text: string): Promise<image.PixelMap | undefined> { // 创建Canvas渲染上下文 let canvas: drawing.CanvasRenderingContext2D = ...; // 初始化Canvas,设置宽高 // 绘制文字(例如:白色半透明、字体大小等) canvas.fillStyle = 'rgba(255, 255, 255, 0.7)'; canvas.font = '36px sans-serif'; canvas.fillText(text, 10, 50); // 文字位置 // 从Canvas获取PixelMap let pixelMap: image.PixelMap | undefined = await canvas.getPixelMap(); return pixelMap; } // 使用生成的PixelMap创建ImageSource let watermarkPixelMap: image.PixelMap | undefined = await createTextWatermarkPixelMap('AI生成'); if (watermarkPixelMap) { let imageSource: videoComposer.ImageSource = videoComposer.createImageSource(watermarkPixelMap); // ... 后续添加轨道和布局配置同上 }
3. 关键点说明
- 布局计算:水印位置(
x,y)和大小(width,height)可以使用像素值或百分比字符串。右下角定位通常需要根据视频分辨率和水印尺寸动态计算,使用百分比更便于适配不同视频。 - 层级关系:后添加的轨道(如图片轨道)会叠加在先添加的轨道(如视频轨道)之上。
- 性能与格式:合成操作可能耗时,建议在异步任务中执行。输出视频的编码格式、分辨率等参数可使用
VideoComposer的其他接口(如setEncoderConfig)进行配置。 - 权限:确保应用已申请必要的文件读写权限(
ohos.permission.READ_MEDIA,ohos.permission.WRITE_MEDIA)。
通过以上步骤,即可在AI处理后的视频上合成一个位于右下角的“AI生成”标识。具体坐标和尺寸可根据实际视觉效果调整Layout参数。

