Giter Club home page Giter Club logo

yangjie10930 / epmedia Goto Github PK

View Code? Open in Web Editor NEW
2.4K 73.0 532.0 26.72 MB

Android上基于FFmpeg开发的视频处理框架,简单易用,体积小,帮助使用者快速实现视频处理功能。包含以下功能:剪辑,裁剪,旋转,镜像,合并,分离,变速,添加LOGO,添加滤镜,添加背景音乐,加速减速视频,倒放音视频。 The video processing framework based on FFmpeg developed on Android is simple, easy to use, and small in size, helping users quickly realize video processing functions. Contains the following functions: editing, cropping, rotating, mirroring, merging, separating, variable speed, adding LOGO, adding filters, adding background music, accelerating and decelerating video, rewinding audio and video.

License: MIT License

Java 6.06% Makefile 0.28% C 93.66%
video-editor ffmpeg-logo android-video-editor android ffmpeg

epmedia's Introduction

中文 / English

EpMedia

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

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

Demo点这里

V1.0.0版本更新说明
  1. 更新FFmpeg至4.2.2版本,使用ndk-r21编译,采用clang工具;
  2. 新增x86_64支持;
  3. 移除添加文字的功能(由于依赖库编译的一些问题,该方法暂时无法使用,后续会加回,如果需要此功能,请使用v0.9.5版本);
  4. 添加MediaCodec的支持。

使用方法:

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

单个视频处理:

  • 创建待处理视频:
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());
  • 添加背景音乐
//参数分别是视频路径,音频路径,输出路径,原始视频音量(1为100%,0.7为70%,以此类推),添加音频音量
EpEditor.music(videoPath, audioPath, outfilePath, 1, 0.7, new OnEditorListener());
  • 分离音视频
//参数分别是视频路径,输出路径,输出类型
EpEditor.demuxer(videoPath, outfilePath,EpEditor.Format.MP3, new OnEditorListener());
  • 视频变速
//参数分别是视频路径,输出路径,变速倍率(仅支持0.25-4倍),变速类型(VIDEO-视频(选择VIDEO的话则会屏蔽音频),AUDIO-音频,ALL-视频音频同时变速)
EpEditor.changePTS(videoPath, outfilePath, 2.0f, EpEditor.PTS.ALL, new OnEditorListener());
  • 音视频倒放
//参数分别是视频路径,输出路径,视频是否倒放,音频是否倒放(两个都选true的话,音视频都倒放,视频ture音频false的话,输出倒放的无音频视频,视频false音频ture的话,输入倒放的音频,音频的倒放也用这个配置)
EpEditor.reverse(videoPath, outfilePath, true, true, new OnEditorListener());
  • 视频转图片
//参数分别是视频路径,输出路径(路径用集合的形式,比如pic%03d.jpg,支持jpg和png两种图片格式),输出图片的宽度,输出图片的高度,每秒输出图片数量(2的话就是每秒2张,0.5f的话就是每两秒一张)
EpEditor.video2pic(videoPath, outfilePath, 720, 1080, 2, new OnEditorListener());
  • 图片转视频
//参数分别是图片集合路径,输出路径,输出视频的宽度,输出视频的高度,输出视频的帧率
EpEditor.pic2video(picPath, outfilePath, 480, 320, 30, new OnEditorListener());

多个视频处理&合并

  • 合并视频(支持对要合并的视频进行其他处理操作)
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());
  • 无损合并视频(对视频格式严格,需要分辨率,帧率,码率都相同,不支持对要合并的视频进行其他处理操作,该方法合并速度很快,另:两段同格式的音频拼接也可使用该方法)
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());

自定义命令

  • 输入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) {

	}
});

epmedia's People

Contributors

yangjie10930 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

epmedia's Issues

如果输入文件名有空格应该怎么办?

您好,请问输入文件名有空格时应该怎么处理?比如下面这个命令
ffmpeg -y -ss 0.0 -t 60.0 -i "/storage/emulated/0/test mpeg4.mp4" -r 30 -g 30 /storage/emulated/0/out.mp4

尝试将用空格分割字符串的逻辑改了,并且为输入有空格的文件加了引号,但是仍然报文件找不到
"/storage/emulated/0/test mpeg4.mp4": No such file or directory

某些情况下,添加背景音乐失败

你好,我录制了一段视频,压缩视频,然后用压缩之后的视频添加背景音乐,会添加失败。log显示处理到最后一秒就不再继续往下执行了,但并没有报错。我写了一个demo,并和测试用的视频和音频一起发送到你邮箱了,不知道你有没有时间帮忙调试一下??

添加背景音乐出错

你好,兄弟。我遍历本地音乐文件,然后给视频添加音乐的时候,报这个错误。WVMExtractor: Failed to open libwvm.so: dlopen failed: library "libwvm.so" not found;想问一下这是因为什么呢

请问这个库能不能合成视频?

最近遇到个问题,要把音频、文字和图片合成一个视频文件,我对视频这块是小白。楼主你当初是怎么学的呢?或者有没有学习资料之类的?

EpMedia混淆问题

大神,我用debug打包出来的APK运行剪辑没问题,但是用release打包出来的APK运行剪辑闪退!大佬求解答...

执行自定义命令出错

命令是:

-i /storage/emulated/0/test.ts -acodec copy -vcodec copy -absf aac_adtstoasc /storage/emulated/0/output111.mp4

相同的命令在其他命令行工具可以正常执行,错误日志:

Invalid data found when processing input

提取图片失败

我从视频(.mp4)提取图片,命令:

-y -i /storage/emulated/0/soul/audio/cache/74c05f79-0a03-4046-9225-ebc0111e7b62.mp4 -an -r 1 -ss 0 -t 7 /storage/emulated/0/Pictures/extract_picture%03d.jpg

最后失败,提示:

Unable to find a suitable output format for '/storage/emulated/0/Pictures/extract_picture%03d.jpg'

是什么原因,不支持动态生成文件吗?

视频加速

我使用您自定义命令,调用ffmpeg -i input.mkv -filter:v "setpts=0.5*PTS" output.mkv,将视频的速度提高一倍,失败,能帮忙看下是什么原因么

添加本地背景音乐报错

java.lang.IllegalStateException
at android.media.MediaExtractor.getTrackCount(Native Method)
at Jni.TrackUtils.selectVideoTrack(TrackUtils.java:21)
at VideoHandle.EpEditor.music(EpEditor.java:284)
这个是什么问题啊

您好,可否在EpEditor这个类增加 destroy 方法

您好

感谢您开发这麼好用的工具
最近使用这个专案合併 video 的时候,发现传进EpEditor的 context 对象
会导致 memory leak

是否能在EpEditor 内增加 destroy 方法将 context 对象清掉呢

谢谢

merge出现失败

merge失败了 报错信息为:
Stream specifier ':a' in filtergraph description [0:v]scale=480:360,setdar=480/360[outv0];[1:v]scale=480:360,setdar=480/360[outv1];[outv0][outv1]concat=n=2:v=1:a=0[outv];[0:a][1:a]concat=n=2:v=0:a=1[outa] matches no streams.

作者大哥给分析分析

视频访问不了

自己录制的视频 地址传进去 报错Decoder (codec amr_nb) not found for input stream #0:1
是为什么啊

视频压缩

您好,我想问一下,修改这个
outputOption.bitRate = 10;
可以实现视频压缩吗

目前,不支持MOV格式视频

您好,大神,往后完善中,会不会对视频格式这块做完善呢?我用了你的demo,测试过,目前只支持MP4格式视频,不支持mov格式。

大神,你好,请问下音乐背景的问题。

如果添加的音乐背景比较短,而视频比较长,我想实现音乐背景可以循环播放,知道视频结束。该怎么做呢?现在我看demo里面是背景音乐是只播放一遍的。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.