android mp4 画面裁剪,说说Android的视频裁剪(三)

有一段时间没有更新博客了。

最近有人在我的博客中跟我说mp4Parse不能裁剪mov视频,问我有没有其他的解决方案,所以这次我更新了一下自己的项目:Android-Video-Trimmer,使用ffmpeg来实现视频的裁剪。

FFmpeg是为大家所熟悉的处理视频的一个跨平台的开源库,支持android、ios。我们可以自己手动编译不同平台的lib库,从何集成到我们的项目中去。但是FFmpeg是一个C/C++的库,对于熟悉Java开发的Android同学来说,更希望是Java层面的调用。

在我的项目中,集成了一个FFmpegAndroid开发库,这个库优点是我们可以直接用Java的API来执行ffmpge的命令,缺点是该库比较大(大概19M),没办法对库做瘦身缩减工作。下面是我集成这个库的几个步骤。

1. 引入库的方式有两种:aar或者源码依赖

aar依赖:

dependencies {

compile 'com.writingminds:FFmpegAndroid:0.3.2'

}

源码依赖:

用git将ffmpeg-android-javaclone到本地,然后把项目中FFmpegAndroid库的源码加入到自己的项目中。

2cf527f2129f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

FFmpegAndroid

2.库的初始化

public class ZApplication extends Application {

@Override

public void onCreate() {

super.onCreate();

initFFmpegBinary(this);

}

private void initFFmpegBinary(Context context) {

try {

FFmpeg.getInstance(context).loadBinary(new LoadBinaryResponseHandler() {

@Override

public void onFailure() {

}

});

} catch (FFmpegNotSupportedException e) {

e.printStackTrace();

}

}

}

初始化的目的是根据Android手机的cpu架构,load对应架构的ffmpeg库。

3.执行ffmpeg的commend命令

上面的准备工作做完之后,剩下就是我们关心的问题了,如何执行ffmpeg命令行呢?在前面我已经说了,这个库是对ffmpeg的在Linux系统中命令行的一个封装,所以我们需要在该库中找到一个这样的API。

那我在FFmpegInterface.java类中找到了如下的PAI:

/**

* Executes a command

* @param environvenmentVars Environment variables

* @param cmd command to execute

* @param ffmpegExecuteResponseHandler {@link FFmpegExecuteResponseHandler}

* @throws FFmpegCommandAlreadyRunningException

*/

public void execute(Map environvenmentVars, String[] cmd, FFmpegExecuteResponseHandler ffmpegExecuteResponseHandler) throws FFmpegCommandAlreadyRunningException;

/**

* Executes a command

* @param cmd command to execute

* @param ffmpegExecuteResponseHandler {@link FFmpegExecuteResponseHandler}

* @throws FFmpegCommandAlreadyRunningException

*/

public void execute(String[] cmd, FFmpegExecuteResponseHandler ffmpegExecuteResponseHandler) throws FFmpegCommandAlreadyRunningException;

小伙伴们可以看到参数String[] cmd,就是我所说的控制台的命令行参数,只要将我们的命令行传入,设置好回调,剩下的事情就是静静等着ffmpeg触发我们的回调了,是不是感觉很爽!

下面是我的调用实现:

public static void trimVideo(Context context, String inputFile, String outputFile, long startMs, long endMs, final OnTrimVideoListener callback) {

final String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date());

final String outputName = "trimmedVideo_" + timeStamp + ".mp4";

String start = convertSecondsToTime(startMs/1000);

String duration = convertSecondsToTime((endMs - startMs)/1000);

/**ffmpeg -ss START -t DURATION -i INPUT -vcodec copy -acodec copy OUTPUT

-ss 开始时间,如: 00:00:20,表示从20秒开始;

-t 时长,如: 00:00:10,表示截取10秒长的视频;

-i 输入,后面是空格,紧跟着就是输入视频文件;

-vcodec copy 和 -acodec copy 表示所要使用的视频和音频的编码格式,这里指定为copy表示原样拷贝;

INPUT,输入视频文件;

OUTPUT,输出视频文件*/

String cmd = "-ss " + start + " -t " + duration + " -i " + inputFile + " -vcodec copy -acodec copy " + outputFile + "/" + outputName;

String[] command = cmd.split(" ");

try {

FFmpeg.getInstance(context).execute(command, new ExecuteBinaryResponseHandler() {

@Override

public void onFailure(String s) {

}

@Override

public void onSuccess(String s) {

callback.onFinishTrim(null);

}

@Override

public void onStart() {

callback.onStartTrim();

}

@Override

public void onFinish() {

}

});

} catch (FFmpegCommandAlreadyRunningException e) {

// do nothing for now

}

}

上面主要是拼出ffmpeg视频裁剪的命令行参数。

FFmpeg命令大全

视频裁剪的命令如下:

ffmpeg -ss START -t DURATION -i INPUT -vcodec copy -acodec copy OUTPUT

需要主意的是:

DURATION 是表示视频的持续时间而不是结束时间

INPUT 表示输入的包含文件名的文件路径 e.g: sdcard/xxx/xx/input.mp4

OUTPUT 表示输出的包含文件名的文件路径 e.g: sdcard/xxx/xx/output.mov

其他命令也基本也差不多,需要实现什么功能之后可以去查询具体的命令行,对着实现就行。

Thanks for reading. To help others please click ❤ to recommend this article if you found it helpful.

You can also follow me at GitHub.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/351379.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

android mp4 画面裁剪,说说Android的视频裁剪(二)

有关视频裁剪我在前面一篇博客中只是做了简单的说明,主要涉及到的知识准备在这篇博客中拿出来说一下。有兴趣的可以fork我的视频裁剪的项目源码,一起学习进步。 Github:https://github.com/iknow4/Android-Video-Trimmer 视频裁剪页如下图所示: 图上面的视频播放用是VideoV…

FFmpeg 视频裁剪

FFmpeg 视频裁剪 一、下载 FFmpeg二、安装 FFmpeg三、裁剪在bin文件夹 下找到ffmpeg文件找到要裁剪的视频文件,这里是input.mp4 三、视频录制软件 一、下载 FFmpeg FFmpeg Windows 可执行文件官方下载地址: FFmpeg Windows Builds 这里提供了多个版本…

如何裁剪视频?这两个简单方法你们还不快来学

不知道大家会不会遇到这种情况,比如有的时候拍完视频,感觉视频有些画面边缘出现瑕疵,想把它裁剪掉,但是不知道视频怎么裁剪画面大小?其实这个很简单,我们只需要使用一些工具就可以轻松实现裁剪画面大小的操…

leetcode701. 二叉搜索树中的插入操作(java)

二叉搜索树中的插入操作 leetcode701. 二叉搜索树中的插入操作题目描述 递归解题解题思路代码演示 二叉树专题 leetcode701. 二叉搜索树中的插入操作 原题链接: 来源:力扣(LeetCode) 链接:https://leetcode.cn/problem…

级差制系统开发模式逻辑详解

在所有的直销模式中,级差制其实是最公平的一种,因为它的主旨就是多劳多得,给每个人的机会都是平等的,尤其是对于那些能力强肯努力的直销员来说,完全可以拿到自己应得的报酬,而且这个报酬相当可观。 级差制模…

魔兽跟随字符串

魔兽跟随字符串 打11跟随,打22自动跟随 !TwvuRnUrq4)lck4axcw6sOCpKcU5KBYHJTRxL6lVSwBKwzVxL1AwTkj(OiAFUW13lfk0xk9HwOV02hUFonT9(x0zgjzRCxmCpCScXmZo7mFZS7md3LhWzl5Sy8di1f2uvMKZgDrWGZg6Zzj6mlt9sjFORhNz1rxln5kDgW7(4UhYz5Y0KXAvMLZ(0rbbJoNZUDussU0Yh2fmRk…

Weka的下载与安装

一、安装Weka 1、进入官网 https://www.cs.waikato.ac.nz/ml/weka/ 。 2、在Getting started中点击Download,再选择合适的版本下载即可。我选择的是Windows 64bit without JVM的版本。 3、安装Weka。 4、进入安装目录,将data文件夹复制粘贴至方便使用的…

wmi_exporter+Prometheus+Grafana

wmi_exporterPrometheusGrafana 原文地址: CSDN:NRlovestudy:Windows 下搭建 wmi_exporterPrometheusGrafana 服务器性能监控平台 wmi_exporter(Windows) / node_exporter (Linux) 是用来做数据…

WEKA数据集

WEKA数据集: WEKA所处理的数据集是一个.arff(attribute relation file)为后缀名的二维表。这是一种ASCII文本文件。以%开始的行是注释。 表中具体的内容: relation文件名称 attribute属性名和具体的属性值 data后为每个实例对应的…

wamp安装composer

一、下载 打开链接:https://docs.phpcomposer.com/00-intro.html 在导航路径里找到“使用安装程序”: 点击入门后就回出现如下界面:找到“使用安装程序”并单击 点击即可下载 二、安装 1、下载后直接双击安装,直接Next。 2、通…

WeKa 数据集

今天找weka官方数据集差点被自己蠢哭,写个博客纪念一下。最近在学习weka的基本操作,来训练自己的数据进行分类等操作,网上找了一个视频Weka讲解视频 YouTobe视频 “https://www.youtube.com/watch?vLcHw2ph6bss&listPLm4W7_iX_v4NqPUjc…

wago edz 下载_用电子枪制造的WeakAuras Wago.io桥

wago edz 下载 弱光环伴侣 (WeakAuras-Companion) The bridge between WeakAuras and wago.io. WeakAuras和wago.io之间的桥梁。 View Demo 查看演示 Download Source 下载源 安装 (Installation) Require WeakAuras version > 2.11-beta2 Install last executable from ht…

astar插件下载 就行_怀旧服插件:简约清爽界面推荐,MangUI、NDui、ShadowUF安装与设置...

前言 最近由于工作原因,外加上犯懒,有一段时间没关注魔兽上的事儿,平时下班偶尔打打本野外逛一逛啥的 前一阵国服知名盗贼玩家uc卖插件的事儿闹得沸沸扬扬,6月9日,uc发了道歉的视频,才引起了我的兴趣,先就事论事来说,不管他这个插件原创度有多少,拿出来卖钱也是不合适…

kubernetes 安装 Prometheus + Grafana

kubernetes 安装 Prometheus Grafana kubernetes install Prometheus Grafana 官网 Official website https://prometheus.io/ GitHub GitHub https://github.com/coreos/kube-prometheus 组件说明 Component description MetricServer:是kubernetes集群资源使用情…

Maya《UV》

Maya 《UV》 1.建模编辑器 2. U轴V轴,UV工具包 3.工具》显示UV工具包 4.赋予物体贴图 1)材质 2)贴图 双击材质球,点击颜色后面的棋盘格,在弹出的窗口中选择文件,将需要的贴图赋予材质球 按下6进行显示贴…

WADO-URI,WADO-RS

可以关注技术大牛博客https://blog.csdn.net/zssureqh WADO-URI accept:请求中的accept表明客户端(通常是浏览器)自身能够支持的从服务器返回的数据类型,例如上图中支持image/webp,image/,/*;q0.8表示图片的质量 accept-encodi…

OWA TOP10

1.SQL注入 1.1.解释 将一些包含指令的数据传入给解释器,如SQL注入 1.2.防范措施 对特殊字符进行转义 1.3.演示 package mainimport ("github.com/gin-gonic/gin""net/http" ) import "database/sql" import _ "github.com…

weakauras教程_简单的WeakAuras2教程 基础功能设置指南(2)

WeakAuras2教程之冷却设置 这样,不灭决心的冷却图标我们也就做出来了! 然后我们要做的事是让他们重合在一个位置(鼠标不准的话可以在图示里面的XY偏移调,两个数字都一样就行。 重合后我们关掉插件,使用技能不灭决心,&a…

weka介绍与安装

一、weka介绍 WEKA的全名是怀卡托智能分析环境(Waikato Environment for Knowledge Analysis),同时weka也是新西兰的一种鸟名,而WEKA的主要开发者来自新西兰。WEKA作为一个公开的数据挖掘工作平台,集合了大量能承担数…

海睿思分享 | 摆脱数据质量低下困扰,这个方法简单有效!

2019年五月,某企业数据服务平台推送了运营花呗的蚂蚁小微小额贷款有限公司进入清算程序。 究其原因,该数据服务平台抓取了不真实且不完整的数据,导致生成的数据质量低,信息不真实、存在法律合规风险等情况。 由于支付宝和花呗的…