美文网首页
Android记录一下ffmpeg libx265压缩视频

Android记录一下ffmpeg libx265压缩视频

作者: 坑逼的严 | 来源:发表于2022-09-07 18:33 被阅读0次

    以前记录过一个好用的ffmpeg第三方开源库-》FFmpegKit。现在再记录另一个好用的ffmpeg第三方库-》mobile-ffmpeg。
    地址:https://github.com/tanersener/mobile-ffmpeg
    主要是几大点:
    1、集成上,比较全的分full和full-gpl

    implementation 'com.arthenica:mobile-ffmpeg-full:4.4'
    implementation 'com.arthenica:mobile-ffmpeg-full-gpl:4.4'
    

    二选一就行,gpl包含更全更多,今天记录的libx265就在gpl。对照表如下:


    image.png

    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)){
            //判断是视频数据后,拿取相关数据,比如:mediaProperty.width,拿取视频宽度
        }
    }
    

    一个视频有音频流和视频流,上面代码中用TextUtils.equals("video",mediaProperty.type)作为区分。

    3、执行命令:

    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 {
                    //出错了
                }
          }
    }
    

    mCompressId 是对应执行命令的id
    4、取消

    //指定id取消
    FFmpeg.cancel(mCompressId)
    //内部获取正在执行的id后取消
    FFmpeg.cancel()
    

    5、进度获取

    Config.enableStatisticsCallback {
                if(mCompressId == it.executionId){
                    val timeInMilliseconds: Int = it.getTime()
                    var progress = ((timeInMilliseconds.toDouble() / 视频时长毫秒级) * 100).toInt()
                    mTvLoading.setText("当前进度:${progress}%")
                }
    }
    

    上面是视频处理时展示进度。
    以上就是这个开源库基本用法。

    最后配上压缩命令

    var commend = "-i ${原视频路径}"+ " -strict -2 -vf scale=${视频宽度}:${视频高度} -c:v libx265 -x265-params crf=${压缩级别}:preset=${编码速度} -r ${帧率} ${视频输出地址}"
    

    原视频路径没啥好说的
    视频宽度,想要压缩到的宽度,比如原视频是1080,现在压缩到720。注意保持视频宽高比例不能变。
    视频高度同上
    压缩级别最高值是51。这个值越小压缩越清晰,但是文件大小越大,显然不行。数值越大越模糊,也不行。推荐值是18到28。
    编码速度,编码速度越慢,则压缩效果及画质越好。他的值为:
    placebo
    veryslow
    slower
    slow
    medium
    fast
    faster
    veryfast
    superfast
    ultrafast
    帧率,可以先获取视频帧率,保持原视频的帧率就行,但是大于30帧,可以强制修改为30帧,毕竟是压缩视频搞啥60帧视频啊。哈哈哈
    视频输出地址没啥好说的。

    相关文章

      网友评论

          本文标题:Android记录一下ffmpeg libx265压缩视频

          本文链接:https://www.haomeiwen.com/subject/fhwgnrtx.html