Java集成FFmpeg最佳实践

一、概述

Java语言本身对音视频的处理不是很完善,想要在java中对音视频进行高效的处理,只能引入一些第三方的技术。

FFmpeg是一个使用C++编写的多媒体视频处理工具,处理音视频非常高效。

JavaCV是一个Github上的开源项目,该项目封装了很多C++的优秀的库,让这些库可以很方便的在Java中进行调用。本文就使用该项目中封装的FFmpeg依赖进行集成。

二、最佳集成实践

2.1、maven集成

<?xml version="1.0" encoding="UTF-8"?>
<project>
    <properties>
        <!--   这里是JavaCV的版本     -->
        <javacpp.version>1.5.7</javacpp.version>
        <!--   这里是JavaCV FFmpeg的版本     -->
        <javacpp-ffmpeg.version>5.0</javacpp-ffmpeg.version>
    </properties>

    <dependencies>
        <!--   javacv相关     -->
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacv</artifactId>
            <version>${javacpp.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>*</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--   ffmpeg相关   -->
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>ffmpeg</artifactId>
            <version>${javacpp-ffmpeg.version}-${javacpp.version}</version>
        </dependency>
        <!--   这里的引入取决于你使用的平台,笔者这里需要在windows、linux中使用,所以需要引入相关平台的可执行文件、.so文件   -->
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>ffmpeg</artifactId>
            <version>${javacpp-ffmpeg.version}-${javacpp.version}</version>
            <classifier>windows-x86_64</classifier>
        </dependency>
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>ffmpeg</artifactId>
            <version>${javacpp-ffmpeg.version}-${javacpp.version}</version>
            <classifier>linux-x86_64</classifier>
        </dependency>
    </dependencies>
</project>

2.2 gradle集成

// javacv相关, transitive=false表示不进行依赖传递,即排除所有子依赖
implementation (group: 'org.bytedeco', name: 'javacv', version: '1.5.7'){
    transitive=false
}
implementation group: 'org.bytedeco', name: 'ffmpeg', version: '5.0-1.5.7'
implementation group: 'org.bytedeco', name: 'ffmpeg', version: '5.0-1.5.7', classifier: 'android-arm'
implementation group: 'org.bytedeco', name: 'ffmpeg', version: '5.0-1.5.7', classifier: 'android-arm64'

三、简单使用

下面就用一个简单的示例,演示一下如何在java项目中,执行ffmpeg的命令。使用javacv集成ffmpeg,除了调用javacv封装的类之外,还附带了ffmpeg的可执行文件。

// 加载ffmpeg可执行文件的路径
String ffmpeg = Loader.load(org.bytedeco.ffmpeg.ffmpeg.class);
// 使用ffmpeg将mp3文件转换为wav文件
ProcessBuilder processBuilder = new ProcessBuilder(ffmpeg, "-i", "input.mp3", "output.wav");
// 执行命令,并等待命令执行完成
int exitCode = processBuilder.inheritIO().start().waitFor();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值