广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >Java工程使用ffmpeg进行音视频格式转换(ws.schild)
  • 550
分享到

Java工程使用ffmpeg进行音视频格式转换(ws.schild)

javaffmpeg音视频 2023-09-03 22:09:34 550人浏览 独家记忆
摘要

ws.schild简介 JAVE (Java Audio Video Encoder)是一个纯Java的音视频编码器和解码器库,它是基于FFmpeg。JAVE库提供了一些简单易用的api,用于音频和视频格式的转换、编码、解码等操作。它对于一

ws.schild简介

JAVE (Java Audio Video Encoder)是一个纯Java的音视频编码器和解码器库,它是基于FFmpeg。JAVE库提供了一些简单易用的api,用于音频和视频格式的转换、编码、解码等操作。它对于一些基本的音视频处理任务来说是一个不错的选择。

这些库都是基于FFmpeg的,并允许在Java中处理音频和视频文件。使用它们可以避免直接调用外部的FFmpeg命令行工具,而是通过Java API来实现音频格式转换等操作。

ws.schild是目前主流的对视频和音频进行转码、裁剪以及提取操作的JAVE工具包。

一、主要工具类简介

1. VideoAttributes

VideoAttributes是ws.schild工具包中对视频属性设置的重要工具类,是ws.schild实现对视频操作的重中之重,同时也是应用最多的一个类。

使用心得:(下文中video为该类的实例化对象)

video的Quality(视频质量)属性对转码后视频的大小有很大的影响,并且对转码的时间也有一定的影响,主要影响视频质量,参数类型是整形,数值越小表示质量越高。

video的size(视频尺寸)属性对转码后视频的大小有较大的影响,并且对转码的时间也有一定的影响,参数类型是VideoSize。

video的BitRate(比特率)属性对转码视频的大小和时间都影响较大,主要影响视频的流畅程度,一般设置的需要大一些,如100k(针对已测试过的视频,不敢保证普遍性)。

video的Codec(编解码器)属性一般设置为mpeg4或者h264。

video的FrameRate(帧率)属性不要设置的太低,一般设置为15及以上,如果设置太小视频会不流畅。


2. AudioAttributes

AudioAttributes是ws.schild工具包中对音频属性设置的重要工具类。

二、使用步骤

1. 导入ws.schild的jar

Maven地址:https://mvnrepository.com/artifact/ws.schild/jave-all-deps

在maven库里可以看到ws.schild其下有好几个包

jave-core
jave-nativebin-win32
jave-nativebin-win64
jave-nativebin-linux32
jave-nativebin-linux64
jave-nativebin-osx64

jave-all-deps 是最完整的,它的pom.xml引用了所有版本的文件

看名字就能看出,jave-core是核心包,其它几个是windows、linux、maxosx系统下的本地文件。其实nativebin里面就是一个类似ffmpeg.exe的文件,程序在运行时拼接参数,再调用对应的ffmpeg去执行。

首先在pom文件中导入第三方jar包:

      ws.schild      jave-all-deps      3.3.1    

确定运行平台后可以将其他包排除,如服务在Linux系统跑,就可以将Windows、Macos平台的包排除。

                    ws.schild            jave-all-deps            3.3.1                                                 ws.schild                    jave-nativebin-win32                                                    ws.schild                    jave-nativebin-win64                                                     ws.schild                    jave-nativebin-osx64                                                    ws.schild                    jave-nativebin-osxm1                                    

2. 实现视频的转码

将视频转码为H.264编码(包括音频转码):

    public static boolean videoToVideo(String videoSource, String videoTarget) {//        Date time = new Date();//        SimpleDateFORMat simpleDateFormat = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");//        System.out.println(simpleDateFormat.format(time));        long start = System.currentTimeMillis();        File source = new File(videoSource);        File target = new File(videoTarget);        AudioAttributes audio = new AudioAttributes();        audio.setCodec("aac");        audio.setBitRate(236000 / 2);        audio.setChannels(2);        audio.setSamplingRate(8000);        VideoAttributes video = new VideoAttributes();        video.setCodec("h264");        video.setBitRate(1000000);        video.setFrameRate(25);        video.setQuality(4);//        video.setSize(new VideoSize(720, 480));        EncodingAttributes attrs = new EncodingAttributes();        attrs.setOutputFormat("mp4");        attrs.setAudioAttributes(audio);        attrs.setVideoAttributes(video);        Encoder encoder = new Encoder();        try {            encoder.encode(new MultimediaObject(source), target, attrs);            return true;        } catch (Exception e) {            e.printStackTrace();            System.out.println(encoder.getUnhandledMessages());            return false;        }finally {//            time = new Date();//            System.out.println(simpleDateFormat.format(time));            long end = System.currentTimeMillis();            System.out.println("总耗时:"+ (end-start) +"ms");        }    }

3. 实现音频的转码

将音频转码为mp3编码:

audioPath可以为amr、wav、m4r等其他音频格式的文件。

    public static void toMp3(String audioPath,String mp3Path){        File source = new File(audioPath);        File target = new File(mp3Path);        AudioAttributes audio = new AudioAttributes();        audio.setCodec("libmp3lame");        audio.setBitRate(128000);        audio.setChannels(2);        audio.setSamplingRate(44100);        EncodingAttributes attrs = new EncodingAttributes();        attrs.setOutputFormat("mp3");        attrs.setAudioAttributes(audio);        Encoder encoder = new Encoder();        try {            encoder.encode(new MultimediaObject(source), target, attrs);        } catch (EncoderException e) {            e.printStackTrace();        }    }

4. 实现视频文件转为音频文件

将视频转为音频:

    public static boolean videoToAudio(String videoPath, String audioPath){        File fileMp4 = new File(videoPath);        File fileMp3 = new File(audioPath);        AudioAttributes audio = new AudioAttributes();        audio.setCodec("libmp3lame");        audio.setBitRate(128000);        audio.setChannels(2);        audio.setSamplingRate(44100);        EncodingAttributes attrs = new EncodingAttributes();        attrs.setOutputFormat("mp3");        attrs.setAudioAttributes(audio);        Encoder encoder = new Encoder();        MultimediaObject mediaObject = new MultimediaObject(fileMp4);        try{            encoder.encode(mediaObject,fileMp3,attrs);            Log.info("File MP4 convertito MP3");            return true;        }catch (Exception e){            Log.error("File non convertito");            Log.error(e.getMessage());            return false;        }    }

总结

执行原理大致是:

1、服务启动后ws.schild工具包会将与运行系统匹配的ffmpeg可执行文件,一般Windows系统是将ffmpeg-amd64-3.3.1.exe下载到此路径下:C:\Users\xxx\AppData\Local\Temp\jave (xxx是你的用户文件)。

2、用java代码拼接ffmpeg指令的参数,以及源文件路径和目标文件路径,而后调用encode语句将指令发给ffmpeg执行。

ffmpeg指令的参数讲解可以看看上一篇文章:ffmpeg安装及音频转换指令应用(win10)_和光同尘ss的博客-CSDN博客

综上,ws.schild 工具包可以非常方便的帮助我们实现对视频和音频的转码和裁剪等操作,并且可以通过设置不同参数来满足不同的需求。但是就目前的测试结果而言,不同的编码格式对于参数的敏感度可能不同,具体场景应该具体分析。

参考链接:

https://github.com/a-schild/jave2

https://blog.csdn.net/qq_42070413/article/details/117993445

https://blog.csdn.net/liuchongming/article/details/106994861

来源地址:https://blog.csdn.net/eleanoryss/article/details/131478829

--结束END--

本文标题: Java工程使用ffmpeg进行音视频格式转换(ws.schild)

本文链接: https://www.lsjlt.com/news/392878.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作