以前記錄過一個(gè)好用的ffmpeg第三方開源庫(kù)-》FFmpegKit〖嘤遥現(xiàn)在再記錄另一個(gè)好用的ffmpeg第三方庫(kù)-》mobile-ffmpeg。
地址:https://github.com/tanersener/mobile-ffmpeg
主要是幾大點(diǎn):
1房维、集成上倘屹,比較全的分full和full-gpl
implementation 'com.arthenica:mobile-ffmpeg-full:4.4'
implementation 'com.arthenica:mobile-ffmpeg-full-gpl:4.4'
二選一就行,gpl包含更全更多眼滤,今天記錄的libx265就在gpl赏僧。對(duì)照表如下:
2大猛、然后通過他獲取音視頻信息,比如視頻信息:
val mediaInformation = FFprobe.getMediaInformation(photo.path)
val mediaProperties = mediaInformation.streams
for (mediaProperty in mediaProperties) {
if(!TextUtils.isEmpty(mediaProperty.type) && TextUtils.equals("video",mediaProperty.type)){
//判斷是視頻數(shù)據(jù)后淀零,拿取相關(guān)數(shù)據(jù)胎署,比如:mediaProperty.width,拿取視頻寬度
}
}
一個(gè)視頻有音頻流和視頻流窑滞,上面代碼中用TextUtils.equals("video",mediaProperty.type)作為區(qū)分琼牧。
3恢筝、執(zhí)行命令:
var mCompressId = FFmpeg.executeAsync(commend,object :ExecuteCallback{
override fun apply(executionId: Long, returnCode: Int) {
if (returnCode == Config.RETURN_CODE_SUCCESS) {
//成功了
} else if (returnCode == Config.RETURN_CODE_CANCEL) {
//取消了
} else {
//出錯(cuò)了
}
}
}
mCompressId 是對(duì)應(yīng)執(zhí)行命令的id
4、取消
//指定id取消
FFmpeg.cancel(mCompressId)
//內(nèi)部獲取正在執(zhí)行的id后取消
FFmpeg.cancel()
5巨坊、進(jìn)度獲取
Config.enableStatisticsCallback {
if(mCompressId == it.executionId){
val timeInMilliseconds: Int = it.getTime()
var progress = ((timeInMilliseconds.toDouble() / 視頻時(shí)長(zhǎng)毫秒級(jí)) * 100).toInt()
mTvLoading.setText("當(dāng)前進(jìn)度:${progress}%")
}
}
上面是視頻處理時(shí)展示進(jìn)度撬槽。
以上就是這個(gè)開源庫(kù)基本用法。
最后配上壓縮命令
var commend = "-i ${原視頻路徑}"+ " -strict -2 -vf scale=${視頻寬度}:${視頻高度} -c:v libx265 -x265-params crf=${壓縮級(jí)別}:preset=${編碼速度} -r ${幀率} ${視頻輸出地址}"
原視頻路徑?jīng)]啥好說的
視頻寬度趾撵,想要壓縮到的寬度侄柔,比如原視頻是1080,現(xiàn)在壓縮到720占调。注意保持視頻寬高比例不能變暂题。
視頻高度同上
壓縮級(jí)別最高值是51。這個(gè)值越小壓縮越清晰究珊,但是文件大小越大薪者,顯然不行。數(shù)值越大越模糊剿涮,也不行言津。推薦值是18到28。
編碼速度取试,編碼速度越慢悬槽,則壓縮效果及畫質(zhì)越好。他的值為:
placebo
veryslow
slower
slow
medium
fast
faster
veryfast
superfast
ultrafast
幀率瞬浓,可以先獲取視頻幀率初婆,保持原視頻的幀率就行,但是大于30幀猿棉,可以強(qiáng)制修改為30幀磅叛,畢竟是壓縮視頻搞啥60幀視頻啊。哈哈哈
視頻輸出地址沒啥好說的铺根。