mp4parser
简介
一个读取、写入操作音视频文件编辑的工具。
下载安装
ohpm install @ohos/mp4parser
OpenHarmony ohpm 环境配置等更多内容,请参考如何安装 OpenHarmony ohpm 包
使用说明
视频合成
import {MP4Parser} from "@ohos/mp4parser";import {ICallBack} from "@ohos/mp4parser";/*** 视频合成*/private videoMerge() {let getLocalDirPath = getContext(this).cacheDir+"/";let that = this;let filePathOne = getLocalDirPath + "qqq.mp4";let filePathTwo = getLocalDirPath + "www.mp4";let outMP4 = getLocalDirPath + "mergeout.mp4";var callBack: ICallBack = {callBackResult(code: number) {that.btnText = "视频合成点击执行"that.imageWidth = 0that.imageHeight = 0if (code == 0) {AlertDialog.show({ message: $r('app.string.ok') })}else {AlertDialog.show({ message: $r('app.string.failed') })}}}MP4Parser.videoMerge(filePathOne, filePathTwo, outMP4, callBack);}
视频裁剪
import {MP4Parser} from "@ohos/mp4parser";
import {ICallBack} from "@ohos/mp4parser";/*** 视频裁剪*/private videoClip() {let getLocalDirPath = getContext(this).cacheDir+"/";let that=this;let sTime = "00:00:10";let eTime = "00:00:20";let sourceMP4 = getLocalDirPath+"qqq.mp4";let outMP4 = getLocalDirPath+"clipout.mp4";var callBack: ICallBack = {callBackResult(code: number) {that.btnText="视频裁剪点击执行"that.imageWidth=0that.imageHeight=0if (code == 0) {AlertDialog.show({ message: $r('app.string.ok') })}else {AlertDialog.show({ message: $r('app.string.failed') })}}}MP4Parser.videoClip(sTime, eTime, sourceMP4, outMP4, callBack);}
音频合成
import {MP4Parser} from "@ohos/mp4parser";
import {ICallBack} from "@ohos/mp4parser";/*** 音频合成*/private audioMerge() {let getLocalDirPath = getContext(this).cacheDir+"/";let that = this;let filePathOne = getLocalDirPath + "a.mp3";let filePathTwo = getLocalDirPath + "b.mp3";let outPath = getLocalDirPath + "mergeout.mp3";var callBack: ICallBack = {callBackResult(code: number) {console.log("mp4parser-->audioMerge--->end");that.btnText = "音频合成点击执行"that.imageWidth = 0that.imageHeight = 0if (code == 0) {AlertDialog.show({ message: $r('app.string.ok') })}else {AlertDialog.show({ message: $r('app.string.failed') })}}}MP4Parser.audioMerge(filePathOne, filePathTwo, outPath, callBack);}
音频裁剪
import {MP4Parser} from "@ohos/mp4parser";
import {ICallBack} from "@ohos/mp4parser";/*** 音频裁剪*/private audioClip() {let getLocalDirPath = getContext(this).cacheDir+"/";let that = this;let sTime = "00:00:00";let eTime = "00:00:10";let sourcePath = getLocalDirPath + "a.mp3";let outPath = getLocalDirPath + "clipout.mp3";var callBack: ICallBack = {callBackResult(code: number) {that.btnText = "音频裁剪点击执行"that.imageWidth = 0that.imageHeight = 0if (code == 0) {AlertDialog.show({ message: $r('app.string.ok') })}else {AlertDialog.show({ message: $r('app.string.failed') })}}}MP4Parser.audioClip(sTime, eTime, sourcePath, outPath, callBack);}
视频批量合成
import {MP4Parser} from "@ohos/mp4parser";
import {ICallBack} from "@ohos/mp4parser";/*** 视频批量合成*/private videoMultMerge() {let that = this;let getLocalDirPath = getContext(this).cacheDir+"/";let filePath = getLocalDirPath + "mergeList.txt";let outMP4 = getLocalDirPath + "mergeout3.mp4";var callBack: ICallBack = {callBackResult(code: number) {that.btnText2 = "视频合成点击执行"that.imageWidth = 0that.imageHeight = 0if (code == 0) {AlertDialog.show({ message: $r('app.string.ok') })}else {AlertDialog.show({ message: $r('app.string.failed') })}}}MP4Parser.videoMultMerge(filePath, outMP4, callBack);}
音频批量合成
import {MP4Parser} from "@ohos/mp4parser";
import {ICallBack} from "@ohos/mp4parser";/*** 音频批量合成*/private audioMultMerge() {let getLocalDirPath = getContext(this).cacheDir+"/";let that = this;let filePath = getLocalDirPath + "mergewavList.txt";let outPath = getLocalDirPath + "mergeout3.wav";var callBack: ICallBack = {callBackResult(code: number) {that.btnText2 = "音频合成点击执行"that.imageWidth = 0that.imageHeight = 0if (code == 0) {AlertDialog.show({ message: $r('app.string.ok') })}else {AlertDialog.show({ message: $r('app.string.failed') })}}}MP4Parser.audioMultMerge(filePath, outPath, callBack);}
视频取帧
import {ICallBack, IFrameCallBack, MP4Parser} from "@ohos/mp4parser";private getFrameAtTimeRang() {let getLocalDirPath = getContext(this).cacheDir + "/";let sourceMP4 = getLocalDirPath + "www.mp4";let that = this;var callBack: ICallBack = {callBackResult(code: number) {if (code == 0) {var frameCallBack: IFrameCallBack = {async callBackResult(data: ArrayBuffer, timeUs: number) {const imageSource = image.createImageSource(data)that.imagePixelMap = await imageSource.createPixelMap()}}MP4Parser.getFrameAtTimeRang("1000000", "9000000", MP4Parser.OPTION_CLOSEST, frameCallBack);}}}MP4Parser.setDataSource(sourceMP4, callBack);}
调用FFmpeg指令
let context = AbilityDelegatorRegistry.getAbilityDelegator().getAppContext()let getLocalDirPath = context.cacheDir + "/";let sTime = "00:00:01";let eTime = "00:00:02";let sourceMP4 = getLocalDirPath + "testvideo.mp4";let outMP4 = getLocalDirPath + "out.mp4";let callBack: ICallBack = {callBackResult(code: number) {expect(0).assertEqual(code)done()}}MP4Parser.ffmpegCmd("ffmpeg -y -i " + sourceMP4 + " -ss " + sTime + " -c copy -to " + eTime + " " + outMP4, callBack)
接口说明
import {MP4Parser} from "@ohos/mp4parser";
- 视频合成
MP4Parser.videoMerge()
- 视频裁剪
MP4Parser.videoClip()
- 批量视频合成
MP4Parser.videoMultMerge()
- 音频合成
MP4Parser.audioMerge()
- 音频裁剪
MP4Parser.audioClip()
- 音频批量合成
MP4Parser.audioMultMerge()
- 设置视频源
MP4Parser.setDataSource()
- 视频取帧
MP4Parser.getFrameAtTimeRang()
- 停止取帧
MP4Parser.stopGetFrame()
- 调用FFmpeg指令
MP4Parser.ffmpegCmd()
约束与限制
在下述版本验证通过:
DevEco Studio版本: 4.0 Release(4.0.3.413), SDK: (4.0.10.3) DevEco Studio 版本: 4.1 Canary(4.1.3.317),OpenHarmony SDK: API11 (4.1.0.36) DevEco Studio: NEXT Beta1-5.0.3.806, SDK: API12 Release (5.0.0.66)
目录结构
|---- mp4parser
| |---- entry # 示例代码文件夹
| |---- library # mp4parser库文件夹
| |---- MP4Parser.ets # 对外接口
| |---- README.MD # 安装使用方法