EpMedia

Project Url: yangjie10930/EpMedia
Introduction: Android 上基于 FFmpeg 开发的视频处理框架,简单易用,体积小,帮助使用者快速实现视频处理功能。包含以下功能:剪辑,裁剪,旋转,镜像,合并,分离,变速,添加 LOGO,添加滤镜,添加背景音乐,加速减速视频,倒放音视频。
More: Author   ReportBugs   
Tags:

基于 FFmpeg 开发的视频处理框架,简单易用,体积小,帮助使用者快速实现视频处理功能。包含以下功能:剪辑,裁剪,旋转,镜像,合并,分离,添加 LOGO,添加滤镜,添加背景音乐,加速减速视频,倒放音视频。

目前还在完善和修复一些 bug,如果使用中遇到问题请在 Issues 留言或联系我:yangjie10930@sina.cn。

如遇到报错,请把 logcat 信息一并贴出。

好用的话麻烦给个 star,感谢您的支持与鼓励 O(∩_∩)O

Demo 点这里

2018/4/17 更新内容:

1.新增视频转图片功能
2.新增图片转视频功能

2018/3/2 更新内容:

1.新增 HEVC 格式解码器,支持 4K 视频
2.新增对图片的支持(jpeg,png)
3.修复部分 Bug

使用方法:

  • build.gradle 里添加:
    allprojects {
          repositories {
              ...
              maven { url 'https://jitpack.io' }
          }
      }
    
  • 添加 gradle 依赖:
    compile 'com.github.yangjie10930:EpMedia:v0.9.5'
    

    单个视频处理:

  • 创建待处理视频:
    EpVideo epVideo = new EpVideo(url);
    
  • 剪辑
    //一个参数为剪辑的起始时间,第二个参数为持续时间,单位:秒
    epVideo.clip(1,2);//从第一秒开始,剪辑两秒
    
  • 裁剪
    //参数分别是裁剪的宽,高,起始位置 X,起始位置 Y
    epVideo.crop(480,360,0,0);
    
  • 旋转和镜像
    //第一个参数为旋转角度,第二个参数为是否镜像,仅支持 90,180,270 度旋转
    epVideo.rotation(90,true);
    
  • 添加文字
    //参数分别是添加位置的 X,Y 坐标,文字的字号(单位 px),文字颜色,字体文件的路径,内容,Time 类为显示的起始时间和持续时间
    epVideo.addText(10,10,35,"red",ttfPath,text);
    epVideo.addText(new EpText(10,10,35,"red",ttfPath,text,new EpText.Time(3,5)));
    
  • 添加 logo
    //添加图片类
    //参数为图片路径,X,Y,图片的宽,高,是否是动图(仅支持 png,jpg,gif 图片,如果是 gif 图片,最后一个参数为 true)
    EpDraw epDraw = new EpDraw(filePath,10,10,50,50,false);
    epVideo.addDraw(epDraw);
    或
    epVideo.addDraw(new EpDraw(filePath,10,10,50,50,false,3,5));//最后两个参数为显示的起始时间和持续时间
    
  • 添加自定义滤镜
    //自定义滤镜,ffmpeg 命令支持的滤镜都支持
    //详细效果可参考:http://blog.csdn.net/u012027644/article/details/77833484
    //具体内容参见 ffmpeg filter 官网:http://www.ffmpeg.org/ffmpeg-filters.html
    //举例 String filter = "lutyuv=y=maxval+minval-val:u=maxval+minval-val:v=maxval+minval-val";//底片效果
    epVideo.addFilter(filter);
    
  • 处理单个视频

    EpVideo epVideo = new EpVideo(url);
    //输出选项,参数为输出文件路径(目前仅支持 mp4 格式输出)
    EpEditor.OutputOption outputOption = new EpEditor.OutputOption(outFile);
    outputOption.width = 480;//输出视频宽,如果不设置则为原始视频宽高
    outputOption.height = 360;//输出视频高度
    outputOption.frameRate = 30;//输出视频帧率,默认 30
    outputOption.bitRate = 10;//输出视频码率,默认 10
    EpEditor.exec(epVideo, outputOption, new OnEditorListener() {
      @Override
      public void onSuccess() {
    
      }
    
      @Override
      public void onFailure() {
    
      }
    
      @Override
      public void onProgress(float progress) {
          //这里获取处理进度
      }
    });
    
  • 添加背景音乐

    //参数分别是视频路径,音频路径,输出路径,原始视频音量(1 为 100%,0.7 为 70%,以此类推),添加音频音量
    EpEditor.music(videoPath, audioPath, outfilePath, 1, 0.7, new OnEditorListener() {
      @Override
      public void onSuccess() {
    
      }
    
      @Override
      public void onFailure() {
    
      }
    
      @Override
      public void onProgress(float progress) {
          //这里获取处理进度
      }
    });
    
  • 分离音视频

    //参数分别是视频路径,输出路径,输出类型
    EpEditor.demuxer(videoPath, outfilePath,EpEditor.Format.MP3, new OnEditorListener() {
      @Override
      public void onSuccess() {
    
      }
    
      @Override
      public void onFailure() {
    
      }
    
      @Override
      public void onProgress(float progress) {
          //这里获取处理进度
      }
    });
    
  • 视频变速

    //参数分别是视频路径,输出路径,变速倍率(仅支持 0.25-4 倍),变速类型(VIDEO-视频(选择 VIDEO 的话则会屏蔽音频),AUDIO-音频,ALL-视频音频同时变速)
    EpEditor.changePTS(videoPath, outfilePath, 2.0f, EpEditor.PTS.ALL, new OnEditorListener() {
      @Override
      public void onSuccess() {
    
      }
    
      @Override
      public void onFailure() {
    
      }
    
      @Override
      public void onProgress(float progress) {
    
      }
    });
    
  • 音视频倒放

    ////参数分别是视频路径,输出路径,视频是否倒放,音频是否倒放(两个都选 true 的话,音视频都倒放,视频 ture 音频 false 的话,输出倒放的无音频视频,视频 false 音频 ture 的话,输入倒放的音频,音频的倒放也用这个配置)
    EpEditor.reverse(videoPath, outfilePath, true, true, new OnEditorListener() {
      @Override
      public void onSuccess() {
    
      }
    
      @Override
      public void onFailure() {
    
      }
    
      @Override
      public void onProgress(float progress) {
    
      }
    });
    
  • 视频转图片

    ////参数分别是视频路径,输出路径(路径用集合的形式,比如 pic%03d.jpg,支持 jpg 和 png 两种图片格式),输出图片的宽度,输出图片的高度,每秒输出图片数量(2 的话就是每秒 2 张,0.5f 的话就是每两秒一张)
    EpEditor.video2pic(videoPath, outfilePath, 720, 1080, 2, new OnEditorListener() {
      @Override
      public void onSuccess() {
    
      }
    
      @Override
      public void onFailure() {
    
      }
    
      @Override
      public void onProgress(float progress) {
    
      }
    });
    
  • 图片转视频

    ////参数分别是图片集合路径,输出路径,输出视频的宽度,输出视频的高度,输出视频的帧率
    EpEditor.pic2video(picPath, outfilePath, 480, 320, 30, new OnEditorListener() {
      @Override
      public void onSuccess() {
    
      }
    
      @Override
      public void onFailure() {
    
      }
    
      @Override
      public void onProgress(float progress) {
    
      }
    });
    

    多个视频处理&合并

  • 合并视频(支持对要合并的视频进行其他处理操作)

    ArrayList<EpVideo> epVideos = new ArrayList<>();
    epVideos.add(new EpVideo(url));//视频 1
    epVideos.add(new EpVideo(url2));//视频 2
    epVideos.add(new EpVideo(url3));//视频 3
    //输出选项,参数为输出文件路径(目前仅支持 mp4 格式输出)
    EpEditor.OutputOption outputOption = new EpEditor.OutputOption(outFile);
    outputOption.width = 480;//输出视频宽,默认 480
    outputOption.height = 360;//输出视频高度,默认 360
    outputOption.frameRate = 30;//输出视频帧率,默认 30
    outputOption.bitRate = 10;//输出视频码率,默认 10
    EpEditor.merge(epVideos, outputOption, new OnEditorListener() {
      @Override
      public void onSuccess() {
    
      }
    
      @Override
      public void onFailure() {
    
      }
    
      @Override
      public void onProgress(float progress) {
          //这里获取处理进度
      }
    });
    
  • 无损合并视频(对视频格式严格,需要分辨率,帧率,码率都相同,不支持对要合并的视频进行其他处理操作,该方法合并速度很快,另:两段同格式的音频拼接也可使用该方法)

    ArrayList<EpVideo> epVideos = new ArrayList<>();
    epVideos.add(new EpVideo(url));//视频 1
    epVideos.add(new EpVideo(url2));//视频 2
    epVideos.add(new EpVideo(url3));//视频 3
    EpEditor.mergeByLc(epVideos, new EpEditor.OutputOption(outFile), new OnEditorListener() {
      @Override
      public void onSuccess() {
    
      }
    
      @Override
      public void onFailure() {
    
      }
    
      @Override
      public void onProgress(float progress) {
              //这里获取处理进度
      }
    });
    

    自定义命令

  • 输入 ffmpeg 命令即可(起头不用输 ffmpeg,例子"-i input.mp4 -ss 0 -t 5 output.mp4",第二个参数为视频长度,单位微秒,可以填 0)

    EpEditor.execCmd("", 0, new OnEditorListener() {
      @Override
      public void onSuccess() {
    
      }
    
      @Override
      public void onFailure() {
    
      }
    
      @Override
      public void onProgress(float progress) {
    
      }
    });
    
Support Me
Apps
About Me
Google+: Trinea trinea
GitHub: Trinea