javaCV开发详解之7:让音频转换更加简单,实现通用音频编码格式转换、重采样等音频参数的转换功能(以pcm16le编码的wav转mp3为例)...
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) {}}}
}
测试效果
// 测试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的用法了,这章讲了通用音频转换,那么下一章是否有通用视频转换?
转载于:https://www.cnblogs.com/eguid/p/10195603.html
javaCV开发详解之7:让音频转换更加简单,实现通用音频编码格式转换、重采样等音频参数的转换功能(以pcm16le编码的wav转mp3为例)...相关推荐
- java 音频转码_javaCV开发详解之7:让音频转换更加简单,实现通用音频编码格式转换、重采样等音频参数的转换功能(以pcm16le编码的wav转mp3为例)...
javaCV系列文章: 补充篇: 前言: 之前几章把javaCV-FFmpeg中的能够实现的基本功能大致梳理了一遍,本章在之前几章基础上实现一个通用的音频编码和参数转换器 实现功能: ①音频编码转换② ...
- JavaCV开发详解专栏文章目录(JavaCV速查手册)
本章作为**JavaCV开发详解**专栏的目录. 为了方便大家分类查找,我们把分为两个目录: 第一个分类目录,根据文章技术类型进行分类. 第二个目录,按照博主更新顺序排列. 有些文章既是设备采集又实现 ...
- JavaCV开发详解之3:通用拉流器实现,从流媒体服务器拉流rtsp/rtmp录制成视频文件
JavaCV免费教程目录: JavaCV入门教程(免费JavaCV教程) javacv实战专栏目录(2016年更新至今): JavaCV实战专栏文章目录(2016年更新至今) 2022年最新JavaC ...
- javaCV开发详解之8:转封装在rtsp转rtmp流中的应用(无须转码,更低的资源消耗)
JavaCV免费教程目录: JavaCV入门教程(免费JavaCV教程) javacv实战专栏目录(2016年更新至今): JavaCV实战专栏文章目录(2016年更新至今) 2022年最新JavaC ...
- javacv开发详解之19:如何使用批量的多张图片制作apng动态图,再也不用担心不会制作动态图了
javacv实战专栏目录: JavaCV实战专栏文章目录(JavaCV速查手册) 前言 前面写过视频.桌面屏幕录制apng和gif动态图,虽然已经满足大部分情况,但是没考虑到现在很多动态图都是使用多张 ...
- javacv开发详解之11补充篇:使用批量多张图片制作gif动态图,再也不用担心不会制作动态图了
javacv实战专栏目录: JavaCV实战专栏文章目录(JavaCV速查手册) 前言 前面写过视频.桌面屏幕录制apng和gif动态图,虽然已经满足大部分情况,但是没考虑到现在很多动态图都是使用多张 ...
- JavaCV开发详解之32:使用filter滤镜实现中文字符叠加
javacv实战专栏目录: JavaCV实战专栏文章目录(JavaCV速查手册) 前言 我们在 javaCV开发详解之13:使用FFmpeg Filter过滤器处理音视频中已经简单介绍过如何使用jav ...
- JavaCV开发详解之34:使用filter滤镜实现字符滚动和无限循环滚动字符叠加,跑马灯特效制作
javacv实战专栏目录: JavaCV实战专栏文章目录(JavaCV速查手册) 前言 我们在 javaCV开发详解之13:使用FFmpeg Filter过滤器处理音视频中已经简单介绍过如何使用jav ...
- javacv开发详解补充篇:解决转流后视频画面快进慢放,时间跳动过大,监控视频时间戳重新计算pts和dts
javacv实战专栏目录: JavaCV实战专栏文章目录(JavaCV速查手册) 前言 本篇文章主要用于javacv重新计算pts和dts时间戳. 解决由于没有pts和dts时间戳或者pts和dts时 ...
- JavaCV开发详解之29:使用javacv将多个视频拼接合成单个视频,多个音频拼接合成单个音频,以多个mp4视频合成一个mp4为例
javacv实战专栏目录: JavaCV实战专栏文章目录(JavaCV速查手册) 前言 上一章中我们讲了多张图片合成视频,本章将再此基础上继续拓展,将多个视频/音频拼接合成一个视频/音频文件. 参考资 ...
最新文章
- Nginx配置文件nginx.conf详解(转)
- WYSE率先支持RemoteFX功能
- AChartEngine中的Renderer和DataSet介绍
- php pdo 更新sql语句,增删改查sql语句及PDO数据库连接操作流程实例-2019年7月24日...
- 【转载】/etc/passwd /etc/shadow 详解
- 如何快速启动MongoDB服务?
- 苹果x有android文件夹,iPhone没有文件管理器这点,却让安卓手机羡慕!
- C++ 对象关系映射(ORM)介绍
- 多网卡配置同一网段IP情况解析
- ubuntu phpmyadmin 404 not found
- SQL注入工具大比拼
- 学习软件测试有哪些优势?
- ajax网页没有办法采集,Ajax网页采集方法(最新) - 八爪鱼采集器
- 《十周成为数据分析师》笔记——业务线 第八节 常见互联网业务的数据分析报告的制作及用户分层模型
- 微信小程序的全局变量和单例
- 杭电多校第七场 1011	Kejin Player HDU(6656)
- 宝石塔防:如果还有人过不去1337,俺来发个详细点儿的攻略吧
- 研究生工作周报(第十三周)
- 场景:一个年级,相当链表A ,该年级5个班,每个班5个人,相当于链表B1--B5:做一个学生成绩管理系统学生成绩有语文 数学 英语功能: 录入成绩 找三科总分的最高分 最低分 算出平均分
- 【转载】极大似然估计
热门文章
- binder.java 565_Android跨进程抛异常的原理的实现
- 计算机专业选电科还是华科,西交、华科与两电一邮:5所高校怎么选?工科选西交,学IT选北邮...
- 51单片机原理知识点,复位时钟和时序(二)
- 【浙江大学PAT真题练习乙级】1007 素数对猜想 (20分) 真题解析
- 智能控制-模糊控制Matlab函数汇总
- Lecture 3:动态规划
- 求数组中最大值和次大值
- Android Studio升级到3.0.0后构建项目时出现的问题总结
- markdown的学习
- 双足机器人的平衡控制