20.java音视频处理
音频处理
依赖
<dependency>
<groupId>ws.schild</groupId>
<artifactId>jave-core</artifactId>
<version>3.4.0</version>
</dependency>
<!-- win-->
<dependency>
<groupId>ws.schild</groupId>
<artifactId>jave-nativebin-win64</artifactId>
<version>3.4.0</version>
</dependency>
<!-- linux-->
<dependency>
<groupId>ws.schild</groupId>
<artifactId>jave-nativebin-linux64</artifactId>
<version>3.4.0</version>
</dependency>
示例
package com.chiyi.util.audio;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import ws.schild.jave.Encoder;
import ws.schild.jave.MultimediaObject;
import ws.schild.jave.encode.AudioAttributes;
import ws.schild.jave.encode.EncodingAttributes;
import ws.schild.jave.info.AudioInfo;
import ws.schild.jave.info.MultimediaInfo;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
@Slf4j
@Service
public class AudioOption {
/**
* 音频转码压缩
*/
String srcPath;
public AudioOption(){
}
public AudioOption(String srcPath){
this.srcPath = srcPath;
}
//1. 获取音频信息
public Map getAudioInfo(){
return getAudioInfo(srcPath);
}
public Map getAudioInfo(String srcPath){
try {
File source = new File(srcPath);
//1.获取音频信息
MultimediaObject multimediaObject = new MultimediaObject(source);
MultimediaInfo info = multimediaObject.getInfo();
long duration = info.getDuration()/1000; // 时长,秒数,原单位微秒
String format = info.getFormat(); // 格式 wav
AudioInfo ai = info.getAudio();
int channels = ai.getChannels(); //声道 1 =单声道,2 =立体声
int bitRate = ai.getBitRate(); //比特率 128000=128k 64000=64k 32000=32k
int samplingRate = ai.getSamplingRate(); //采样率 44100=44.1k 22050=22.05k 11025=11.025k
String decoder = ai.getDecoder(); // 解码器
log.debug("时长(秒):{},格式:{},声道:{},比特率:{},采样率:{},解码器:{} ",duration,format, channels,bitRate,samplingRate,decoder);
Map map= new HashMap(){{
put("duration",duration);
put("format",format);
put("channels",channels);
put("bitRate",bitRate);
put("samplingRate",samplingRate);
put("decoder",decoder);
}};
return map;
} catch (Exception e) {
log.error("获取音频信息错误{}",e.getMessage());
}
return null;
}
// 2. 编码器
// public String encoder(String outFormat){
// String encoder = Encoder.getEncoderName(outFormat);
// }
// 3.音频转码
public String convert( String outFormat){
return convert(srcPath,outFormat);
}
public String convert(String srcPath, String outFormat){
try {
File source = new File(srcPath);
String format = srcPath.substring(srcPath.lastIndexOf(".")+1);
// 输出路径
String dstPath = srcPath.replaceFirst(format+"$", outFormat);
File target = new File(dstPath);
log.debug(" {}",dstPath);
//2. 设置音频属性 Audio attributes
AudioAttributes audio = new AudioAttributes();
audio.setCodec("libmp3lame"); // 编码器
audio.setBitRate(64000); //比特率
audio.setChannels(2); //声道
audio.setSamplingRate(44100); //采样率
//3. 编码设置 Encoding attributes
EncodingAttributes attrs = new EncodingAttributes();
attrs.setOutputFormat(outFormat); // 输出格式
attrs.setAudioAttributes(audio); //音频属性
//4. 编码 Encode
Encoder encoder = new Encoder();
encoder.encode(new MultimediaObject(source), target, attrs);
return dstPath;
} catch (Exception ex) {
log.error(" {}",ex.getMessage());
return null;
}
}
public String toString(){
Map map = getAudioInfo(srcPath);
return "AudioOption{" +
"srcPath='" + srcPath + '\'' +
"时长(秒)"+map.get("duration")+
"格式:"+map.get("format")+
"声道:"+map.get("channels")+
"比特率:"+map.get("bitRate")+
"采样率:"+map.get("samplingRate")+
"解码器:"+map.get("decoder")+
'}';
}
}

浙公网安备 33010602011771号