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
原创粉丝点击