第一步,解析视频文件
private static String processVideo(String filePath) {
List<String> commend=new java.util.ArrayList<String>();
commend.add("ffmpeg");//可以设置环境变量从而省去这行//d:\ffmpeg\ffmpeg.exe
commend.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.mp4 try { 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命令组成,用于自动化执行一系列转换任务。例如,`zhuanhua.bat`和`hzzhuan.bat`可能就是这样的批处理脚本,它们包含了针对不同需求的转换指令。这些脚本可以指定输入...
在FFmpeg命令行中,我们可以使用以下命令来旋转一个图像90度: ```bash ffmpeg -i input.jpg -vf "transpose=1" output.jpg ``` 这里的`-vf`参数指定视频过滤器,`transpose=1`则表示执行90度逆时针旋转。如果需要...
速度非常快几秒钟搞定,我们都知道视频旋转需要剪辑软件或者格式转换软件,但是处理起来非常麻烦需要逐个调参数,转换软件也需要重新渲染编码转换速度惨不忍睹,有没有直接旋转视频不用编辑和重新渲染编码的方法呢?...
在这个"视频无损旋转ffmpeg任意角度可批量操作"的压缩包中,我们可以看到几个关键点,包括如何使用 FFmpeg 进行视频的无损旋转、批量处理以及相关脚本的使用。 1. **视频无损旋转**:通常,视频旋转可能会导致质量...
为了监控CPU核心利用率和视频压缩率,我们需要在后台线程中定期调用`System.Diagnostics.Process`类,通过`Process.StartInfo`设置命令行参数,执行FFmpeg命令并捕获其输出。可以使用正则表达式解析FFmpeg的实时统计...
- 运行提供的Java主程序,它会调用FFmpeg命令进行视频格式转换,并添加透明水印。 - 主方法的代码可能会包含创建FFmpeg命令字符串,以及使用Java的ProcessBuilder或Runtime类执行命令的过程。 5. **优化与进阶**...
`-vf` 参数允许我们应用视频过滤器,而 `transpose` 是一个具体的过滤器,用于旋转视频帧。 以下是几种常见的旋转操作: 1. **90度顺时针旋转**: ```bash ffmpeg -i input.mp4 -vf "transpose=1" output.mp4 `...
FFmpeg命令主要分为以下几类: - 基本信息查询命令:用于查询FFmpeg支持的编解码器、格式、设备、协议、滤镜等。 - 录制:用于捕获屏幕或音频。 - 分解/复用:用于从音视频文件中分离出音视频流或将它们合并。 - ...
FFmpeg_SDK编程及ffmpeg命令的学习是多媒体开发人员的必修课,特别是对于初学者来说,理解和掌握其核心概念和技术至关重要。下面将根据提供的文件名详细阐述FFmpeg的相关知识点。 1. **FFmpeg流程分析** FFmpeg的...
5. **裁剪、缩放与旋转**:FFmpeg 支持对视频进行视觉编辑,包括裁剪不需要的部分、调整大小以及旋转视频方向。这对于处理拍摄时方向错误或需要适应不同显示比例的视频非常有用。 6. **滤镜应用**:FFmpeg 包含一...
在这个场景中,我们主要讨论如何使用 FFmpeg 命令来分离3D格式的视频。 3D 视频通常有两种主要的格式:3D 左右和3D 上下。这些3D视频可以封装在 mp4、mkv、AVI、mov 等不同的容器格式中。在本文中,我们将探讨如何...
FFmpeg是一款强大的开源跨平台多媒体处理工具,...在Java环境中,可以通过`FFmpegUtil.java`这样的工具类调用FFmpeg命令,实现音视频的转换、编辑等功能。通过深入理解和实践,可以充分发挥FFmpeg在实际项目中的价值。
FFmpeg提供丰富的视频过滤器,如`scale`调整尺寸,`crop`裁剪,`transpose`旋转。例如,裁剪视频左上角的100x100区域: ``` ffmpeg -i input.mp4 -vf "crop=100:100:0:0" output.mp4 ``` 7. 性能优化: 对于大...
它不仅支持音频和视频的编码、解码,还能进行转码、合并、分割、裁剪、旋转、缩放等多种操作,是数字媒体处理领域的重要工具。在Windows、Linux、Mac OS等操作系统上都能运行,具有广泛的适用性。 FFmpeg的核心功能...
1. **ffmpeg.exe**:这是核心工具,能够进行视频和音频的编码、解码、转码、混音、分离、裁剪、旋转、调整质量等操作。它支持大量编码格式,包括常见的H.264、VP9、AAC等,并且可以处理网络流。 2. **ffplay.exe**...
FFmpeg 是一个强大的开源工具,用于处理音视频文件,包括转码、剪辑、合并、流处理等操作。本篇文章将深入探讨 FFmpeg 在音视频转码中的应用,以及如何利用代码实现这一过程。 首先,FFmpeg 包含了一整套的库和...
4. **libavfilter**:提供了一系列滤镜,用于对音视频进行特效处理,如裁剪、旋转、颜色调整等。 5. **libavutil**:包含了通用的工具函数,如随机数生成、内存管理等。 6. **libavdevice**:用于与硬件设备(如...
3. **过滤器**:FFmpeg提供了一系列的视频和音频过滤器,用于调整亮度、对比度、裁剪、旋转、混合音频、去除噪声等。 4. **流媒体支持**:可以将实时音视频流推送到RTMP、HTTP Live Streaming (HLS)、MPEG-DASH等流...
学习如何构造FFmpeg命令,可以实现复杂的音视频处理任务,如裁剪、合并、调整分辨率、添加水印等。 4. **音视频过滤器** FFmpeg 提供了丰富的过滤器系统,用于处理音视频流。视频过滤器可以用来改变画面效果,如...