使用FFmpeg实现视频的裁剪,不需要调用JNI实现
来源:互联网 发布:mac 桌面壁纸存放路径 编辑:程序博客网 时间:2024/06/10 14:59
参考地址:http://www.jianshu.com/p/2cf527f2129f
不好意思,好久没有更新博客了,今天给大家带来的是Android实现视频裁剪,我已经测试了mov、MP4、AVI格式的,都是OK的。
在网上搜索Android视频裁剪,基本上都说的是FFmpeg实现视频裁剪,不过都需要通过JNI集成FFmpeg来调用里面的命令实现裁剪,但是这个问题对于大多数程序猿都是一个很困难的事,可能就卡在了调用JNI那个阶段了,JNI的学习我的博客里面有详细介绍,但是这还是很麻烦,有没有一种直接可以导入FFmpeg就可以直接使用的他的功能了?答案是有的,接下来就是介绍通过代码实现裁剪;
compile 'com.writingminds:FFmpegAndroid:0.3.2'
首先在build.gradle里面添加依赖就OK了,也不用管这依赖从哪里来的,想了解可以百度看,然后
初始化就可以,有点嘛卖逼不知当讲不当讲,一定要在清单文件记得注册这个Application!
这样就可以直接使用FFmpeg里面的命令了,重点来了:
public class TrimVideoUtil { private static final String TAG = TrimVideoUtil.class.getSimpleName(); public static final int VIDEO_MAX_DURATION = 15;// 15秒 public static final int MIN_TIME_FRAME = 5; private static final int thumb_Width = (DeviceUtil.getDeviceWidth() - UnitConverter.dpToPx(20)) / VIDEO_MAX_DURATION; private static final int thumb_Height = UnitConverter.dpToPx(60); private static final long one_frame_time = 1000000; public static void trimVideo(final 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()); String outputName = "678"; if (inputFile.contains(".MOV")){ outputName = "CutVideo_" + timeStamp + ".mov"; }else { outputName = "CutVideo_" + timeStamp + ".mp4"; } Log.e("输入格式",inputFile); Log.e("输出格式",outputName); 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 " + Util.local_movie_path + "/" + outputName; String[] command = cmd.split(" "); try { FFmpeg.getInstance(context).execute(command, new ExecuteBinaryResponseHandler() { @Override public void onFailure(String s) { Toast.makeText(context, R.string.toast_cut_error,Toast.LENGTH_SHORT).show(); Log.e("失败",s); } @Override public void onSuccess(String s) { callback.onFinishTrim(null); Log.e("成功",s); Toast.makeText(context,R.string.toast_cut_success,Toast.LENGTH_SHORT).show(); } @Override public void onStart() { callback.onStartTrim(); Log.e("开始","1"); } @Override public void onFinish() { Log.e("完成","3"); } }); } catch (FFmpegCommandAlreadyRunningException e) { e.printStackTrace(); } } } }
上面是裁剪的方法可以直接调用,到这里就可以实现裁剪了。完整代码可以在下面留言
2 0
- 使用FFmpeg实现视频的裁剪,不需要调用JNI实现
- FFMPEG 最简滤镜filter使用实例(实现视频缩放,裁剪,水印等)
- FFMPEG filter使用实例(实现视频缩放,裁剪,水印等)
- ffmpeg学习:滤镜(实现视频缩放,裁剪,水印等)
- 使用ffmpeg实现视频连接
- 使用ffmpeg实现视频连接
- FFMpeg实现视频的缩放
- FFMPEG裁剪视频的一段视频
- 使用PHP调用系统命令实现ffmpeg的调用
- 【FFMpeg视频开发与应用基础】六、调用FFMpeg SDK实现视频文件的转封装
- Android 使用FFmpeg 裁剪出正方形视频
- 使用FFmpeg库实现视频编码
- 使用FFmpeg库实现视频解码
- 利用ffmpeg的配置configure来实现裁剪
- ffmpeg调整缩放裁剪视频的基础知识
- C#调用cmd用ffmpeg实现视频截图,图片使用后删除
- 使用jni实现在Java中调用C++的方法
- ffmpeg实现视频切割
- 常见视频文件格式
- amlogic平台android 系统linux内核中添加i2c设备实现i2c的读写
- Sourcetree配置GitHub远程代码库
- Hibernate框架下使用Gson遇到StackOverflowError时如何解决
- 如何将tomcat改为开发模式
- 使用FFmpeg实现视频的裁剪,不需要调用JNI实现
- MyBatis SQL应用
- 初来乍到的小菜鸟
- 简单工厂模式
- 多线程:Java内置锁与synchronized关键字
- Linux 下NFS挂载共享资源
- 数据库与文件进行数据存储有哪些区别?
- js、angularjs 在ng-repeat里用ng-if隐藏某个标签
- const分别在C和C++语言里的含义和实现机制