Android视频裁剪(含裁剪View)
来源:互联网 发布:旧版本ios软件 编辑:程序博客网 时间:2024/05/16 06:16
概述:
整合视频裁剪实现、视频裁剪自定义View,两个项目的代码
使用方法:
// -- am_video_seekbar.getStartTime() 获取的是自定义View选择的开始裁剪时间 // -- am_video_seekbar.getEndTime() 获取的是自定义View选择的结束裁剪时间 public void initListener(){ // 点击视频裁剪 am_cut_igview.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 禁止点击 am_cut_igview.setEnabled(false); // -- TrimVideoUtils trimVideoUtils = TrimVideoUtils.getInstance(); trimVideoUtils.setTrimCallBack(new TrimVideoUtils.TrimFileCallBack() { @Override public void trimError(int eType) { Message msg = new Message(); msg.what = TrimVideoUtils.TRIM_FAIL; switch(eType){ case TrimVideoUtils.FILE_NOT_EXISTS: // 文件不存在 msg.obj = "视频文件不存在"; break; case TrimVideoUtils.TRIM_STOP: // 手动停止裁剪 msg.obj = "停止裁剪"; break; case TrimVideoUtils.TRIM_FAIL: default: // 裁剪失败 msg.obj = "裁剪失败"; break; } cutHandler.sendMessage(msg); } @Override public void trimCallback(boolean isNew, int startS, int endS, int vTotal, File file, File trimFile) { /** * 裁剪回调 * @param isNew 是否新剪辑 * @param starts 开始时间(秒) * @param ends 结束时间(秒) * @param vTime 视频长度 * @param file 需要裁剪的文件路径 * @param trimFile 裁剪后保存的文件路径 */ // =========== System.out.println("isNew : " + isNew); System.out.println("startS : " + startS); System.out.println("endS : " + endS); System.out.println("vTotal : " + vTotal); System.out.println("file : " + file.getAbsolutePath()); System.out.println("trimFile : " + trimFile.getAbsolutePath()); // -- cutHandler.sendEmptyMessage(TrimVideoUtils.TRIM_SUCCESS); } }); // 需要裁剪的视频路径 String videoPath = PLAY_URL; // 保存的路径 String savePath = ProUtils.getSDCartPath() + File.separator + System.currentTimeMillis() + "_cut.mp4"; // == final File file = new File(videoPath); // 视频文件地址 final File trimFile = new File(savePath);// 裁剪文件保存地址 // 获取开始时间 final int startS = (int) am_video_seekbar.getStartTime() / 1000; // 获取结束时间 final int endS = (int) am_video_seekbar.getEndTime() / 1000; // 进行裁剪 new Thread(new Runnable() { @Override public void run() { try { // 开始裁剪 TrimVideoUtils.getInstance().startTrim(true, startS, endS, file, trimFile); } catch (Exception e) { e.printStackTrace(); // 设置回调为null TrimVideoUtils.getInstance().setTrimCallBack(null); } } }).start(); // -- Toast.makeText(MainActivity.this, "开始裁剪 - 开始: " + startS + "秒, 结束: " + endS + "秒", Toast.LENGTH_SHORT).show(); } }); }
代码中,点击裁剪后,只是禁止按钮点击没有显示加载Dialog,自己根据项目需求搬运过去,以及计算关键帧的方法需要放在后台线程内进行计算,防止卡顿
// ========================================= // 计算关键帧可能会卡顿一下,最好是在后台运行 // ========================================= // 获取视频关键帧间隔 - 如果获取失败,则默认最少需要裁剪3秒长度的视频 float videoFrame = (float) TrimVideoUtils.getInstance().reckonFrameTime(new File(videoUrl), 3000); // 设置本地视频路径 - 默认裁剪模式,则不绘制播放背景 am_video_seekbar.setVideoUri(true, PLAY_URL, videoFrame); // -- Toast.makeText(MainActivity.this, "视频关键帧:" + videoFrame, Toast.LENGTH_SHORT).show();
计算关键帧的作用 - 裁剪开始时间 - 结束时间,中间的空白模块就是videoFrame,你可以限制最低裁剪多少秒,会自动计算视频总时间,以及View的宽度换算X轴对应的时间
// 具体可以看下我上面标注的两篇文章
代码下载
Android视频裁剪(含裁剪View)
0 0
- Android视频裁剪(含裁剪View)
- Android视频裁剪自定义View
- ANDROID 裁剪View
- android 自定义裁剪View
- Android之视频裁剪
- 视频裁剪,长度裁剪
- Android 自定义View实现照片裁剪框与照片裁剪
- Android自定义裁剪图片的View
- android 裁剪
- Android 使用FFmpeg 裁剪出正方形视频
- android视频适配与裁剪
- Android利用ffmpeg做视频裁剪
- 裁剪
- 裁剪
- 裁剪
- 裁剪
- ffmpeg裁剪合并视频
- ffmpeg裁剪合并视频
- HDU1166 -敌兵布阵(线段树)
- 我想是时候改行了
- 《Understanding the Linux kernel》学习笔记 Chapter 2: Memory Addressing
- Java,Android实现MP4裁剪功能
- hdu1754 - I Hate It(线段树RMQ)
- Android视频裁剪(含裁剪View)
- 最短路径算法 Dijkstra算法 Floyd算法 简述
- ue4-Network相关-组件及数据同步
- 创建 OVS 外部网络 ext_net - 每天5分钟玩转 OpenStack(144)
- 不要过度依赖JQuery(三)
- Hive 环境配置 详解
- JRebel破解及使用方法 在tomcat-maven-plugin及tomcat中的使用
- Leetcode 125. Valid Palindrome
- 1025. PAT Ranking (25)