Android 3分钟一个库搞定视频替换音频 视频合成 视频裁剪(高仿剪映)

本文探讨了三种音视频合成方法:使用MediaMux、mp4parser及FFmpeg。对比了它们在音视频同步、格式支持及合成质量上的表现。详细介绍了mp4parser在视频裁剪与合成的应用,包括实现步骤、遇到的问题及解决方案。

 

几种框架的比较:

 

 

方法一(Fail)

利用MediaMux实现音视频的合成。

效果:可以实现音视频的合并,利用Android原生的VideoView和SurfaceView播放正常,大部分的播放器也播放正常,但是,但是,在上传Youtube就会出现问题:音频不连续,分析主要是上传Youtube时会被再次的压缩,可能在压缩的过程中出现音频的帧率出现问题。

 

方法二

利用mp4parser实现

mp4parser是一个视频处理的开源工具箱,由于mp4parser里的方法都依靠工具箱里的一些内容,所以需要将这些内容打包成jar包,放到自己的工程里,才能对mp4parser的方法进行调用。

 

 

方法三

利用FFmpeg大法

FFmpeg 由于其丰富的 codec 插件,详细的文档说明,并且与其调试复杂量大的编解码代码(是的,用 MediaCodec 实现起来十分啰嗦和繁琐)还是不如调试一行 ffmpeg 命令来的简单。

 

实现步骤:
1.添加依赖
implementation 'com.googlecode.mp4parser:isoparser:1.1.21'
2.视频裁剪
/**
 * 裁剪视频
 * @param srcPath 需要裁剪的原视频路径
 * @param outPath 裁剪后的视频输出路径
 * @param startTimeMs 裁剪的起始时间
 * @param endTimeMs 裁剪的结束时间
 */
public static void clip(String srcPath, String outPath, double startTimeMs, double endTimeMs) throws IOException, IllegalArgumentException {
    if (TextUtils.isEmpty(srcPath) || TextUtils.isEmpty(outPath)) {
        throw new IllegalArgumentException("file path can't be null!!!!");
    }
    if (!(new File(srcPath).exists())) {
        throw new IllegalArgumentException("the source file is not exist!!!!");
    }
    if (startTimeMs >= endTimeMs) {
        throw new IllegalArgumentException("the startTimeMs is larger than endTimeMs!!!!");
    }
    Movie movie = MovieCreat
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值