第一步,解析视频文件

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命令旋转视频相关推荐

  1. 学习使用ffmpeg命令给视频添加一张设计好的背景图片

    学习使用ffmpeg命令给视频添加一张设计好的背景图片 效果如下 命令如下 效果如下 未加背景图片之前: 加上背景图片之后: 命令如下 ffmpeg -loop 1 -i shipin_bg.png ...

  2. 使用 ffmpeg 命令将视频转图片

    使用 ffmpeg 命令将视频转图片 因为要从视频中提取只出现了一瞬间的画面,所以需要将视频转为图片.这里就使用 ffmpeg 进行操作,FFmpeg 配置参考:https://blog.csdn.n ...

  3. 使用java调用ffmpeg命令将视频分屏并音视频同时播放(二分屏)

    实现想法 使用ffmpeg命令中的filter_complex(滤镜)参数来进行展示 引入javacv版本 <dependency><groupId>org.bytedeco& ...

  4. ffmpeg命令对视频文件进行截图(及命令解释)

    例子:ffmpeg -y -i "cuplayer.avi" -title "Test" -vcodec xvid -s 368x208 -r 29.97 -b ...

  5. 使用FFmpeg命令给视频文件添加软字幕并解决播放器播放没有出现字幕的问题

    添加软字幕这个过程不需要重新编解码,速度非常快.首先我们得准备各种格式的字幕文件,得到方法可以参考文章:<使用Arctime生成各种格式的字幕文件> 给mkv文件添加srt格式的软字幕: ...

  6. ffmpeg命令行视频剪辑与拼接

    剪辑 ffmpeg -i 1.mp4 -ss 00:10:00 -c copy -to 00:20:00 2.mp4 原视频          开始时间            结束时间   输出的视频 ...

  7. FFmpeg命令行--视频转码

    视频转码 ffmpeg -i input.ogv -vcodec h264 output.mp4 ffmpeg -i input.ogv -vcodec mpeg4 output.mp4 ffmpeg ...

  8. 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 ...

  9. Android集成FFmpeg并实现视频转码

    通过编译FFmpeg并集成到Android App中实现视频转码,也可以直接执行FFmpeg命令实现视频拼接.剪切.添加水印.旋转等操作,或者在C++中引入各模块头文件直接调用FFmpeg的API满足 ...

最新文章

  1. 【创新应用】小图像,大图景:AI彻底改变了显微镜技术
  2. 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-04-基于Python的LeNet之MLP
  3. GIF图片合集(用于网络请求图片用)
  4. j2ee 和 j2se_在J2SE应用中模拟CDI的会话和请求范围
  5. 汇编语言中xor指令_汇编语言XOR指令:对两个操作数进行逻辑(按位)异或操作...
  6. 【Javascript】javascript学习 六 七 JavaScript 变量/运算符
  7. C#判断检测网络是否连接
  8. uni-app 自定义loading 自定义toast 兼容小程序APP
  9. 项目管理文档<模板>
  10. 基于流程管理的企业风险管理模式
  11. IntelliJ IDEA 常用设置 主题颜色模式、字体、样式、背景自定义颜色及其背景图片(图文步骤)
  12. 关于直流输电方向一些行业动态
  13. java基础标识符,关键字,常量
  14. php中通快递下单 代码,中通开放平台 预约下单接口php
  15. raspberrypi python传感器_树莓派4B之火焰传感器模块(python3)
  16. 程序员必备CDN加速jsDelivr+Gihub远程仓库
  17. 3D打印将对零售模式产生颠覆影响,能否抓住机遇
  18. 2021年,从事数据分析行业前景如何?还能转行数据分析师吗?(上)
  19. 2021年CS保研经历(一):北邮CS夏令营、北师大AI夏令营、天津大学CS夏令营
  20. 大道至简之一:如何准确把握趋势

热门文章

  1. 快播大屏幕作为快播的第一款硬件产品
  2. 华泰股票交易接口如何了解新债发行信息?
  3. 跨界融合,筑梦前行 | 清华大学大数据研究中心RONG奖学金答辩会成功举办
  4. CAD模板怎么设置?CAD模板设置技巧
  5. 【python处理过程中的数据另保存为CSV文件】
  6. 周赛 2019-12-15
  7. Linux嵌入式驱动开发02——驱动编译到内核
  8. javascript毫秒计时器_基于javascript实现精确到毫秒的倒计时限时抢购
  9. Magic Live智慧引擎发力,荣耀吹响智慧服务变革号角
  10. 迅雷下载卡99.99%不动了?