# ImageToVideo **Repository Path**: ywcoder/ImageToVideo ## Basic Information - **Project Name**: ImageToVideo - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-11-06 - **Last Updated**: 2025-12-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 实现图片转视频功能 ## 项目简介 本示例基于AVCodec能力,实现了Buffer模式下的图片转视频功能。通过ImageSource将图片解码为PixelMap对象,传递PixelMap到Native侧,然后调用Native侧的编码器和封装器,完成从图片解码、视频编码、封装的过程。 ## 效果预览 ## 使用说明 1. 进入首页,点击"选择图片并合成视频"按钮,拉起相册模态界面。 2. 选择至少2张图片并点击 “确定”,系统开始合成视频,并显示加载弹窗。 3. 视频合成完成后,加载弹窗消失,视频自动播放。 ## 工程目录 ``` ├──entry/src/main/cpp // Native层 │ ├──capbilities // 能力接口和实现 │ │ ├──include // 能力接口 │ │ ├──Muxer.cpp // 封装实现 │ │ └──VideoEncoder.cpp // 视频编码实现 │ ├──common // 公共模块 │ │ ├──dfx // 日志 │ │ ├──SampleCallback.cpp // 编解码回调实现 │ │ ├──SampleCallback.h // 编解码回调定义 │ │ └──SampleInfo.h // 功能实现公共类 │ ├──transcoding // Native层合成视频的接口和实现 │ │ ├──include // 能力接口 │ │ ├──Transcoding.cpp // Native层合成视频的功能调用逻辑的实现 │ │ └──TranscodingNative.cpp // Native层合成视频的入口 │ ├──types // Native层暴露上来的接口 │ │ ├──index.d.ts // 接口定义 │ │ └──oh-package.json5 // 配置文件 │ └──CMakeLists.txt // 编译入口 ├──ets // UI层 │ ├──common // 公共模块 │ │ ├──utils // 共用的工具类 │ │ │ └──TimeUtils.ets // 获取当前时间 │ │ └──CommonConstants.ets // 参数常量 │ ├──entryability // 应用的入口 │ │ └──EntryAbility.ets │ ├──entrybackupability │ │ └──EntryBackupAbility.ets │ ├──model │ │ └──VideoDataModel.ets // 参数数据类 │ └──pages // EntryAbility包含的页面 │ └──Index.ets // 首页 ├──resources // 用于存放应用所用到的资源文件 │ ├──base // 该目录下的资源文件会被赋予唯一的ID │ │ ├──element // 用于存放字体和颜色 │ │ ├──media // 用于存放图片 │ │ └──profile // 应用入口首页 │ ├──en_US // 设备语言是美式英文时,优先匹配此目录下资源 │ └──zh_CN // 设备语言是简体中文时,优先匹配此目录下资源 └──module.json5 // 模块配置信息 ``` ## 具体实现 ### UI层 1. 使用PhotoViewPicker从图库中选择图片,当选择数量少于2个时,toast提示数量至少2个。 2. 遍历处理图片,使用createImageSource解码图片文件,使用imageSource.createPixelMap获取解码后的PixelMap,使用pixelMap.readPixelsToBuffer获取图片数据。 3. 将pixelMap保存至C侧的队列中。 ### Native层 1. C侧输入线程从PixelMap队列中取出待编码数据,拷贝到编码器输入队列中。 2. C侧输出线程从编码器输出队列中取出已编码的数据送入封装器。 3. 所有图片处理完成时,停止编码器和封装器。 4. 在编码输出线程中,将输出队列的bufferInfo进行出栈,并将对应的数据通过封装器写入到视频文件中。 ### UI层 1. 使用video组件播放视频。 2. 使用saveButton,将视频保存至图库。 ## 相关权限 - 无 ## 依赖 - 不涉及 ## 约束与限制 1. 本示例仅支持标准系统上运行,支持设备:华为手机。 2. HarmonyOS系统:HarmonyOS 6.0.0 Release及以上。 3. DevEco Studio版本:DevEco Studio 6.0.0 Release及以上。 4. HarmonyOS SDK版本:HarmonyOS 6.0.0 Release SDK及以上。