javacv-ffmpeg ProcessBuilder批量旋转图片

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

maven配置文件,加上对ffmpeg的依赖,由于ffmpeg依赖cpp,所以加上javacpp,javacpp是可以支持调用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));
    }
}
相关推荐
开开心心就好18 小时前
把手机变成电脑麦克风,WiFi连接就能用
智能手机·ffmpeg·计算机外设·电脑·word·音视频
@嵌入式扫地僧1 天前
FFmpeg 解码 H.264 流提取 SEI 用户数据实战
ffmpeg·h.264·流媒体开发·sei 解析·自定义 sei
VimorphTech1 天前
ffmpeg.wasm 实战:浏览器提取视频音频,如何处理进度、取消和资源释放?
ffmpeg
小小龙学IT1 天前
FFmpeg 开源多媒体处理框架深度解析:从命令行到 libav* 全家桶
c语言·ffmpeg·开源
ofoxcoding2 天前
Gemini TTS 与 ElevenLabs 语音合成实测:同一段视频旁白效果对比
ai·ffmpeg·音视频
_大峰_3 天前
索尼 A7M4 误删视频恢复实战:基于原始卡镜像重建 MP4 数据
ffmpeg·数据恢复·音视频·mp4·exfat
Anhty3 天前
3 款手机音频剪辑 APP 横评,短视频配音后期,免费工具怎么选?
功能测试·ffmpeg·音视频
VidDown4 天前
自动给视频挑一张能看的封面:帧评分、构图与批量生成
python·ffmpeg·音视频·视频
可乐鸡翅yeah_5 天前
HLS 业务 Referer‑Policy 网页元标签引发播放异常排错
前端·javascript·网络·ffmpeg·php·音视频
开开心心就好6 天前
本地文件搜索工具推荐,占用小速度还快
智能手机·ffmpeg·ocr·word·音视频·网络攻击模型·安全架构