javaCV系列文章:

javacv开发详解之1:调用本机摄像头视频

javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG、javaCV-openCV)

javaCV开发详解之3:收流器实现,录制流媒体服务器的rtsp/rtmp视频文件(基于javaCV-FFMPEG)

javaCV开发详解之4:转流器实现(也可作为本地收流器、推流器,新增添加图片及文字水印,视频图像帧保存),实现rtsp/rtmp/本地文件转发到rtmp流媒体服务器(基于javaCV-FFMPEG)

javaCV开发详解之5:录制音频(录制麦克风)到本地文件/流媒体服务器(基于javax.sound、javaCV-FFMPEG)

javaCV开发详解之6:本地音频(话筒设备)和视频(摄像头)抓取、混合并推送(录制)到服务器(本地)

javaCV开发详解之7:让音频转换更加简单,实现通用音频编码格式转换、重采样等音频参数的转换功能(以pcm16le编码的wav转mp3为例)

补充篇:

音视频编解码问题:javaCV如何快速进行音频预处理和解复用编解码(基于javaCV-FFMPEG)

音视频编解码问题:16/24/32位位音频byte[]转换为小端序short[],int[],以byte[]转short[]为例

实现给图片增加图片水印或者文字水印(也支持视频图像帧添加水印)

javacpp-ffmpeg:

javacpp-FFmpeg拉流解码成YUVJ420P,并保存为jpg图片

前言:

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

实现功能:

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

代码实现:

package cn.eguid.audioConvert;import org.bytedeco.javacpp.avcodec;
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.FFmpegFrameRecorder;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.FrameGrabber;
import org.bytedeco.javacv.FrameRecorder;
import org.bytedeco.javacv.FrameRecorder.Exception;/*** 音频参数转换(包含采样率、编码,位数,通道数)* * @author eguid* */
public class AudioConvert {/*** 通用音频格式参数转换* * @param inputFile*            -导入音频文件* @param outputFile*            -导出音频文件* @param audioCodec*            -音频编码* @param sampleRate*            -音频采样率* @param audioBitrate*            -音频比特率*/public static void convert(String inputFile, String outputFile, int audioCodec, int sampleRate, int audioBitrate,int audioChannels) {Frame audioSamples = null;// 音频录制(输出地址,音频通道)FFmpegFrameRecorder recorder = null;//抓取器FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(inputFile);// 开启抓取器if (start(grabber)) {recorder = new FFmpegFrameRecorder(outputFile, audioChannels);recorder.setAudioOption("crf", "0");recorder.setAudioCodec(audioCodec);recorder.setAudioBitrate(audioBitrate);recorder.setAudioChannels(audioChannels);recorder.setSampleRate(sampleRate);recorder.setAudioQuality(0);recorder.setAudioOption("aq", "10");// 开启录制器if (start(recorder)) {try {// 抓取音频while ((audioSamples = grabber.grab()) != null) {recorder.setTimestamp(grabber.getTimestamp());recorder.record(audioSamples);}} catch (org.bytedeco.javacv.FrameGrabber.Exception e1) {System.err.println("抓取失败");} catch (Exception e) {System.err.println("录制失败");}stop(grabber);stop(recorder);}}}public static boolean start(FrameGrabber grabber) {try {grabber.start();return true;} catch (org.bytedeco.javacv.FrameGrabber.Exception e2) {try {System.err.println("首次打开抓取器失败,准备重启抓取器...");grabber.restart();return true;} catch (org.bytedeco.javacv.FrameGrabber.Exception e) {try {System.err.println("重启抓取器失败,正在关闭抓取器...");grabber.stop();} catch (org.bytedeco.javacv.FrameGrabber.Exception e1) {System.err.println("停止抓取器失败!");}}}return false;}public static boolean start(FrameRecorder recorder) {try {recorder.start();return true;} catch (Exception e2) {try {System.err.println("首次打开录制器失败!准备重启录制器...");recorder.stop();recorder.start();return true;} catch (Exception e) {try {System.err.println("重启录制器失败!正在停止录制器...");recorder.stop();} catch (Exception e1) {System.err.println("关闭录制器失败!");}}}return false;}public static boolean stop(FrameGrabber grabber) {try {grabber.flush();grabber.stop();return true;} catch (org.bytedeco.javacv.FrameGrabber.Exception e) {return false;} finally {try {grabber.stop();} catch (org.bytedeco.javacv.FrameGrabber.Exception e) {System.err.println("关闭抓取器失败");}}}public static boolean stop(FrameRecorder recorder) {try {recorder.stop();recorder.release();return true;} catch (Exception e) {return false;} finally {try {recorder.stop();} catch (Exception e) {}}}
}

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

测试效果

以wav转mp3为例

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

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

支持eguid原创

转载于:https://www.cnblogs.com/eguid/p/10195603.html

javaCV开发详解之7:让音频转换更加简单,实现通用音频编码格式转换、重采样等音频参数的转换功能(以pcm16le编码的wav转mp3为例)...相关推荐

  1. java 音频转码_javaCV开发详解之7:让音频转换更加简单,实现通用音频编码格式转换、重采样等音频参数的转换功能(以pcm16le编码的wav转mp3为例)...

    javaCV系列文章: 补充篇: 前言: 之前几章把javaCV-FFmpeg中的能够实现的基本功能大致梳理了一遍,本章在之前几章基础上实现一个通用的音频编码和参数转换器 实现功能: ①音频编码转换② ...

  2. JavaCV开发详解专栏文章目录(JavaCV速查手册)

    本章作为**JavaCV开发详解**专栏的目录. 为了方便大家分类查找,我们把分为两个目录: 第一个分类目录,根据文章技术类型进行分类. 第二个目录,按照博主更新顺序排列. 有些文章既是设备采集又实现 ...

  3. JavaCV开发详解之3:通用拉流器实现,从流媒体服务器拉流rtsp/rtmp录制成视频文件

    JavaCV免费教程目录: JavaCV入门教程(免费JavaCV教程) javacv实战专栏目录(2016年更新至今): JavaCV实战专栏文章目录(2016年更新至今) 2022年最新JavaC ...

  4. javaCV开发详解之8:转封装在rtsp转rtmp流中的应用(无须转码,更低的资源消耗)

    JavaCV免费教程目录: JavaCV入门教程(免费JavaCV教程) javacv实战专栏目录(2016年更新至今): JavaCV实战专栏文章目录(2016年更新至今) 2022年最新JavaC ...

  5. javacv开发详解之19:如何使用批量的多张图片制作apng动态图,再也不用担心不会制作动态图了

    javacv实战专栏目录: JavaCV实战专栏文章目录(JavaCV速查手册) 前言 前面写过视频.桌面屏幕录制apng和gif动态图,虽然已经满足大部分情况,但是没考虑到现在很多动态图都是使用多张 ...

  6. javacv开发详解之11补充篇:使用批量多张图片制作gif动态图,再也不用担心不会制作动态图了

    javacv实战专栏目录: JavaCV实战专栏文章目录(JavaCV速查手册) 前言 前面写过视频.桌面屏幕录制apng和gif动态图,虽然已经满足大部分情况,但是没考虑到现在很多动态图都是使用多张 ...

  7. JavaCV开发详解之32:使用filter滤镜实现中文字符叠加

    javacv实战专栏目录: JavaCV实战专栏文章目录(JavaCV速查手册) 前言 我们在 javaCV开发详解之13:使用FFmpeg Filter过滤器处理音视频中已经简单介绍过如何使用jav ...

  8. JavaCV开发详解之34:使用filter滤镜实现字符滚动和无限循环滚动字符叠加,跑马灯特效制作

    javacv实战专栏目录: JavaCV实战专栏文章目录(JavaCV速查手册) 前言 我们在 javaCV开发详解之13:使用FFmpeg Filter过滤器处理音视频中已经简单介绍过如何使用jav ...

  9. javacv开发详解补充篇:解决转流后视频画面快进慢放,时间跳动过大,监控视频时间戳重新计算pts和dts

    javacv实战专栏目录: JavaCV实战专栏文章目录(JavaCV速查手册) 前言 本篇文章主要用于javacv重新计算pts和dts时间戳. 解决由于没有pts和dts时间戳或者pts和dts时 ...

  10. JavaCV开发详解之29:使用javacv将多个视频拼接合成单个视频,多个音频拼接合成单个音频,以多个mp4视频合成一个mp4为例

    javacv实战专栏目录: JavaCV实战专栏文章目录(JavaCV速查手册) 前言 上一章中我们讲了多张图片合成视频,本章将再此基础上继续拓展,将多个视频/音频拼接合成一个视频/音频文件. 参考资 ...

最新文章

  1. Nginx配置文件nginx.conf详解(转)
  2. WYSE率先支持RemoteFX功能
  3. AChartEngine中的Renderer和DataSet介绍
  4. php pdo 更新sql语句,增删改查sql语句及PDO数据库连接操作流程实例-2019年7月24日...
  5. 【转载】/etc/passwd /etc/shadow 详解
  6. 如何快速启动MongoDB服务?
  7. 苹果x有android文件夹,iPhone没有文件管理器这点,却让安卓手机羡慕!
  8. C++ 对象关系映射(ORM)介绍
  9. 多网卡配置同一网段IP情况解析
  10. ubuntu phpmyadmin 404 not found
  11. SQL注入工具大比拼
  12. 学习软件测试有哪些优势?
  13. ajax网页没有办法采集,Ajax网页采集方法(最新) - 八爪鱼采集器
  14. 《十周成为数据分析师》笔记——业务线 第八节 常见互联网业务的数据分析报告的制作及用户分层模型
  15. 微信小程序的全局变量和单例
  16. 杭电多校第七场 1011 Kejin Player HDU(6656)
  17. 宝石塔防:如果还有人过不去1337,俺来发个详细点儿的攻略吧
  18. 研究生工作周报(第十三周)
  19. 场景:一个年级,相当链表A ,该年级5个班,每个班5个人,相当于链表B1--B5:做一个学生成绩管理系统学生成绩有语文 数学 英语功能: 录入成绩 找三科总分的最高分 最低分 算出平均分
  20. 【转载】极大似然估计

热门文章

  1. binder.java 565_Android跨进程抛异常的原理的实现
  2. 计算机专业选电科还是华科,西交、华科与两电一邮:5所高校怎么选?工科选西交,学IT选北邮...
  3. 51单片机原理知识点,复位时钟和时序(二)
  4. 【浙江大学PAT真题练习乙级】1007 素数对猜想 (20分) 真题解析
  5. 智能控制-模糊控制Matlab函数汇总
  6. Lecture 3:动态规划
  7. 求数组中最大值和次大值
  8. Android Studio升级到3.0.0后构建项目时出现的问题总结
  9. markdown的学习
  10. 双足机器人的平衡控制