HarmonyOS(鸿蒙) 中,AVTranscoder 是一个强大的视频转码工具,它支持将视频从一种格式转换为另一种格式。转码通常用于确保视频能够在不同设备和平台之间兼容播放,或者进行格式压缩以节省存储空间。AVTranscoder 提供了高效、灵活的视频转码解决方案,可以广泛应用于多种场景,如视频播放、视频编辑、视频压缩等。

✅ 一、AVTranscoder 概述

AVTranscoder 是 HarmonyOS 提供的音视频转码工具,支持将视频文件从一种格式(如 .mp4.avi.mkv 等)转换为另一种格式。除了格式转换外,它还支持调整视频的编码参数,如分辨率、比特率、帧率等。这使得开发者可以根据需求灵活地进行视频格式转换和优化。


✅ 二、AVTranscoder 的核心功能

AVTranscoder 提供了以下几个核心功能:

  1. 视频格式转换
    • 支持将视频从一种格式转换为另一种格式,如 .mp4 转换为 .avi.mkv 转换为 .mp4 等。
  2. 视频编码参数调整
    • 支持调整视频的分辨率、比特率、帧率等编码参数,以便优化视频的存储和播放效果。
  3. 音频流转码
    • 除了视频流的转码,AVTranscoder 还支持音频流的转码,可以更改音频的编码格式、采样率、比特率等。
  4. 批量处理
    • AVTranscoder 支持批量转码,适合处理多个文件的转码任务。
  5. 硬件加速
    • 对于支持的设备,AVTranscoder 可以启用硬件加速,以提高转码效率和减少处理时间。

✅ 三、如何使用 AVTranscoder 进行视频转码

1. 引入依赖

首先,需要确保在项目中引入了相关的音视频处理库。通常,可以在 build.gradle 文件中添加如下依赖:

dependencies {
    implementation 'com.huawei.hms:avmedia:5.0.0'
}

2. 创建 AVTranscoder 实例

通过 AVTranscoder 类创建转码实例,并设置目标文件路径和转码参数。

import avmedia from '@ohos.avmedia';

// 创建 AVTranscoder 实例
let transcoder = avmedia.createAVTranscoder();

3. 配置转码参数

在进行视频转码之前,需要配置源视频文件路径、目标文件路径以及转码参数(如目标格式、分辨率等)。

const sourceFilePath = '/path/to/source/video.mp4';  // 源视频文件路径
const targetFilePath = '/path/to/output/video_2.avi';  // 目标文件路径

// 设置转码参数
const transcodingParams = {
  format: 'avi',        // 转码后的格式
  videoCodec: 'H264',   // 视频编码格式
  audioCodec: 'AAC',    // 音频编码格式
  resolution: '1280x720', // 视频分辨率
  bitrate: 2000000,      // 比特率
  frameRate: 30,         // 帧率
};

4. 执行转码操作

使用 AVTranscoder 进行转码操作,并获取转码进度和状态。

async function transcodeVideo() {
  try {
    const result = await transcoder.transcode(sourceFilePath, targetFilePath, transcodingParams);
    console.log('视频转码成功:', result);
    
    // 可选:获取转码进度
    transcoder.on('progress', (progress) => {
      console.log(`转码进度: ${progress}%`);
    });

    // 转码完成
    transcoder.on('complete', () => {
      console.log('转码完成,输出文件路径:', targetFilePath);
    });

    // 错误处理
    transcoder.on('error', (error) => {
      console.error('转码失败:', error);
    });

  } catch (error) {
    console.error('转码过程中发生错误:', error);
  }
}

5. 批量转码

如果需要批量转码多个文件,可以通过循环或异步操作来逐一处理多个视频文件。

async function batchTranscode(videos) {
  for (const video of videos) {
    const source = video.source;
    const target = video.target;
    
    try {
      const result = await transcoder.transcode(source, target, transcodingParams);
      console.log(`视频 ${source} 转码成功: ${result}`);
    } catch (error) {
      console.error(`视频 ${source} 转码失败: ${error}`);
    }
  }
}

const videoList = [
  { source: '/path/to/video1.mp4', target: '/path/to/output/video1.avi' },
  { source: '/path/to/video2.mp4', target: '/path/to/output/video2.avi' },
];

batchTranscode(videoList);

6. 处理转码进度和错误

在转码过程中,开发者可以监听转码进度和完成状态,同时也要注意处理错误。

  • progress:获取转码的实时进度。
  • complete:转码完成后的回调。
  • error:处理转码失败的情况。
transcoder.on('progress', (progress) => {
  console.log(`转码进度: ${progress}%`);
});

transcoder.on('complete', () => {
  console.log('转码完成');
});

transcoder.on('error', (error) => {
  console.error('转码错误:', error);
});


✅ 四、支持的视频转码参数

AVTranscoder 支持一系列的转码参数,可以帮助开发者精确控制转码输出的效果:

  1. format:设置输出文件的格式(如 .mp4.avi.mkv 等)。
  2. videoCodec:设置视频编码格式(如 H264HEVC 等)。
  3. audioCodec:设置音频编码格式(如 AACMP3 等)。
  4. resolution:设置视频分辨率(如 1920x10801280x720 等)。
  5. bitrate:设置视频的比特率(例如,2000000 表示 2 Mbps)。
  6. frameRate:设置视频的帧率(如 30 帧每秒)。
  7. audioBitrate:设置音频比特率。
  8. sampleRate:设置音频采样率。

✅ 五、应用场景

  1. 视频压缩与优化
    • 将高分辨率视频转码为较低分辨率,减少文件大小,适用于存储或流媒体传输。
  2. 格式转换
    • 将视频从一种格式转换为另一种格式(例如,从 .mkv 转为 .mp4),以便不同设备或平台的兼容。
  3. 视频编辑与处理
    • 在视频编辑应用中,开发者可以通过转码来调整视频的编码格式、分辨率等参数,以满足不同的播放需求。
  4. 流媒体应用
    • 将视频转码为适合网络传输的格式和比特率,以优化流媒体播放效果。

✅ 六、总结

特性描述
功能视频格式转换、编码参数调整、音频转码、批量转码等。
常见应用视频压缩、格式转换、视频编辑、流媒体应用等。
转码参数支持支持设置格式、编码格式、分辨率、比特率、帧率等多种参数。
进度与错误处理支持实时显示转码进度,提供错误回调和转码完成通知。

📌 一句话总结:

AVTranscoder 是 HarmonyOS 中用于视频转码的工具,支持视频格式转换、编码调整、音频转码等功能,广泛应用于视频压缩、格式转换和视频处理等场景。