获取且设置MP3、AAC文件播放时长、文件大小等信息
主要依赖于jaudiotagger和jave-core,下载链接:https://download.csdn.net/download/little__SuperMan/21108069
直接上代码,注释很清楚都能看明白
package com.exercise.util;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;import org.jaudiotagger.audio.mp3.MP3AudioHeader;
import org.jaudiotagger.audio.mp3.MP3File;
import org.springframework.web.multipart.MultipartFile;import ws.schild.jave.AudioAttributes;
import ws.schild.jave.Encoder;
import ws.schild.jave.EncoderException;
import ws.schild.jave.EncodingAttributes;
import ws.schild.jave.InputFormatException;
import ws.schild.jave.MultimediaObject;/**** 音频文件码率转换* @author li**/
public class AudioTransCoder {public static void main(String[] args) throws NumberFormatException, EncoderException {String transFilePath = "E:\\工作专属文件夹\\后台\\小强\\我爱听的歌曲\\烟火-陈翔.mp3";String saveFilePath = "E:\\工作专属文件夹\\后台\\小强\\我爱听的歌曲\\rateTranCoder\\";
// System.out.println(getAudioFileInfo("E:\\工作专属文件夹\\后台\\小强\\我爱听的歌曲\\rateTranCoder\\烟火-陈翔.aac"));
// AudioInfoTrans(transFilePath,saveFilePath,"12800","","","libmp3lame");String[] bitRate = new String[] {"32000","64000","96000","12800","25600"};for(int i=0;i audioFileInfo = getAudioFileInfo(transFilePath);if(audioFileInfo == null) {return false;}System.out.println("转换前文件信息:"+audioFileInfo);if("".equals(bitRate)) {bitRate = audioFileInfo.get("bitRate");}String SampleRate = audioFileInfo.get("sampleRate");String channel = audioFileInfo.get("channel");String format = "libmp3lame";if("Stereo".equals(channel)) {channel = "2";}else { //monochannel = "1";}return rateCodeTrans(transFilePath,saveFilePath,Integer.parseInt(bitRate),Integer.parseInt(SampleRate),Integer.parseInt(channel),format);}/*** 音频文件信息转换(注意:跨格式转化码率会不稳定发生跳转)* 针对 待转化文件路径为MP3、AAC类型* @param transFilePath 待转化文件路径* @param saveFilePath 转换保存路径* @param bitRate 比特率 32000、64000、96000、12800、25600* @param SampleRate 采样率 44100* @param channel 通道 1、2* @param format 文件编码格式 libmp3lame、pcm_u8、aac* @throws EncoderException * @throws NumberFormatException */public static boolean AudioInfoTrans(String transFilePath,String saveFilePath,String bitRate,String SampleRate,String channel,String format) throws NumberFormatException, EncoderException {Map audioFileInfo = getAudioFileInfo(transFilePath);if(audioFileInfo == null) {return false;}System.out.println("转换前文件信息:"+audioFileInfo);if("".equals(bitRate)) {bitRate = audioFileInfo.get("bitRate");}if("".equals(SampleRate)) {SampleRate = audioFileInfo.get("sampleRate");}if("".equals(channel)) {channel = audioFileInfo.get("channel");if("Stereo".equals(channel)) {channel = "2";}else { //monochannel = "1";}}if("".equals(format)) {format = audioFileInfo.get("format");}return rateCodeTrans(transFilePath,saveFilePath,Integer.parseInt(bitRate),Integer.parseInt(SampleRate),Integer.parseInt(channel),format);}public static boolean rateCodeTrans(String transFilePath,String saveFilePath,int bitRate,int SampleRate,int channel,String format) throws EncoderException {boolean flag = false;//检测文件及保存路径File transFile = new File(transFilePath);if (!transFile.exists()) {return flag;}File saveFile = new File(saveFilePath);if(!saveFile.getParentFile().exists()) {saveFile.getParentFile().mkdirs();}//修改音频文件比特率等参数AudioAttributes audio = new AudioAttributes();audio.setCodec(format);//转码器名称(文件编码格式)libmp3lame、pcm_u8、aacaudio.setBitRate(bitRate);//设置比特率audio.setSamplingRate(SampleRate);//设置采样率audio.setChannels(channel);//设置音频通道数EncodingAttributes attrs = new EncodingAttributes();
// attrs.setFormat(format);//设置格式
// attrs.setDuration(360f); // 设置截取的时长attrs.setAudioAttributes(audio);Encoder encoder = new Encoder();//打印转码器名称(文件编码格式)
// for(String x : encoder.getAudioEncoders()) {
// System.out.println(x);
// }MultimediaObject multimediaObject = new MultimediaObject(transFile);File outputFile = new File(saveFilePath);try {//开始转换encoder.encode(multimediaObject,outputFile, attrs);
// Map audioFileInfo = getAudioFileInfo(saveFilePath);
// System.out.println("转换后文件信息:"+audioFileInfo);flag = true;} catch (Exception e) {e.printStackTrace();}return flag;}/*** 获取音频文件信息(注意:wav文件会报错,读取不到头信息。MP3、AAC文件可以正常使用)* @param filePath 文件路径* @return*/public static Map getAudioFileInfo(String filePath) {try {MP3File mp3File = new MP3File(filePath);MP3AudioHeader header = mp3File.getMP3AudioHeader();HashMap map = new HashMap();map.put("duration", String.valueOf(header.getTrackLength())); //获得时长map.put("bitRate", String.valueOf(header.getBitRate())); //获得比特率map.put("trackSize", String.valueOf(header.getTrackLength())); //音轨长度map.put("format", String.valueOf(header.getFormat())); //格式,例 mp3\wavmap.put("channel", String.valueOf(header.getChannels())); //声道map.put("sampleRate", String.valueOf(header.getSampleRate())); //采样率map.put("mpegLayer", String.valueOf(header.getMpegLayer())); //MPEGmap.put("mp3StartByte", String.valueOf(header.getMp3StartByte())); //MP3起始字节map.put("preciseTrackSize", String.valueOf(header.getPreciseTrackLength())); //精确的音轨长度return map;} catch (Exception e) {e.printStackTrace();}return null;}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
