使用ffmpeg对mp3格式的音频文件类型转换、截取及合并

2019-12-17  本文已影响0人  呼啦啦zz

FFmpeg简介:FFmpeg是一个自由软件,可以运行音频和视频多种格式的录影、转换、流功能,包含了libavcodec ─这是一个用于多个项目中音频和视频的解码器库,以及libavformat——一个音频与视频格式转换库。

FFmpeg命令:

    一、mp3截取

            ffmpeg -y -i test.mp3 -ss 00:00:00 -t 00:00:03 -acodec copy output_mp3.mp3

      参数说明

              -y :     允许覆盖

              -i test.mp3:  源文件

             -ss 00:00:00:   开始时间

             -t 00:00:03:   截取音频时间长度

             -acodec copy:编码格式复制

   二、合并两个mp3文件为一个

          ffmpeg -i  "contat:file1.mp3|file2.mp3"  -acodec copy  merge.mp3

             file1.mp3:源文件1

             file2.mp3:源文件2

             merge.mp3:合并后的目标文件

   二、mp3转pcm

           ffmpeg -y -i test.mp3 -acodec pcm_s16le -f s16le -ac 2 -ar 16000 16k.pcm

     参数说明

           -y:  允许覆盖

           -i test.mp3:  源文件

          -acodec pcm_s16le: 编码器

          -f s16le:  强制文件格式

         -ac 2: 双声道

         -ar 16000: 采样率

  三、pcm转mp3

          ffmpeg -y -f s16be -ac 2 -ar 16000 -acodec pcm_s16le -i 16k.pcm new_mp3.mp3

        参数说明

            -y: 允许覆盖

            -f s16le: 强制文件格式

            -ac 2: 双声道

            -ar 16000: 采样率

            -acodec pcm_s16le: 编码器

            -i test.mp3: 源文件

    四、上代码

    public class Mp3ToPcm {

            public static StringchangeMp3ToPcm(String sourcePath){

                    String webroot ="E:\\ffmpeg\\bin";

                    String targetPath ="E:\\pcm\\test.pcm";

                    Runtime run =null;

                    try {

                            run = Runtime.getRuntime();

                             long start=System.currentTimeMillis();

                             System.out.println(new File(webroot).getAbsolutePath());

            //mp3转pcm

            Process p=run.exec(new File(webroot).getAbsolutePath() +"/ffmpeg -y -i "+sourcePath+" -acodec pcm_s16le -f s16le -ac 2 -ar 16000 "+targetPath);

            //释放进程

            p.getOutputStream().close();

            p.getInputStream().close();

            p.getErrorStream().close();

            p.waitFor();

            long end=System.currentTimeMillis();

            System.out.println(sourcePath+" convert success, costs:"+(end-start)+"ms");

        }catch (Exception e) {

e.printStackTrace();

        }finally{

//run调用lame解码器最后释放内存

        run.freeMemory();

        }

return null;

    }

}

上一篇下一篇

猜你喜欢

热点阅读