Android-使用ffmpeg视频处理
来源:互联网 发布:苏德瓜分波兰 知乎 编辑:程序博客网 时间:2024/04/28 07:55
来到新公司一直在做关于视频处理这块的工作,一直接触ffmpeg这个视频处理的库,这里简单说一下我自己踩过的坑。
我这里使用的是so库是:
System.loadLibrary("utility");
1a. 使用方式:
StringBuilder sb = new StringBuilder(); sb.append("ffmpeg"); sb.append(" -i"); sb.append(" " + vediooutput); sb.append(" -i"); sb.append(" " + imagePath); sb.append(" -filter_complex"); sb.append(" overlay=20:35"); sb1.append(" -vcodec libx264 -profile:v baseline -preset ultrafast -b:v 3000k -g 25"); sb.append(" -f mp4"); sb.append(" " + mergeVideo); int i = UtilityAdapter.FFmpegRun("", sb.toString());
一般用返回值i,来进行判断是否执行成功,0 为成功。 1 为失败。 为什么需要这个返回值呢,因为这个so库是不会造成异常信息及崩溃log,且我们需要一个返回值来进行之后的业务处理
2a. 分段视频合成
在项目中需要一个分段视频合成为一个整体视频的需求。录制使用一个第三方库这里就不介绍了。录制后默认给我返回的文件后缀为.mp4格式的文件,但ffmpeg在合成视频文件时只能支持.ts后缀的文件。我使用直接更改保存文件的后缀名的方式,直接将返回文件的后缀更改为.ts,这时进行合成的时候只能将视频集合中的第一个视频进行合成这时我尝试使用ffmpeng进行编码转换视频格式private String changeOutPath(String path) { StringBuilder sb = new StringBuilder("ffmpeg"); sb.append(" -i"); sb.append(" " + path); sb.append(" -codec"); sb.append(" copy"); sb.append(" -bsf"); sb.append(" h264_mp4toannexb"); sb.append(" " + path.replaceAll("mp4", "ts")); int i = UtilityAdapter.FFmpegRun("", sb.toString()); if (i == 0) { return path.replaceAll("mp4", "ts"); } else { return null; }使用此种方法后这个文件才真正的被转换成了.ts后缀的文件,且能进行视频合成
3a.视频合成
StringBuilder sb = new StringBuilder("ffmpeg"); sb.append(" -i"); String concat = "\"concat:"; for (String path : paths) { concat += changeOutPath(path); Log.e(TAG, "syntVideo: " + changeOutPath(path)); concat += "|"; } concat = concat.substring(0, concat.length() - 1); sb.append(" " + concat + "\""); sb.append(" -c"); sb.append(" copy"); sb.append(" -bsf:a"); sb.append(" aac_adtstoasc"); sb.append(" -movflags"); sb.append(" +faststart"); MyApplication.VIDEO_URL = "/finish.mp4";//修改为动态路径 vediooutput = MyApplication.VIDEO_PATH + MyApplication.VIDEO_URL; sb.append(" " + vediooutput); int a = UtilityAdapter.FFmpegRun("", sb.toString());此为视频合成代码
4a.添加水印
关于添加水印:使用ffmpeg添加水印的时候只能添加一个本地的file进去,至于这个file是怎么产生的就需要按照自己的业务需求进行处理了。这里就不再介绍了 StringBuilder sb1 = new StringBuilder(); sb1.append("ffmpeg"); sb1.append(" -i"); sb1.append(" " + vediooutput); sb1.append(" -i"); sb1.append(" " + imagePath); sb1.append(" -filter_complex"); sb1.append(" overlay=20:35"); sb1.append(" -vcodec libx264 -profile:v baseline -preset ultrafast -b:v 3000k -g 25"); sb1.append(" -f mp4"); sb1.append(" " + mergeVideo); int i = UtilityAdapter.FFmpegRun("", sb1.toString());这里iamgePath为你水印图片的路径
————————-
:人生追求的不仅仅是一个结果,更是一种希望;过程比结果更重要。
阅读全文
0 0
- Android-使用ffmpeg视频处理
- android ffmpeg视频处理
- Android FFMpeg 视频处理相关
- Android 使用FFmpeg 裁剪出正方形视频
- Ffmpeg 处理视频命令
- Ffmpeg 处理视频命令
- ffmpeg处理视频
- ffmpeg--处理视频旋转
- JAVA ffmpeg 视频处理
- 使用FFMPEG合并视频
- 使用FFMPEG合并视频
- 使用FFMPEG合并视频
- 使用FFMPEG合并视频
- 使用FFMPEG合并视频
- 使用ffmpeg合并视频
- java 视频处理 ffmpeg+mencoder
- FFmpeg 视频处理工具用法
- 视频处理——ffmpeg
- 输入成绩,并计算全班平均分及成绩大于平均分的人数
- javascript:;与javascript:void(0)使用介绍
- Jquery获取table第一行以及select2清空值
- 如何去对PDF文件进行快速分割
- 最新Windows下c++读写锁SRWLock介绍
- Android-使用ffmpeg视频处理
- 找回Kendo控件对应的DOM元素
- 使用HBulider的二维码功能来进行手机页面的调试
- Unity3D人物头顶名称与血条更新与绘制
- Bentley Map Enterprise V8i v08.11.09.805 CHS Win32 1DVD
- freeswitch mrcp 源码分析--数据接收(上)
- 交叉熵代价函数(作用及公式推导)
- STM32Cube工具学习笔记(一)Cube配置
- 读写锁(Read-Write Lock)