uni-app android 视频压缩API 画质极低的bug

uni-app android 视频压缩API 画质极低的bug

开发环境 版本号 项目创建方式
Mac 11.6.5 HBuilderX

示例代码:

uni.compressVideo({  
    src:choosenVideoSrc, //视频本地路径  
    quality:'high',  
    success:function(compressRes)  
    {  

    }  
})
uni.compressVideo({  
    src:choosenVideoSrc, //视频本地路径  
    bitrate:3000,  
    fps:60,  
    resolution:1,  
    success:function(compressRes)  
    {  

    }  
})

操作步骤:

  • 使用示例代码参数压缩选中的视频

预期结果:

  • 正确反应参数的设置

实际结果:

  • 始终画质极低

bug描述:

android对选择的视频调用API进行压缩,无论使用quality:high或组合birate、fps、resolution参数,皆画质极低。

附件第1张为:相册中原视频画质,第2张为:压缩后的画质。 原视频1.5M,压缩后360K。

原视频画质

压缩后画质


更多关于uni-app android 视频压缩API 画质极低的bug的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

你换个其他手机 试试有没有这个问题。
android的 压缩 与设备硬件是有关系。 远航10

更多关于uni-app android 视频压缩API 画质极低的bug的实战教程也可以访问 https://www.itying.com/category-93-b0.html


试过小米11青春版、华为/荣耀两三千元的手机,各种视频,都是这种情况

回复 njtv: 那帮忙提供一个可以复现问题的示例。我试试

在使用 uni-app 进行 Android 视频压缩时,如果遇到画质极低的问题,可能是由于以下几个原因导致的。以下是一些可能的解决方案和优化建议:

1. 检查压缩参数

  • 码率(Bitrate):码率过低会导致视频画质下降。确保在压缩时设置了合适的码率。你可以尝试增加码率来提升画质。
  • 分辨率(Resolution):如果分辨率设置过低,视频画质也会受到影响。确保分辨率与原始视频保持一致或适当降低。
  • 帧率(Frame Rate):帧率过低会导致视频卡顿,但帧率过高可能会增加文件大小。确保帧率设置合理。

2. 使用合适的压缩库

  • FFmpeg:FFmpeg 是一个强大的多媒体处理工具,支持视频压缩、转码等功能。你可以通过 uni-app 调用 FFmpeg 进行视频压缩,并自定义压缩参数。
  • MediaCodec:Android 提供了 MediaCodec API,可以直接在 Android 设备上进行视频编码和解码。你可以通过原生插件的方式调用 MediaCodec 进行视频压缩。

3. 优化压缩算法

  • H.264/H.265 编码:H.264 和 H.265 是常用的视频编码格式,H.265 在相同画质下可以提供更小的文件大小。确保在压缩时使用合适的编码格式。
  • CRF(Constant Rate Factor):CRF 是 FFmpeg 中用于控制视频质量的一个参数,值越低画质越高。你可以尝试调整 CRF 值来优化画质。

4. 检查 uni-app 插件

  • 如果你使用的是第三方 uni-app 插件进行视频压缩,确保插件本身没有 bug 或限制。可以尝试更新插件或使用其他插件进行压缩。
  • 如果插件支持自定义参数,确保你传递的参数是正确的。

5. 调试和日志

  • 在压缩过程中,添加日志输出,检查压缩参数是否被正确应用。
  • 如果可能,使用调试工具(如 Android Studio)查看压缩过程中的性能和数据流。

6. 原生开发

  • 如果 uni-app 提供的 API 无法满足需求,可以考虑通过原生开发(Java/Kotlin)实现视频压缩功能,并通过 uni-app 的插件机制进行调用。

7. 测试不同设备

  • 在某些设备上,硬件编码器可能表现不佳,导致画质下降。尝试在不同设备上进行测试,确保问题不是设备特定的。

示例代码(使用 FFmpeg 进行视频压缩)

// 假设你已经集成了 FFmpeg
const ffmpeg = require('ffmpeg.js');

function compressVideo(inputPath, outputPath, bitrate, resolution) {
    const command = `-i ${inputPath} -b:v ${bitrate} -s ${resolution} -c:v libx264 -crf 23 -preset medium ${outputPath}`;
    ffmpeg.run(command, (err, output) => {
        if (err) {
            console.error('压缩失败:', err);
        } else {
            console.log('压缩成功:', output);
        }
    });
}

// 调用压缩函数
compressVideo('input.mp4', 'output.mp4', '1000k', '1280x720');
回到顶部