javacv-ffmpeg ProcessBuilder批量旋转图片

javacv-ffmpeg ProcessBuilder实现对图片的旋转,最近需要处理很多图片,量有点多,所以不能一个一个去编辑旋转图片,所以写一个工具类,实现对图片的旋转

maven配置文件,加上对ffmpeg的依赖,由于ffmpeg依赖cpp,所以加上javacppjavacpp是可以支持调用c/c++方法的库。加上<classifier>标签,因为ffmpeg是基于c语言编写的,在不同平台上的编译结果不同,所以这个标签指定一下平台的类型

xml 复制代码
<dependency>
     <groupId>org.bytedeco</groupId>
     <artifactId>javacpp</artifactId>
     <version>1.5.6</version>
     <classifier>windows-x86_64</classifier>
 </dependency>

 <dependency>
     <groupId>org.bytedeco</groupId>
     <artifactId>ffmpeg-platform</artifactId>
     <version>4.4-1.5.6</version>
 </dependency>

如果不想引入两个jar,可以直接引入javacv-platform,但是这个会引入其它的依赖

xml 复制代码
<dependency>
    <groupId>org.bytedeco</groupId>
    <artifactId>javacv-platform</artifactId>
    <version>1.5.5</version>
</dependency>

这里使用jdk中的ProcessBuilder 用于创建操作系统进程来运行程序,ProcessBuilder 是jdk提供的用于创建操作系统进程的类,使用Loader.load(org.bytedeco.ffmpeg.ffmpeg.class);支持对ffmpeg(c语言编写)方法的调用

java 复制代码
package com.example.common.util.file;

import org.bytedeco.javacpp.Loader;
import java.text.MessageFormat;

public class PictureProcess {

    /**
     * 旋转
     *
     * @Date 2024/08/27 15:46
     * @Param imagePath 图片地址
     * @Param outputPath 输出地址
     * @Param angle 角度
     * @return java.lang.String 图片地址
     */
    public static String rotate(String imagePath, String outputPath , Integer angle) throws Exception {
        String ffmpeg = Loader.load(org.bytedeco.ffmpeg.ffmpeg.class);
        ProcessBuilder builder =
                new ProcessBuilder(
                        ffmpeg,
                        "-i",
                        imagePath,
                        "-vf",
                        MessageFormat.format("rotate=PI*{0}/180", String.valueOf(angle)),
                        "-y",
                        outputPath);
        builder.inheritIO().start().waitFor();
        return outputDir;
    }
}

这里介绍一下弧度的计算公式:弧度= 角度 * Math.PI / 180 PI*{0}/180李的{0}是占位符,来传入角度的值

写个测试类,将文件夹里的所有图片都旋转90度

java 复制代码
@Test
public void testProcess() {
    File file = new File("D:\\picture");
    File[] files = file.listFiles();
    String targetPath = "D:\\picture_NEW";
    for (File file1 : files) {
        System.out.println(rotate(file1.getPath(), targetPath +"/"+ file1.getName(), 90));
    }
}
相关推荐
程序员老陆3 天前
WHIP 与 WHEP:WebRTC 直播的标准化入口与出口
ffmpeg·音视频·webrtc·whip·whep
可乐鸡翅yeah_4 天前
混合内容 Mixed‑Content 安全策略,HLS HTTPS 页面加载 HTTP 资源排错实战
运维·ffmpeg·音视频·媒体·m3u8
刘广睿4 天前
视频导出为什么发灰?色彩空间与色彩范围(BT.601/709/2020)的 ffmpeg 转换实战
ffmpeg·音视频·视频处理·色彩空间·素材管理
yivifu5 天前
精选FFmpeg 实用音频视频转换命令集
ffmpeg·音视频转换
风哥2号8 天前
数据库教程FGMT02‑生产环境Linux+Oracle19c安装配置与项目实战
linux·数据库·ffmpeg
Bruce_Liuxiaowei9 天前
录屏片段无损合并:从 ffmpeg concat 原理到 Python 自动化脚本
python·ffmpeg·自动化
工具派10 天前
口播视频怎么自动剪掉冷场?视频静音删除的阈值实测
ffmpeg·音视频·视频
❀͜͡傀儡师10 天前
移动端 360° 商品展示方案:从 20MB 雪碧图到 800KB 丝滑视频
ffmpeg·webgl·sprite
2501_9304724411 天前
深度复盘|数据库迁移实战(上):腾讯云助手解析慢查询日志,定位索引缺失与语法不兼容
数据库·阿里云·ffmpeg·云计算·腾讯云·aws
我就是DaLing呀!11 天前
flutter + ffmpeg_kit_extended_flutter 大视频合并下载
flutter·ffmpeg·音视频