使用ffmpeg+ws.schild 实现音频 amr转 mp3

引入Maven

   <dependency>
        <groupId>ws.schild</groupId>
        <artifactId>jave-core</artifactId>
        <version>3.1.1</version>
    </dependency>
    <dependency>
        <groupId>ws.schild</groupId>
        <artifactId>jave-nativebin-osx64</artifactId>
        <version>3.1.1</version>
    </dependency>

1、jave-core是必须的

2、ws.schild需要根据服务器情况mac引用:jave-nativebin-osx64,linux引用:jave-nativebin-linux64 等等。 mvnrepository仓库

编码

package com.example.demo1;


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.yaml.snakeyaml.reader.StreamReader;
import ws.schild.jave.Encoder;
import ws.schild.jave.MultimediaObject;
import ws.schild.jave.encode.AudioAttributes;
import ws.schild.jave.encode.EncodingAttributes;

import java.io.*;
import java.net.URI;
import java.net.URL;

/**
 * Description:
 * <p>
 * PackageName: com.example.demo1
 * <p>
 * FileName: RuleApplication.class
 * <p>
 * Copyright: Copyright (c)2021. 91jkys
 *
 * @version 1.0, 2021-07-22
 */
public class VedioApplication {

    public static Logger logger = LoggerFactory.getLogger(VedioApplication.class);

    public static void main(String[] args) {
        try {
            for (int i = 0; i < 1000; i++) {


//            File source = new File("/Users/wuguilin/Downloads/5910dc63-df49-4783-a49a-da7ec90f5a97.amr");

//            URL url = new URL("http://static.91jkys.com/attachment/2017-05-23/5390203/5910dc63-df49-4783-a49a-da7ec90f5a97.amr");
//            InputStream imageInput = url.openStream();
//            File target = new File(imageInput);


                File target = new File("/Users/wuguilin/Downloads/"+System.currentTimeMillis()+".mp3");
                //Audio Attributes
                AudioAttributes audio = new AudioAttributes();
                audio.setCodec("libmp3lame");

                //比特率
                audio.setBitRate(128000);
                //设置编码过程的通道值(1=单声道,2=立体声,4=四声道)
                audio.setChannels(2);
                //编码过程的采样率值
                audio.setSamplingRate(44100);

                //Encoding attributes
                EncodingAttributes attrs = new EncodingAttributes();
                attrs.setInputFormat("amr");
                attrs.setOutputFormat("mp3");
                attrs.setAudioAttributes(audio);

                Long start = System.currentTimeMillis();

                Encoder encoder = new Encoder();
                encoder.encode(new MultimediaObject(new URL("http://static.qa.91jkys.com/attachment/2017-05-05/1587644/307efa3c-10a9-4f6d-80c9-87e89eb89ddb.amr")), target, attrs);

                FileInputStream in = new FileInputStream(target);
                InputStreamReader inReader = new InputStreamReader(in);
                StreamReader streamReader = new StreamReader(inReader);
//                target.delete();

                logger.info("耗时:{}毫秒", System.currentTimeMillis() - start);
            }
        } catch (Exception ex) {
            logger.error("ArmToMp3Test#main 异常", ex);
        }
    }
}

音频相关知识

采样率

指记录声音时每秒的采样个数,它用赫兹(Hz)来表示,每秒钟采样的越多,说明声音越接近真实情况。 7745e85fed03c093addc424d5b437e9a_1440w.png

采样率根据使用类型不同大概有以下几种(k既千位符号,1khz=1000hz):

  • 8khz:电话等使用,对于记录人声已经足够使用。
  • 22.05khz:广播使用频率。
  • 44.1kb:音频CD。
  • 48khz:DVD、数字电视中使用。
  • 96khz-192khz:DVD-Audio、蓝光高清等使用。

声道

是指声音在录制或播放时在不同空间位置采集或回放的相互独立的音频信号,所以声道数也就是声音录制时的音源数量或回放时相应的扬声器数量。 7af40ad162d9f2d3670ffcd0a0ec8a136327ccf7.jpeg

比特率

比特率这个东西应该说是另一个维度的东西,他是一种音频文件的压缩。128k的全称“128kbps”,128是数字,k是千位符,b是单位,s是秒,ps其实就是“/s”。这样来看,128kbps就是128kb/s。也就是每秒128kb。

常用比特率:

  • OGG的优势范围:96K以上(OGG)
  • AAC的优势范围:AAC LC应高于(包含)256K AAC HE 48K-96K
  • Mp3的优势范围:192K(包含)以上
  • WMA的优势范围:128K(包含)以下

已有 0 条评论

    欢迎您,新朋友,感谢参与互动!