RxFFmpeg 是基于 ( FFmpeg 4.0 + X264 + mp3lame + fdk-aac ) 编译的适用于 Android 平台的音视频编辑、视频剪辑的快速处理框架,包含以下功能(视频

本文主要是介绍RxFFmpeg 是基于 ( FFmpeg 4.0 + X264 + mp3lame + fdk-aac ) 编译的适用于 Android 平台的音视频编辑、视频剪辑的快速处理框架,包含以下功能(视频,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

RxFFmpeg

项目地址:microshow/RxFFmpeg 

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

更多:作者   提 Bug   

标签:

 

Language: English

RxFFmpeg.svguploading.4e448015.gif转存失败重新上传取消    

图 -1:logo

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

【官方 App】下载体验

扫码 or 点击下载
apk-qr.pnguploading.4e448015.gif转存失败重新上传取消图 -1:扫码下载体验

编译环节

编译环境

  • win10 + ubuntu 16.04 + gcc + make

主要依赖以下库进行编译

库名版本下载地址
FFmpeg4.0http://ffmpeg.org/releases/ffmpeg-4.0.tar.bz2
X264x264-snapshot-20180212-2245-stablehttp://download.videolan.org/x264/snapshots/x264-snapshot-20180212-2245-stable.tar.bz2
mp3lame3.100https://jaist.dl.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz
fdk-aac0.1.6https://jaist.dl.sourceforge.net/project/opencore-amr/fdk-aac/fdk-aac-0.1.6.tar.gz
ndkandroid-ndk-r14b-linux-x86_64https://dl.google.com/android/repository/android-ndk-r14b-linux-x86_64.zip

编译脚本

  • 编译脚本

特色功能

  • 支持任何 FFmpeg 命令执行

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

  • 支持中断 FFmpeg 命令

  • 支持同步/异步执行

  • 支持开启/关闭 debug 模式

  • 支持硬件加速,使编解码处理更快(已开启 MediaCodec)

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

  • 支持把 FFmpeg 的各子模块 libavutil libavcodec libavformat libavdevice libavfilter libswscale libswresample libpostproc 最终打包成一个 librxffmpeg-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

  • 每隔一秒截取一张图 ffmpeg -y -i /storage/emulated/0/1/input.mp4 -f image2 -r 1 -q:v 10 -preset superfast /storage/emulated/0/1/%3d.jpg

使用方式

Gradle

在根目录下的 build.gradle 里添加 maven 仓库


allprojects {repositories {...maven { url 'https://www.jitpack.io' }}}

添加依赖,最新版本RxFFmpeg.svguploading.4e448015.gif转存失败重新上传取消


dependencies {implementation 'com.github.microshow:RxFFmpeg:2.4.0'
}

如果你的 App 只要 v7a 平台,可以只保留 armeabi-v7a,不过推荐加上 arm64-v8a 架构,这样性能会大大提升

 


defaultConfig {...ndk {abiFilters "armeabi-v7a","arm64-v8a"}
}

开始

  • 开启/关闭 debug 模式,建议在 Application 初始化调用
RxFFmpegInvoke.getInstance().setDebug(true);
  • FFmpeg 命令执行 (RxJava2 优雅的调用)
private void runFFmpegRxJava() {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(" ");myRxFFmpegSubscriber = new MyRxFFmpegSubscriber(this);//开始执行 FFmpeg 命令RxFFmpegInvoke.getInstance().runCommandRxJava(commands).subscribe(myRxFFmpegSubscriber);}public static class MyRxFFmpegSubscriber extends RxFFmpegSubscriber {private WeakReference<HomeFragment> mWeakReference;public MyRxFFmpegSubscriber(HomeFragment homeFragment) {mWeakReference = new WeakReference<>(homeFragment);}@Overridepublic void onFinish() {final HomeFragment mHomeFragment = mWeakReference.get();if (mHomeFragment != null) {mHomeFragment.cancelProgressDialog("处理成功");}}@Overridepublic void onProgress(int progress, long progressTime) {final HomeFragment mHomeFragment = mWeakReference.get();if (mHomeFragment != null) {//progressTime 可以在结合视频总时长去计算合适的进度值mHomeFragment.setProgressDialog(progress, progressTime);}}@Overridepublic void onCancel() {final HomeFragment mHomeFragment = mWeakReference.get();if (mHomeFragment != null) {mHomeFragment.cancelProgressDialog("已取消");}}@Overridepublic void onError(String message) {final HomeFragment mHomeFragment = mWeakReference.get();if (mHomeFragment != null) {mHomeFragment.cancelProgressDialog("出错了 onError:" + message);}}}@Overridepublic void onDestroy() {super.onDestroy();if (myRxFFmpegSubscriber != null) {myRxFFmpegSubscriber.dispose();}}
  • FFmpeg 命令执行 (同步方式)
RxFFmpegInvoke.getInstance().runCommand(command, null);
  • 中断 FFmpeg 命令
RxFFmpegInvoke.getInstance().exit();
  • 构建命令,使用 RxFFmpegCommandList 构建,可以有效避免路径带有空格等问题
public static String[] getBoxblur() {RxFFmpegCommandList cmdlist = new RxFFmpegCommandList();cmdlist.append("-i");cmdlist.append("/storage/emulated/0/1/input.mp4");cmdlist.append("-vf");cmdlist.append("boxblur=5:1");cmdlist.append("-preset");cmdlist.append("superfast");cmdlist.append("/storage/emulated/0/1/result.mp4");return cmdlist.build();}
  • 获取媒体文件信息
RxFFmpegInvoke.getInstance().getMediaInfo(String filePath);

代码混淆

-dontwarn io.microshow.rxffmpeg.**
-keep class io.microshow.rxffmpeg.**{*;}

优质项目

* GSYVideoPlayer (Android 端的视频播放器神器)

* AiSound 百变魔音 (一个神奇的魔法声音)

* RetrofitGO (轻量级的网络请求库-支持缓存配置)

常用命令

* 常用命令汇总

* FFmpeg 文档汇总

* FFmpeg Filters 文档

ScreenShot

图 -1:screenShot.gif

性能比对:arm64-v8a VS armeabi-v7a

图 -2:arm64-v8a 图 -1:armeabi-v7a

总结:可以看出 arm64-v8a 架构的运行效率远大于 armeabi-v7a,强烈建议在你的 App 添加 arm64-v8a 架构的 so,同时也是响应 Google 的号召。

实验室

抖音首页视频翻页

  • 视频适配方案

    • 竖屏视频:高宽比例 >= 16/9,则全屏铺满,反之采取第二方案
    • 横屏及其他比例视频:宽度铺满,高度自适应,背景虚化效果
  • 视频播放器基于 ExoPlayer(轻量级播放器)

  • 支持直播视频

  • 支持视频预缓存

图 -1:screen_douyin_home.gif

这篇关于RxFFmpeg 是基于 ( FFmpeg 4.0 + X264 + mp3lame + fdk-aac ) 编译的适用于 Android 平台的音视频编辑、视频剪辑的快速处理框架,包含以下功能(视频的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/318929

相关文章

springboot下载接口限速功能实现

《springboot下载接口限速功能实现》通过Redis统计并发数动态调整每个用户带宽,核心逻辑为每秒读取并发送限定数据量,防止单用户占用过多资源,确保整体下载均衡且高效,本文给大家介绍spring... 目录 一、整体目标 二、涉及的主要类/方法✅ 三、核心流程图解(简化) 四、关键代码详解1️⃣ 设置

基于Linux的ffmpeg python的关键帧抽取

《基于Linux的ffmpegpython的关键帧抽取》本文主要介绍了基于Linux的ffmpegpython的关键帧抽取,实现以按帧或时间间隔抽取关键帧,文中通过示例代码介绍的非常详细,对大家的学... 目录1.FFmpeg的环境配置1) 创建一个虚拟环境envjavascript2) ffmpeg-py

电脑提示xlstat4.dll丢失怎么修复? xlstat4.dll文件丢失处理办法

《电脑提示xlstat4.dll丢失怎么修复?xlstat4.dll文件丢失处理办法》长时间使用电脑,大家多少都会遇到类似dll文件丢失的情况,不过,解决这一问题其实并不复杂,下面我们就来看看xls... 在Windows操作系统中,xlstat4.dll是一个重要的动态链接库文件,通常用于支持各种应用程序

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

Golang 日志处理和正则处理的操作方法

《Golang日志处理和正则处理的操作方法》:本文主要介绍Golang日志处理和正则处理的操作方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录1、logx日志处理1.1、logx简介1.2、日志初始化与配置1.3、常用方法1.4、配合defer