FFmpeg开发笔记(七十七)Android的开源音视频剪辑框架RxFFmpeg
《FFmpeg开发实战:从零基础到短视频上线》一书的“第 12 章 FFmpeg的移动开发”介绍了如何使用FFmpeg在手机上剪辑视频,方便开发者更好地开发类似剪映那样的视频剪辑软件。那么在Android系统上还有一款国产的开源视频剪辑框架RxFFmpeg,通过该框架可以更快地开发剪辑App,下面就要介绍如何在App工程中使用RxFFmpeg。
RxFFmpeg是一个Android平台的音视频编辑、视频剪辑的快速处理框架,它基于多个音视频开源框架,包括但不限于FFmpeg 4.0、x264、mp3lame、fdk-aac、opencore-amr、openssl等等。RxFFmpeg主要提供拼接、转码、压缩、裁剪、变速、分离音视频、添加片头片尾、添加贴纸、添加字幕、添加滤镜、添加背景音乐等常见功能,能够基本满足音视频文件的日常剪辑需求。
RxFFmpeg的源码托管地址为https://github.com/microshow/RxFFmpeg,最新版本是2020年11月发布的RxFFmpeg 4.9(星星数4.6k),可见该框架的源码更新十分及时。并且RxFFmpeg的源码采用Java+XML编写,对于初学者而言非常友好,使用Android Studio Dolphin(小海豚版本)无需任何改动即可直接导入RxFFmpeg的demo工程。
在自己的App工程中集成RxFFmpeg也很简单,只要执行下列几个步骤就行。
一、导入RxFFmpeg库
如果已经事先导入RxFFmpeg的库工程,则只需在build.gradle中添加下面一行即可引入RxFFmpeg:
implementation project(path: ':rxffmpeg')
如果不用库工程,也只要在build.gradle中添加下面一行即可引入RxFFmpeg:
implementation 'com.github.microshow:RxFFmpeg:4.9.0'
如果没有较高要求的话,添加下面这行极速版的RxFFmpeg也够了:
// 极速版 (预计占用 4M 左右空间),主要移除了一些不常用的编解码器
implementation 'com.github.microshow:RxFFmpeg:4.9.0-lite'
二、执行FFmpeg命令
在App工程的Java代码中可通过以下方式异步执行FFmpeg的音视频剪辑命令:
private void runFFmpegRxJava() {
String text = "这里填完整的ffmpeg剪辑命令";
String[] commands = text.split(" ");
myRxFFmpegSubscriber = new MyRxFFmpegSubscriber(this);
//开始执行FFmpeg命令
RxFFmpegInvoke.getInstance()
.runCommandRxJava(commands)
.subscribe(myRxFFmpegSubscriber);
}
开始音视频剪辑操作后,可通过以下代码中断RxFFmpeg的剪辑操作:
RxFFmpegInvoke.getInstance().exit();
如果不是剪辑加工音视频文件,仅仅需要获取音视频文件的媒体信息,也可调用以下代码抓取指定文件携带的媒体信息:
String filePath = "这里填音视频文件的完整路径";
String mediaInfo = RxFFmpegInvoke.getInstance().getMediaInfo(filePath);
由此可见,RxFFmpeg用起来很简单,只要开发者掌握常见的ffmpeg操作命令,就能快速地在自己的App工程中添加各种音视频剪辑功能。
按照上述几个步骤给App工程集成RxFFmpeg后,编译运行RxFFmpeg的demo工程,打开测试App如下图所示。

可见RxFFmpeg界面简洁,容易上手,是个不错的国产视频剪辑SDK。
更多详细的FFmpeg开发知识参见《FFmpeg开发实战:从零基础到短视频上线》一书。
FFmpeg开发笔记(七十七)Android的开源音视频剪辑框架RxFFmpeg的更多相关文章
- FFmpeg开发笔记(三):ffmpeg介绍、windows编译以及开发环境搭建
前言 本篇章是对之前windows环境的补充,之前windows的是无需进行编译的,此篇使用源码进行编译,版本就使用3.4.8. FFmpeg简介 FFmpeg是领先的多媒体框架,能够解码 ...
- FFmpeg开发笔记(四):ffmpeg解码的基本流程详解
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- FFmpeg开发笔记(五):ffmpeg解码的基本流程详解(ffmpeg3新解码api)
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放
前言 ffmpeg播放rtsp网络流和摄像头流. Demo 使用ffmpeg播放局域网rtsp1080p海康摄像头:延迟0.2s,存在马赛克 使用ffmpeg播放网络rtsp文件流 ...
- FFmpeg开发笔记(十):ffmpeg在ubuntu上的交叉编译移植到海思HI35xx平台
FFmpeg和SDL开发专栏(点击传送门) 上一篇:<FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放>下一篇:敬请期待 前言 将ffmpeg移植到海思H ...
- 转:Android IOS WebRTC 音视频开发总结 (系列文章集合)
随笔分类 - webrtc Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键? 摘要: 本文主要介绍WebRTC端到端监控(我们翻译和整理的,译 ...
- Android IOS WebRTC 音视频开发总结(八十五)-- 使用WebRTC广播网络摄像头视频(下)
本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...
- Android IOS WebRTC 音视频开发总结(八十三)-- 使用WebRTC广播网络摄像头视频(上)
本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...
- Android IOS WebRTC 音视频开发总结(四六)-- 从另一个角度看国内首届WebRTC大会
文章主要从开发者角度谈国内首届WebRTC大会,支持原创,文章来自博客园RTC.Blacker,支持原创,转载必须说明出处,更多详见www.rtc.help. -------------------- ...
- Android IOS WebRTC 音视频开发总结(六)-- iOS开发之含泪经验
前段时间在搞webrtc iOS开发,所以将标题改为了Android IOS WebRTC 音视频开发总结, 下面都是开发过程中的经验总结,转载请说明出处(博客园RTC.Blacker): 1. IO ...
随机推荐
- 数据库问题之“字符编码问题 Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x8E\x81\xE7\x88...' for column 'product_name' at row 41”
1)表1和表2的产品名称[数据库字段]字符编译方式不一致 ①问题 org.springframework.jdbc.UncategorizedSQLException: Error updating ...
- qt动画类学习
Qt动画类 QPropertyAnimation 显示动画 QPropertyAnimation *animation = new QPropertyAnimation(window(), " ...
- 服务器操作SCP命令使用
一.将本地代码上传服务器scp命令操作 命令是:scp dtcloud-master.zip root@10.14.22.141:/opt/dtcloud/ 将本地的scp dtcloud-maste ...
- Java 自定义线程池的线程工厂
本文分享创建线程工厂 ThreadFactory 的三种方式,以方便大家快速创建线程池,并通过线程工厂给每个创建出来的线程设置极富业务含义的名字. 线程池大小考虑因素 由于需要自定义线程池,故 ...
- Maven中dependencyManagement标签的正确使用方法
目录 前言 使用方法 结束语 前言 Maven中的dependencyManagement元素提供了一种管理依赖版本号的方式,她用于声明所依赖的jar包的版本号等信息.当所有子项目再次引入这些ja ...
- 2024牛客多校2I Red Playing Cards
本文同步于我的博客. Problem There are \(2\cdot n\) cards arranged in a row, with each card numbered from \(1\ ...
- Java 实现微信小程序不同人员生成不同小程序码并追踪扫码来源
Java后台实现微信小程序不同人员生成不同小程序码并追踪扫码来源 下面我将详细介绍如何使用Java后台实现这一功能. 一.整体架构设计 前端:微信小程序 后端:Java (Spring Boot) 数 ...
- ThreadLocal详解:线程私有变量的正确使用姿势
ThreadLocal详解:线程私有变量的正确使用姿势 在多线程编程中,如何让每个线程都拥有自己独立的变量副本?ThreadLocal就像给每个线程分配了一个专属保险箱,解决了线程间数据冲突的问题.本 ...
- DRF之频率组件源码分析
DRF之频率组件源码分析 [一]频率组件介绍 Django Rest Framework(DRF)中的频率组件是用于限制API端点的访问频率的一种机制. 频率组件可以帮助你控制用户对API的请求频率, ...
- laravel-casbin-admin
基于 vue-element-admin laraveljwtcasbin 整合的前后端分离的rbac权限管理系统 功能和介绍 github地址 系统采用前后端分离架构,是一个企业后台解决方案. 前端 ...