ffmpeg命令旋转视频
第一步,解析视频文件
private static String processVideo(String filePath) {List<String> commend=new java.util.ArrayList<String>();commend.add("ffmpeg");//可以设置环境变量从而省去这行//d:\ffmpeg\ffmpeg.execommend.add("-i");commend.add(filePath);try {ProcessBuilder builder = new ProcessBuilder();builder.command(commend);builder.redirectErrorStream(true);Process p= builder.start();BufferedReader buf = null; // 保存ffmpeg的输出结果流String line = null;buf = new BufferedReader(new InputStreamReader(p.getInputStream()));StringBuffer sb= new StringBuffer();while ((line = buf.readLine()) != null) {sb.append(line);continue;}p.waitFor();//这里线程阻塞,将等待外部转换进程运行成功运行结束后,才往下执行return sb.toString();} catch (Exception e) {System.out.println("ffmpeg解析视频文件【" + filePath +"】失败!");return null;}}
第二步,获取相关metadata,获取视频的旋转角度
private static String getRotate() {String rotate = "";String result = processVideo(videoPath);System.out.println(result);if(StringUtils.isNotEmpty(result)){PatternCompiler compiler =new Perl5Compiler();try {String regexRotate ="rotate\\s*:\\s*(\\w*)\\s*";Pattern patternRotate = compiler.compile(regexRotate, Perl5Compiler.CASE_INSENSITIVE_MASK);PatternMatcher matcherRotate = new Perl5Matcher();if(matcherRotate.contains(result, patternRotate)){MatchResult re = matcherRotate.getMatch();rotate = re.group(1);System.out.println("rotate:"+rotate);}} catch (MalformedPatternException e) {System.out.println("获取【" + videoPath +"】视频信息失败!");}System.out.println("获取【" + videoPath +"】视频信息成功!");}else{System.out.println("执行成功!但未获取到【" + videoPath +"】视频信息!");}return rotate;}
第三步,根据rotate角度信息,调用旋转命令
private static boolean rotate90mp4(String rotate) {List<String> commend = new ArrayList<String>();//ffmpeg -i demo.mp4 -vf "transpose=1" o.mp4try {Runtime runtime = Runtime.getRuntime();
// String cmd = " ffmpeg -i "+ videoPath + " -vf \"transpose=1\" d:\\out\\vertical.mp4";StringBuffer buf = new StringBuffer();buf.append(" ffmpeg ");buf.append(" -i ");buf.append(videoPath);if(!StringUtils.isBlank(rotate)){buf.append(" -vf ");if(rotate.equals("90"))buf.append(" \"transpose=1\" ");else if(rotate.equals("180"))buf.append(" \"transpose=2,transpose=2\" ");else if(rotate.equals("270"))buf.append(" \"transpose=2\" ");}buf.append(destPath);runtime.exec(buf.toString());return true;} catch (Exception e) {e.printStackTrace();return false;}}
ffmpeg命令旋转视频相关推荐
- 学习使用ffmpeg命令给视频添加一张设计好的背景图片
学习使用ffmpeg命令给视频添加一张设计好的背景图片 效果如下 命令如下 效果如下 未加背景图片之前: 加上背景图片之后: 命令如下 ffmpeg -loop 1 -i shipin_bg.png ...
- 使用 ffmpeg 命令将视频转图片
使用 ffmpeg 命令将视频转图片 因为要从视频中提取只出现了一瞬间的画面,所以需要将视频转为图片.这里就使用 ffmpeg 进行操作,FFmpeg 配置参考:https://blog.csdn.n ...
- 使用java调用ffmpeg命令将视频分屏并音视频同时播放(二分屏)
实现想法 使用ffmpeg命令中的filter_complex(滤镜)参数来进行展示 引入javacv版本 <dependency><groupId>org.bytedeco& ...
- ffmpeg命令对视频文件进行截图(及命令解释)
例子:ffmpeg -y -i "cuplayer.avi" -title "Test" -vcodec xvid -s 368x208 -r 29.97 -b ...
- 使用FFmpeg命令给视频文件添加软字幕并解决播放器播放没有出现字幕的问题
添加软字幕这个过程不需要重新编解码,速度非常快.首先我们得准备各种格式的字幕文件,得到方法可以参考文章:<使用Arctime生成各种格式的字幕文件> 给mkv文件添加srt格式的软字幕: ...
- ffmpeg命令行视频剪辑与拼接
剪辑 ffmpeg -i 1.mp4 -ss 00:10:00 -c copy -to 00:20:00 2.mp4 原视频 开始时间 结束时间 输出的视频 ...
- FFmpeg命令行--视频转码
视频转码 ffmpeg -i input.ogv -vcodec h264 output.mp4 ffmpeg -i input.ogv -vcodec mpeg4 output.mp4 ffmpeg ...
- ffmpeg命令裁剪视频
例: ffmpeg -i input -vf crop=iw/3:ih:0:0 output ffmpeg -i input -vf crop=iw/3:ih:iw/3:0 output ffmpeg ...
- Android集成FFmpeg并实现视频转码
通过编译FFmpeg并集成到Android App中实现视频转码,也可以直接执行FFmpeg命令实现视频拼接.剪切.添加水印.旋转等操作,或者在C++中引入各模块头文件直接调用FFmpeg的API满足 ...
最新文章
- 【创新应用】小图像,大图景:AI彻底改变了显微镜技术
- 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-04-基于Python的LeNet之MLP
- GIF图片合集(用于网络请求图片用)
- j2ee 和 j2se_在J2SE应用中模拟CDI的会话和请求范围
- 汇编语言中xor指令_汇编语言XOR指令:对两个操作数进行逻辑(按位)异或操作...
- 【Javascript】javascript学习 六 七 JavaScript 变量/运算符
- C#判断检测网络是否连接
- uni-app 自定义loading 自定义toast 兼容小程序APP
- 项目管理文档<模板>
- 基于流程管理的企业风险管理模式
- IntelliJ IDEA 常用设置 主题颜色模式、字体、样式、背景自定义颜色及其背景图片(图文步骤)
- 关于直流输电方向一些行业动态
- java基础标识符,关键字,常量
- php中通快递下单 代码,中通开放平台 预约下单接口php
- raspberrypi python传感器_树莓派4B之火焰传感器模块(python3)
- 程序员必备CDN加速jsDelivr+Gihub远程仓库
- 3D打印将对零售模式产生颠覆影响,能否抓住机遇
- 2021年,从事数据分析行业前景如何?还能转行数据分析师吗?(上)
- 2021年CS保研经历(一):北邮CS夏令营、北师大AI夏令营、天津大学CS夏令营
- 大道至简之一:如何准确把握趋势