参考地址: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(); } } } }
上面是裁剪的方法可以直接调用,到这里就可以实现裁剪了。完整代码可以在下面留言