美文网首页Android技术知识读书Android开发
推荐一个开源的音视频编辑、视频剪辑框架

推荐一个开源的音视频编辑、视频剪辑框架

作者: cff70524f5cf | 来源:发表于2019-03-15 21:33 被阅读207次

    RxFFmpeg

    RxFFmpeg 是基于 ( FFmpeg 4.0 + X264 + mp3lame + fdk-aac ) 编译的适用于 Android 平台的音视频编辑、视频剪辑的快速处理框架,包含以下功能(视频拼接,转码,压缩,裁剪,片头片尾,分离音视频,变速,添加静态贴纸和gif动态贴纸,添加字幕,添加滤镜,添加背景音乐,加速减速视频,倒放音视频,音频裁剪,变声,混音,图片合成视频,视频解码图片等主流特色功能……

    编译环节

    编译环境

    win10 + ubuntu 16.04 + gcc + make
    主要依赖以下库进行编译

    image.png

    编译脚本

    编译脚本、JNI代码整理后上传

    特色功能

    • 支持任何FFmpeg命令执行

    • 支持FFmpeg命令执行进度回调

    • 支持中断FFmpeg命令

    • 支持同步/异步执行

    • 支持开启/关闭 debug 模式

    • 支持硬件加速,使编解码处理更快

    • 代码封装成SDK的方式,方便依赖使用

    • 支持把FFmpeg的各子模块libavutil
      libavcodec
      libavformat
      libavdevice
      libavfilter
      libswscale
      libswresample
      libpostproc 最终打包成一个libffmpeg-core.so核心库方便依赖使用,无需导入七八个so库

    • 支持libx264编码库,可以使压缩后的视频体积变的极小,清晰度还保持着很高清,简单的压缩命令: ffmpeg -y -i /storage/emulated/0/1/input.mp4 -b 2097k -r 30 -vcodec libx264 -preset superfast /storage/emulated/0/1/result.mp4

    • 支持添加 mp3、aac、wav 等主流格式的背景音乐

    • 支持主流视频格式转换,如: avi > mp4 > avi

    使用方式

    1、开启/关闭 debug 模式,建议在 Application 初始化调用

    RxFFmpegInvoke.getInstance().setDebug(true);
    2、FFmpeg 命令执行 (RxJava2优雅的调用)

    String text = "ffmpeg -y -i /storage/emulated/0/1/input.mp4 -vf boxblur=25:5 -preset superfast /storage/emulated/0/1/result.mp4";
    
    String[] commands = text.split(" ");
    
    RxFFmpegInvoke.getInstance().runCommandRxJava(commands).subscribe(new RxFFmpegSubscriber() {
                @Override
                public void onFinish() {
                    if (mProgressDialog != null)
                        mProgressDialog.cancel();
                    showDialog("处理成功");
                }
    
                @Override
                public void onProgress(int progress) {
                    if (mProgressDialog != null)
                        mProgressDialog.setProgress(progress);
                }
    
                @Override
                public void onCancel() {
                    if (mProgressDialog != null)
                        mProgressDialog.cancel();
                    showDialog("已取消");
                }
    
                @Override
                public void onError(String message) {
                    if (mProgressDialog != null)
                        mProgressDialog.cancel();
                    showDialog("出错了 onError:" + message);
                }
            });
    

    3、FFmpeg 命令执行 (同步方式)

    RxFFmpegInvoke.getInstance().runCommand(command, null);
    

    4、中断 FFmpeg 命令

    RxFFmpegInvoke.getInstance().exit();
    

    【附】相关架构及资料

    image

    资料领取

    点赞+加群免费获取!Android 架构设计③群

    领取获取往期Android高级架构资料、源码、笔记、视频。高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术

    相关文章

      网友评论

        本文标题:推荐一个开源的音视频编辑、视频剪辑框架

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