android ffmpeg视频压缩和格式转换记录

app build.gradle中引入

// RxFFmpeg 极速版 (预计占用 4M 左右空间),主要移除了一些不常用的编解码器
// 三方库github链接:https://github.com/microshow/RxFFmpeg
implementation 'com.github.microshow:RxFFmpeg:4.9.0-lite'

app build.gradle下

android {
    defaultConfig {
        ndk {
            abiFilters "armeabi-v7a"// , "arm64-v8a"// , "x86" // 选择自己需要的abi类型
        }
    }
}
// 压缩后文件的输出路径目录
String destOutDir = getCacheDir().getAbsolutePath() + "/compVideoOutputDir/";
if (!new File(destOutDir).exists()) { // 如果目录不存在,则创建目录
    new File(destOutDir).mkdirs();
}
String destOutPath = destOutDir + System.currentTimeMillis() + ".mp4";
// realPath 是选择的图库的视频文件全路径,替换成要压缩的文件全路径即可
String text = "ffmpeg -y -i " + realPath + " -b:v 600k -r 25 -crf 20 -vcodec libx264 -vf scale=-2:720 -preset superfast " 
String[] commands = text.split(" ");
// 这里是同步执行的,直到执行完成,才会走到下一步,也就是说是当前线程同步执行的
// ret等于0则执行成功,否则执行失败
int ret = RxFFmpegInvoke.getInstance().runCommand(commands, new RxFFmpegInvoke.IFFmpegListener() {
    @Override
    public void onFinish() {
        // 压缩完成...
    }
	/**
	*@param progress 当前转化的进度
	*/
    @Override
    public void onProgress(int progress, long progressTime) {
        LogUtils.d("RxFFmpeg---Invoke---onProgress-----progress=" + progress + ",progressTime=" + progressTime);
        MainThread.run(new Runnable() {
            @Override
            public void run() {
                if (progress >= 0 && progress <= 100) {
                    showProgress(String.format("视频压缩中%d%%...", progress));
                }
            }
        });
    }
    @Override
    public void onCancel() {
        MainThread.run(new Runnable() {
            @Override
            public void run() {
                hideProgress();
                toastLong("压缩取消");
            }
        });
    }
    @Override
    public void onError(String message) {
        MainThread.run(new Runnable() {
            @Override
            public void run() {
                hideProgress();
                toastLong(message);
            }
        });
    }
});
// ret==0则转化执行成功
LogUtils.d("RxFFmpeg---Invoke--------getTaskResult-----exeFinish--ret=" + ret);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值