android-ffmpeg-java-demo
https://github.com/shutup/android-ffmpeg-java-demo
说明
以前一直希望可以做一个播放器,所以当时就接触了ffmpeg这个库,当时打算使用JNI的方式进行底层的调用,无奈整个逻辑比较麻烦,因此进度一再搁浅。
后来进一步的了解中发现,其实对于视频的处理,方法是很多的
- 直接以C的代码进行处理,调用ffmpeg库的函数
- JAVA在命令行调用C的程序进行处理,调用ffmpeg程序
经过一段时间的探索,对于ffmpeg的交叉编译已经没什么大问题了,那么我们就来使用这个库吧。
这个demo主要演示,通过JAVA在命令行调用FFMPEG的二进制程序来完成一些视频的处理功能。这个ffmpeg的二进制程序是在交叉编译的过程中生成的。使用的java wrapper是guardianproject's android-ffmpeg-java,当然我自己有做一些优化,比如使用我自己编译的最新的ffmpeg替换了它原版使用的ffmpeg程序,开发环境也换到了android studio,还添加了一些方法的实现。
视频剪切
原理:JAVA开启一个命令行,在命令行中调用ffmpeg的程序,根据传入的参数进行相关处理。
ffmpeg -ss 00:00:00 -t 00:00:30 -i test.mp4 -vcodec copy -acodec copy output.mp4
* -ss 指定从什么时间开始
* -t 指定需要截取多长时间
* -i 指定输入文件
视频合并
原理:JAVA开启一个命令行,在命令行中调用ffmpeg的程序,根据传入的参数进行相关处理。
//进行视频的合并
ffmpeg -f concat -i list.txt -c copy concat.mp4
网友评论
使用
ffmpeg -ss 00:00:00 -t 00:00:30 -i test.mp4 -vcodec copy -acodec copy output.mp4
对视频进行裁剪,因为没有进行重新编码,所以速度非常快,但裁剪得到的视频,在播放的时候,视频的开始或结束可能会有黑帧的情况,请问有遇过这样的情况吗
11-18 15:51:48.130 10599-13188/com.shutup.ffmpegcmdutils D/FFMpeghh: shellOut() returned: /storage/emulated/0/kascend/chushoulu/clip_video/hehe.mp4: Permission denied
11-18 15:51:53.625 10599-10599/com.shutup.ffmpegcmdutils D/FFMpeghh: processComplete() returned: 1