化身天使的博客

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")+
                '}';
    }

}
posted @ 2024-01-25 19:39  化身天使  阅读(79)  评论(0)    收藏  举报