美文网首页Android DevUtils 快捷开发工具库
Java, Android 实现 MP4 裁剪功能

Java, Android 实现 MP4 裁剪功能

作者: afkT | 来源:发表于2019-07-29 02:53 被阅读0次

    VideoClip - Github

    Java 实现 MP4 裁剪功能

    概述

    主要用的是 mp4Parser (根据关键帧进行裁剪) - 自己进行封装以及内部代码处理等, 便于使用

    MP4的分割和拼接介绍

    mp4Parser - Github

    具体实现与使用:

    TrimVideoUtils 裁减视频工具类

    使用方法:

    package com.clip;
    
    import java.io.File;
    import java.io.IOException;
    
    import com.clip.TrimVideoUtils.TrimFileCallBack;
    
    public class ClipMain {
    
        public static void main(String[] args) {
            cutVideo();
        }
    
        public static void cutVideo() {
            TrimVideoUtils trimVideoUtils = TrimVideoUtils.getInstance();
            // 设置回调
            trimVideoUtils.setTrimCallBack(new TrimFileCallBack() {
                @Override // 裁剪失败回调
                public void trimError(int eType) {
                    switch(eType){
                    case TrimVideoUtils.FILE_NOT_EXISTS: // 文件不存在
                        System.out.println("视频文件不存在");
                        break;
                    case TrimVideoUtils.TRIM_STOP: // 手动停止裁剪
                        System.out.println("停止裁剪");
                        break;
                    case TrimVideoUtils.TRIM_FAIL:
                    default: // 裁剪失败
                        System.out.println("裁剪失败");
                        break;
                    }
                }
                @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());
                }
            });
            // ========
            // 需要裁剪的视频路径
            String videoPath = "E:\\clip\\Xperia.mp4";
            // 保存的路径
            String savePath = "E:\\clip\\save\\Xperia_" + System.currentTimeMillis() + "_cut.mp4";
            // ==
            final File file = new File(videoPath); // 视频文件地址
            final File trimFile = new File(savePath);// 裁剪文件保存地址
            final int startS = 1; // 开始时间(秒数 - 非毫秒)
            final int endS = 20; // 结束时间(秒数 - 非毫秒)
            // 进行裁剪
            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();
    
            // 停止裁剪
            // TrimVideoUtils.getInstance().stopTrim();
        }
    }
    

    注意事项

    首先该裁减视频是以关键帧进行裁减,例如视频时长 15秒 然后选择裁减 10-14秒这个时间段,如果该视频关键帧 0.x秒一帧, 则裁减出来接近就是10-14秒这个区间段

    但是有部分视频关键帧间隔比较大,就会导致虽然选择裁减10-14区间段,但是可能并不是从10秒开始,而是自动找距离10秒最近的关键帧秒数进行裁剪

    相关文章

      网友评论

        本文标题:Java, Android 实现 MP4 裁剪功能

        本文链接:https://www.haomeiwen.com/subject/bctvrctx.html