陈桥驿站 陈桥驿站

Android 视频压缩( 含压缩进度回调 )

--> Android 阅读 ( 53 ) 文章转载请注明来源!

前言

最近项目中用到了视频压缩,那么我就简单的说几句吧。避免有类似需求的继续踩坑。

现在网上流行的基本有两种方式:

  • FFMpeg
  • VideoCompressor

我最开始尝试的是FFMpeg,因为平时要是视频处理的话,Mac的控制台跑的最多的就是FFMpeg。但是我后来发现了很多问题。

1.项目体积大,一个FFMpeg依赖就得一百多兆,打出来的包也很大
2.压缩速度慢,后面我会讲
3.不带压缩进度,这样就给用户带来了很糟糕的体验,因为他们不知道什么时候压缩才能结束

压缩进度这个我要强调下,FFMpegVideoCompressor实现的方式不一样,FFMpeg用的是软解码,电脑可以,i5处理器,放手机里面就歇菜了,手机ARM处理器。

VideoCompressor使用的是硬解码,调的原生接口。

所以经过我的实验我发现VideoCompressor是一个很好地选择。

正题

VideoCompressor

项目地址:https://github.com/fishwjy/VideoCompressor

VideoCompress.compressVideoMedium(getFilesDir() + "/" + currentVideoID + "_Primary.mp4",
        getFilesDir() + "/" + currentVideoID + "_Compressed.mp4",
        new VideoCompress.CompressListener() {
            @Override
            public void onStart() {
                Toast.makeText(RecordActivity.this, "视频正在压缩", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onSuccess() {
                File oldFile = new File(getFilesDir() + "/" + currentVideoID + "_Primary.mp4");
                File newFile = new File(getFilesDir() + "/" + currentVideoID + "_Compressed.mp4");
                Toast.makeText(RecordActivity.this, "视频压缩完成:" + oldFile.length() / 1024 / 1024 + "MB" + " -> " + newFile.length() / 1024 / 1024 + "MB", Toast.LENGTH_LONG).show();
                //ScreenShot
                MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
                mediaMetadataRetriever.setDataSource(newFile.getAbsolutePath());
                Bitmap bitmap = mediaMetadataRetriever.getFrameAtTime(0);
                videoShotImageView.setImageBitmap(bitmap);
            }

            @Override
            public void onFail() {

            }

            @Override
            public void onProgress(float percent) {
                numberProgressBar.setProgress((int) percent);
            }
        });
break;

最后看一下效果。

本文基于《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
文章链接:http://www.cctv3.net/archives/androidVideoCompressor.html (转载时请注明本文出处及文章链接)

Android
发表新评论
雷姆
拉姆