Android利用ffmpeg做视频裁剪
来源:互联网 发布:java调用jquery 编辑:程序博客网 时间:2024/05/17 05:42
根据自己需求,编译so,或者用网上搜现成的;https://github.com/FFmpeg/FFmpeg
时长裁切:
ffmpeg -i src.mp4 -ss 3 -t 10 out.mp4
3表示起始时间,10表示长度,也就表示视频裁切出来是3-13s的视频;
尺寸裁切:
ffmpeg -i src.mp4 -strict -2 -vf crop=1080:500:0:420 -preset fast out.mp4
1080表示宽度;500表示高度;0表示X起始点;420表示Y起始点;
-preset fast 会保持原有清晰度;
//-ss 0 -t 5 时间裁切//-strict -2 -vf crop=500:500:0:100 尺寸裁切String cmd = "/data/data/" + context.getPackageName() + "/ffmpeg" + " -y -i " + srcVideoPath + " -ss " + start + " -t " + duration + " -strict -2 -vf crop=" + width + ":" + height + ":" + x + ":" + y + " -preset fast " + destPath;-y 会覆盖输出文件;
Github源码:https://github.com/miLLlulei/VideoCrop ,欢迎大家来star,谢谢;
下面是一些其他方法:
/** * 获取本地视频信息 */public static LocalVideoBean getLocalVideoInfo(String path) { LocalVideoBean info = new LocalVideoBean(); info.src_path = path; android.media.MediaMetadataRetriever mmr = new android.media.MediaMetadataRetriever(); try { mmr.setDataSource(path); info.duration = (Long.valueOf(mmr.extractMetadata(android.media.MediaMetadataRetriever.METADATA_KEY_DURATION))); info.width = Integer.valueOf(mmr.extractMetadata(android.media.MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH)); info.height = Integer.valueOf(mmr.extractMetadata(android.media.MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT)); } catch (Exception e) { e.printStackTrace(); } finally { mmr.release(); } return info;}
/** * 获取视频帧列表 * * @param path * @param count 期望个数 * @param width 期望压缩后宽度 * @param height 期望压缩后高度 * @param listener */ public static void getLocalVideoBitmap(final String path, final int count, final int width, final int height, final OnBitmapListener listener) { AsyncTask<Object, Object, Object> task = new AsyncTask<Object, Object, Object>() { @Override protected Object doInBackground(Object... params) { android.media.MediaMetadataRetriever mmr = new android.media.MediaMetadataRetriever(); try { mmr.setDataSource(path); long duration = (Long.valueOf(mmr.extractMetadata(android.media.MediaMetadataRetriever.METADATA_KEY_DURATION))) * 1000; long inv = (duration / count); for (long i = 0; i < duration; i += inv) { //注意getFrameAtTime方法的timeUs 是微妙, 1us * 1000 * 1000 = 1s Bitmap bitmap = mmr.getFrameAtTime(i, MediaMetadataRetriever.OPTION_CLOSEST);// Log.d(VideoFFCrop.TAG, "getFrameAtTime "+ i + "===" + bitmap.getWidth() + "===" + bitmap.getHeight()); Bitmap destBitmap = Bitmap.createScaledBitmap(bitmap, width, height, true); Log.d(VideoFFCrop.TAG, "getFrameAtTime " + i + "===" + destBitmap.getWidth() + "===" + destBitmap.getHeight()); bitmap.recycle(); publishProgress(destBitmap); } } catch (Throwable e) { e.printStackTrace(); } finally { mmr.release(); } return null; } @Override protected void onProgressUpdate(Object... values) { if (listener != null) { listener.onBitmapGet((Bitmap) values[0]); } } @Override protected void onPostExecute(Object result) { } }; task.execute(); } public interface OnBitmapListener { void onBitmapGet(Bitmap bitmap); }
阅读全文
1 0
- Android利用ffmpeg做视频裁剪
- 利用 FFmpeg 在 Android 上做视频编辑
- Android 使用FFmpeg 裁剪出正方形视频
- 利用qt和ffmpeg软件来制作视频裁剪工具
- 利用qt和ffmpeg软件来制作视频裁剪工具
- 利用qt和ffmpeg软件来制作视频裁剪工具
- 利用ffmpeg对视频进行裁剪与拼接
- ffmpeg裁剪合并视频
- ffmpeg裁剪合并视频
- ffmpeg裁剪合并视频
- ffmpeg裁剪合并视频
- ffmpeg裁剪合并视频
- ffmpeg裁剪合并视频
- ffmpeg裁剪合并视频
- ffmpeg裁剪合并视频
- ffmpeg命令裁剪视频
- ffmpeg 裁剪视频
- ffmpeg裁剪合并视频
- 手机端APP与游戏测试过程
- 瀛︿細鏁版嵁搴撹?鍐欏垎绂汇€佸垎琛ㄥ垎搴撯€斺€旂敤Mycat锛岃繖涓€绡囧氨澶熶簡锛-- IT绫崇矇
- 前端路由实现原理
- 多线程基本概念(1)
- Python 数据类型:集合
- Android利用ffmpeg做视频裁剪
- 使用maven配置dobbo的时候出错
- 定制化IP KVM方案
- java 设计模式学习 建造者模式
- HashMap源码分析
- python安装那些坑
- 搭建私有TLS认证registry
- undefined 和 null 的区别 搜索页面记忆功能展示
- 搭建ELK(ElasticSearch+Logstash+Kibana)日志分析系统(七) elasticsearch.yml配置文件详细说明