第一步:跟build配置
maven { url 'https://jitpack.io' }
第二步:build文件下引用VideoProcessor
implementation 'com.github.yellowcath:VideoProcessor:2.3.0'
第三步:寫(xiě)一個(gè)壓縮視頻的共用方法
public static void compressVideo2(Context context, String path, Handler.Callback callback) {
String compressPath = Constant.video_path + File.separator + "VID_" + System.currentTimeMillis() + ".mp4";
new Thread(() -> {
boolean success = true;
try {
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource(path);
int originWidth = Integer.parseInt(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH));
int originHeight = Integer.parseInt(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT));
int bitrate = Integer.parseInt(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE));
int outWidth = originWidth / 2;
int outHeight = originHeight / 2;
start = System.currentTimeMillis();
VideoProcessor.processor(context)
.input(path)
.output(compressPath)
.bitrate(bitrate / 2)//這個(gè)屬性不加,有些小視頻反而越壓縮越大
//以下參數(shù)全部為可選
// .outWidth(outWidth)
// .outHeight(outHeight)
// .startTimeMs(startTimeMs)//用于剪輯視頻
// .endTimeMs(endTimeMs) //用于剪輯視頻
// .speed(speed) //改變視頻速率蟆盐,用于快慢放
// .changeAudioSpeed(changeAudioSpeed) //改變視頻速率時(shí)件缸,音頻是否同步變化
// .bitrate(bitrate) //輸出視頻比特率
// .frameRate(frameRate) //幀率
// .iFrameInterval(iFrameInterval) //關(guān)鍵幀距拙徽,為0時(shí)可輸出全關(guān)鍵幀視頻(部分機(jī)器上需為-1)
// .progressListener(listener) //可輸出視頻處理進(jìn)度
.process();
} catch (Exception e) {
success = false;
e.printStackTrace();
}
if (success) {
end = System.currentTimeMillis();
Log.e("aaa", "壓縮耗時(shí):" + (end - start) / 1000 + "秒");
Log.e("aaa", "視頻壓縮后大懈俚丁:" + new File(compressPath).length() / 1024 / 1024 + "MB");
Log.e("aaa", "視頻大兄怼:" + new File(path).length() / 1024 / 1024 + "MB");
Message message = Message.obtain();
message.obj = compressPath;
callback.handleMessage(message);
} else {
}
}).start();
}
第四步:activity中調(diào)用
CompressUtils.compressVideo2(this,filePath, msg -> {
String path= (String) msg.obj;
File compressFile = new File(path);
// Log.e("aaa","拍照信息:"+compressFile.getAbsolutePath());
Log.e("aaa", "視頻" + compressFile.length());
return false;
});
第四步: minSdkVersion 必須是21
minSdkVersion 21
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者