java实现将.acc格式转化为mp3格式

news/2024/11/30 1:41:01/

最近接到一个需求,将腾讯云的音频.acc格式的转为mp3格式

这里用到的是jave,  jave2(Java音频视频编码器)库是Java对ffmpeg的包装,它可以很方便的实现视频音频格式的转换,本文简单记录一下将wav格式的音频转换成mp3格式的音频。

实现步骤:

1.maven包导入

根据需要导入不同的包,有os、window、linux

<dependencies><dependency><groupId>ws.schild</groupId><artifactId>jave-core</artifactId><version>2.4.2</version></dependency><!--<dependency><groupId>ws.schild</groupId><artifactId>jave-native-linux64</artifactId><version>2.4.2</version></dependency>--><dependency><groupId>ws.schild</groupId><artifactId>jave-native-win64</artifactId><version>2.4.2</version></dependency><!-- <dependency><groupId>ws.schild</groupId><artifactId>jave-native-osx64</artifactId><version>2.4.2</version></dependency>-->
</dependencies>

2.代码实现

将远程下载的url复制到该工具类下面的main方法进行测试即可

package utils;import ws.schild.jave.AudioAttributes;
import ws.schild.jave.Encoder;
import ws.schild.jave.EncodingAttributes;
import ws.schild.jave.MultimediaObject;import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.net.URL;/***  音频转化工具类* @author pengjie_yao* @date 2019年12月23日11:35:20*/
public class AudioConvertUtils {/*** 根据远程资源路径,下载资源到本地临时目录** @param remoteSourceUrl 远程资源路径* @param tmpFileFolder   本地临时目录* @return 下载后的文件物理路径*/private static String downloadSource(String remoteSourceUrl, String tmpFileFolder) throws Exception {//下载资源URL url = new URL(remoteSourceUrl);DataInputStream dataInputStream = new DataInputStream(url.openStream());String tmpFilePath = tmpFileFolder + getOriginalFileName(remoteSourceUrl);FileOutputStream fileOutputStream = new FileOutputStream(new File(tmpFilePath));byte[] bytes = new byte[1024];int length = 0;while ((length = dataInputStream.read(bytes)) != -1) {fileOutputStream.write(bytes, 0, length);// System.out.println("下载中....");}// System.out.println("下载完成...");dataInputStream.close();fileOutputStream.close();return tmpFilePath;}/*** 将本地音频文件转换成mp3格式文件** @param localFilePath 本地音频文件物理路径* @param targetPath    转换后mp3文件的物理路径*/public static void changeLocalSourceToMp3(String localFilePath, String targetPath) throws Exception {File source = new File(localFilePath);MultimediaObject multimediaObject = new MultimediaObject(source);File target = new File(targetPath);AudioAttributes audio = new AudioAttributes();Encoder encoder = new Encoder();audio.setCodec("libmp3lame");EncodingAttributes attrs = new EncodingAttributes();attrs.setFormat("mp3");attrs.setAudioAttributes(audio);encoder.encode(multimediaObject, target, attrs);}/*** 下载远程文件到本地,然后转换成mp3格式,再删除下载的资源文件,并返回mp3的文件绝对路径* <p>每次会优先检测mp3文件是否已存在,存在则直接返回mp3绝对路径,否则下载然后转换成mp3再返回</p>** @param remoteSourceUrl 远程文件的URL* @param tmpFolder       临时文件存放的目录,如/usr/consult/tmp/* @return 转换成mp3的文件的绝对路径,如/usr/consult/tmp/fcd124a2-ed6c-4407-b574-81ecc51b4eb4.mp3*/public static String changeRemoteSourceToMp3(String remoteSourceUrl, String tmpFolder) throws Exception {// 检测该文件是否已经下载并转换过一次,如果是,则直接返回String remoteSourceNameWithoutSuffix = getNameWithoutSuffix(remoteSourceUrl);// 格式为/usr/consult/tmp/fcd124a2-ed6c-4407-b574-81ecc51b4eb4.mp3String mp3FilePath = tmpFolder + File.separator + remoteSourceNameWithoutSuffix + ".mp3";File audioFile = new File(mp3FilePath);if (audioFile.exists()) {// 文件已在之前转换过一次,直接返回即可return mp3FilePath;}// 下载资源到临时目录String tmpRemoteFilePath = downloadSource(remoteSourceUrl, tmpFolder);// 转换成mp3格式changeLocalSourceToMp3(tmpRemoteFilePath, mp3FilePath);// 删除.acc格式File accFile = new File(tmpRemoteFilePath);accFile.delete();return mp3FilePath;}/*** 根据文件url获取文件名(包含后缀名)** @param url 文件url* @return 文件名(包含后缀名)*/private static String getOriginalFileName(String url) {String[] sarry = url.split("/");return sarry[sarry.length - 1];}/*** 根据文件url获取文件名(不包含后缀名)** @param url 文件url* @return 文件名(包含后缀名)*/private static String getNameWithoutSuffix(String url) {String originalFileName = getOriginalFileName(url);return originalFileName.substring(0, originalFileName.indexOf("."));}public static void main(String[] args) throws Exception {String result = changeRemoteSourceToMp3("XXX", "D:\\");System.out.println(result);
}

}

github的demo例子:https://github.com/CodeBoy975/aac-to-mp3-demo.git


http://www.ppmy.cn/news/805867.html

相关文章

蓝牙音频传输格式:ACC,SBC,APTX和LDAC

因为最近接触了一些蓝牙和高品质音乐传输上的知识&#xff0c;先记录一下当前较为常用的几种音频传输格式和支持厂商。下面按照编码的码率由低到高列举。 1. SBC &#xff08;Sub-band coding&#xff0c;子带编码&#xff09; 最早的格式应该是SBC&#xff0c;SBC是A2DP&…

网页视频之ACC格式解析

H264封装成fmp4再到H5MSE播放已经告一段落&#xff0c;现在来攻关音频封装到fmp4&#xff0c;音频主要选择AAC编码。今天就研究一下AAC编码的结构。 AAC音频前面有个头为ADTS&#xff0c;后面才是AAC的音频数据。 ADTS&#xff08;Audio Data Transport Stream&#xff09;…

音视频学习(十二、AAC格式介绍)

每次都普及这些基础的时候&#xff0c;都是要转载别人的文章&#xff0c;因为我也不熟&#xff0c;也是一边学习一边记录学习的过程&#xff0c;这些基础知识都是需要补的。 转载链接&#xff1a;AAC ADTS格式分析 12.1 AAC基本介绍 AAC音频格式&#xff1a;Advanced Audio …

货仓选址----贪心1 (爱思创)

题目描述 在一条数轴上有 N 家商店&#xff0c;它们的坐标分别为 A1​∼AN​。 现在需要在数轴上建立一家货仓&#xff0c;每天清晨&#xff0c;从货仓到每家商店都要运送一车商品。 为了提高效率&#xff0c;求把货仓建在何处&#xff0c;可以使得货仓到每家商店的距离之和最小…

LinuxCP插件virtio与内核vhost

以下为LCP创建的接口对&#xff0c;VPP侧为物理接口port7&#xff0c;映射到Linux侧的为虚拟接口hostap1&#xff0c;接口hostap1作为vhost的后端存在。VPP侧接口tap1为前端的virtio接口。 vpp# show lcp itf-pair: [0] port7 tap1 hostap1 24 type tap vdp# vdp# show interf…

HTML特殊符号表示方法

个人总结&#xff0c;不便记忆&#xff0c;便于查找&#xff0c;希望帮到大家 &#xff08; &#xff09;空格符&#xff1a;&nbsp&#xff1b; &#xff08;<&#xff09;小于号: &It&#xff1b; &#xff08;>&#xff09;大于号&#xff1a; &gt&#…

‘font-weight’属性

字体粗细&#xff1a;‘font-weight’属性 名称&#xff1a; font-weight 取值&#xff1a; normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 初始&#xff1a; normal 适用于&#xff1a; 所有元素 继承&#xff1a; 是 百分比&a…