我是靠谱客的博主 喜悦雪糕,最近开发中收集的这篇文章主要介绍javaCV开发详解之7:让音频转换更加简单,实现通用音频编码格式转换、重采样等音频参数的转换功能(以pcm16le编码的wav转mp3为例) 转自:http://blog.csdn.net/eguid_1/article/details/52982108 前言: 之前几章把javaCV-FFmpeg中的能够实现的基本功能大致梳理了一遍,本章在之前几章基础上实现一个通用的音频编码和参数转换器 实现功能: ①音频编码转换②音频格式转换③音频重采样④等等。。。跟多功能自行探索 代码实现: ,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

转自:http://blog.csdn.net/eguid_1/article/details/52982108

前言:

之前几章把javaCV-FFmpeg中的能够实现的基本功能大致梳理了一遍,本章在之前几章基础上实现一个通用的音频编码和参数转换器

实现功能:

①音频编码转换②音频格式转换③音频重采样④等等。。。跟多功能自行探索

代码实现:

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片

      1. package cn.eguid.audioConvert;  
      2.   
      3. import org.bytedeco.javacpp.avcodec;  
      4. import org.bytedeco.javacv.FFmpegFrameGrabber;  
      5. import org.bytedeco.javacv.FFmpegFrameRecorder;  
      6. import org.bytedeco.javacv.Frame;  
      7. import org.bytedeco.javacv.FrameGrabber;  
      8. import org.bytedeco.javacv.FrameRecorder;  
      9. import org.bytedeco.javacv.FrameRecorder.Exception;  
      10.   
      11. /** 
      12.  * 音频参数转换(包含采样率、编码,位数,通道数) 
      13.  *  
      14.  * @author eguid 
      15.  *  
      16.  */  
      17. public class AudioConvert {  
      18.     /** 
      19.      * 通用音频格式参数转换 
      20.      *  
      21.      * @param inputFile 
      22.      *            -导入音频文件 
      23.      * @param outputFile 
      24.      *            -导出音频文件 
      25.      * @param audioCodec 
      26.      *            -音频编码 
      27.      * @param sampleRate 
      28.      *            -音频采样率 
      29.      * @param audioBitrate 
      30.      *            -音频比特率 
      31.      */  
      32.     public static void convert(String inputFile, String outputFile, int audioCodec, int sampleRate, int audioBitrate,  
      33.             int audioChannels) {  
      34.         Frame audioSamples = null;  
      35.         // 音频录制(输出地址,音频通道)  
      36.         FFmpegFrameRecorder recorder = null;  
      37.         //抓取器  
      38.         FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(inputFile);  
      39.   
      40.         // 开启抓取器  
      41.         if (start(grabber)) {  
      42.             recorder = new FFmpegFrameRecorder(outputFile, audioChannels);  
      43.             recorder.setAudioOption("crf""0");  
      44.             recorder.setAudioCodec(audioCodec);  
      45.             recorder.setAudioBitrate(audioBitrate);  
      46.             recorder.setAudioChannels(audioChannels);  
      47.             recorder.setSampleRate(sampleRate);  
      48.             recorder.setAudioQuality(0);  
      49.             recorder.setAudioOption("aq""10");  
      50.             // 开启录制器  
      51.             if (start(recorder)) {  
      52.                 try {  
      53.                     // 抓取音频  
      54.                     while ((audioSamples = grabber.grab()) != null) {  
      55.                         recorder.setTimestamp(grabber.getTimestamp());  
      56.                         recorder.record(audioSamples);  
      57.                     }  
      58.   
      59.                 } catch (org.bytedeco.javacv.FrameGrabber.Exception e1) {  
      60.                     System.err.println("抓取失败");  
      61.                 } catch (Exception e) {  
      62.                     System.err.println("录制失败");  
      63.                 }  
      64.                 stop(grabber);  
      65.                 stop(recorder);  
      66.             }  
      67.         }  
      68.   
      69.     }  
      70.   
      71.     public static boolean start(FrameGrabber grabber) {  
      72.         try {  
      73.             grabber.start();  
      74.             return true;  
      75.         } catch (org.bytedeco.javacv.FrameGrabber.Exception e2) {  
      76.             try {  
      77.                 System.err.println("首次打开抓取器失败,准备重启抓取器...");  
      78.                 grabber.restart();  
      79.                 return true;  
      80.             } catch (org.bytedeco.javacv.FrameGrabber.Exception e) {  
      81.                 try {  
      82.                     System.err.println("重启抓取器失败,正在关闭抓取器...");  
      83.                     grabber.stop();  
      84.                 } catch (org.bytedeco.javacv.FrameGrabber.Exception e1) {  
      85.                     System.err.println("停止抓取器失败!");  
      86.                 }  
      87.             }  
      88.   
      89.         }  
      90.         return false;  
      91.     }  
      92.   
      93.     public static boolean start(FrameRecorder recorder) {  
      94.         try {  
      95.             recorder.start();  
      96.             return true;  
      97.         } catch (Exception e2) {  
      98.             try {  
      99.                 System.err.println("首次打开录制器失败!准备重启录制器...");  
      100.                 recorder.stop();  
      101.                 recorder.start();  
      102.                 return true;  
      103.             } catch (Exception e) {  
      104.                 try {  
      105.                     System.err.println("重启录制器失败!正在停止录制器...");  
      106.                     recorder.stop();  
      107.                 } catch (Exception e1) {  
      108.                     System.err.println("关闭录制器失败!");  
      109.                 }  
      110.             }  
      111.         }  
      112.         return false;  
      113.     }  
      114.   
      115.     public static boolean stop(FrameGrabber grabber) {  
      116.         try {  
      117.             grabber.flush();  
      118.             grabber.stop();  
      119.             return true;  
      120.         } catch (org.bytedeco.javacv.FrameGrabber.Exception e) {  
      121.             return false;  
      122.         } finally {  
      123.             try {  
      124.                 grabber.stop();  
      125.             } catch (org.bytedeco.javacv.FrameGrabber.Exception e) {  
      126.                 System.err.println("关闭抓取器失败");  
      127.             }  
      128.         }  
      129.     }  
      130.   
      131.     public static boolean stop(FrameRecorder recorder) {  
      132.         try {  
      133.             recorder.stop();  
      134.             recorder.release();  
      135.             return true;  
      136.         } catch (Exception e) {  
      137.             return false;  
      138.         } finally {  
      139.             try {  
      140.                 recorder.stop();  
      141.             } catch (Exception e) {  
      142.   
      143.             }  
      144.         }  
      145.     }  
      146. }  

用心你会发现这章跟前面几章很相似?


测试效果

以wav转mp3为例

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片

      1. // 测试  
      2.     public static void main(String[] args) {  
      3.         //pcm参数转换  
      4. //      convert("东部信息.wav", "eguid.wav", avcodec.AV_CODEC_ID_PCM_S16LE, 8000, 16000,1);  
      5.         //pcm转mp3编码示例  
      6.         convert("东部信息.wav""eguid.mp3", avcodec.AV_CODEC_ID_MP3, 800016,1);  
      7.     }  


相信到这里从第一章看过来的已经基本掌握了javaCV-FFmpeg的用法了,这章讲了通用音频转换,那么下一章是否有通用视频转换?


最后

以上就是喜悦雪糕为你收集整理的javaCV开发详解之7:让音频转换更加简单,实现通用音频编码格式转换、重采样等音频参数的转换功能(以pcm16le编码的wav转mp3为例) 转自:http://blog.csdn.net/eguid_1/article/details/52982108 前言: 之前几章把javaCV-FFmpeg中的能够实现的基本功能大致梳理了一遍,本章在之前几章基础上实现一个通用的音频编码和参数转换器 实现功能: ①音频编码转换②音频格式转换③音频重采样④等等。。。跟多功能自行探索 代码实现: 的全部内容,希望文章能够帮你解决javaCV开发详解之7:让音频转换更加简单,实现通用音频编码格式转换、重采样等音频参数的转换功能(以pcm16le编码的wav转mp3为例) 转自:http://blog.csdn.net/eguid_1/article/details/52982108 前言: 之前几章把javaCV-FFmpeg中的能够实现的基本功能大致梳理了一遍,本章在之前几章基础上实现一个通用的音频编码和参数转换器 实现功能: ①音频编码转换②音频格式转换③音频重采样④等等。。。跟多功能自行探索 代码实现: 所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部