Java 巧妙将音频amr格式转换成MP3(linux 以及windows)

作为一名技术宅男,没事就上掘金来淘宝,在这学习了很多东西,也一直想开个博客,写写自己的东西,一方面就当是笔记,另一方面也可以作为他人学习的前进的一种参考,本着这样的想法今天来开启我的第一篇博客之路,俗话说前人栽树后人乘凉,我们受益于前人,亦让后人得益于我们,废话不多说了让我们开启转码吧,在此郑重说明:所写内容均来自与实战,可借鉴,有问题可与本人联系,共同探讨,一起进步.

需求背景简介

在一个特定的场景之下,pc端管理后台可以为场景上传一个默认的语音讲解,然后在app端,用户可以为听场景的讲解也可以单独为场景配音,上传通过之后,会在用户端展示供他人播放。 **

难点解刨

录音上传很简单,但是在上传后会发现Android的录音默认是amr格式的,audio标签不能播放,为了兼容性决定将音频的格式统一成MP3。将pc端上传的音频一并处理,并计算音频的时长。

实战

鉴于此想法,开启填坑之路。 度娘了一些博客,基本都是指向了JAVe.jar,官网:www.sauronsoftware.it/projects/ja… ,想着有希望了,但点击下载才发现最后的一个版本是2009,已经快十年都没更新升级了,然后又看了一下文档介绍:Installation and requirements In order to use JAVE in your Java application, you have to add the file jave-1.0.jar in your application CLASSPATH. JAVE runs on a Java Runtime Environment J2SE v.1.4 or later.JAVE includes and uses a ffmpeg executable built for Windows and Linux operating systems on i386/32 bit hardware platforms. In order to run JAVE on other platforms you have to replace the built-in ffmpeg executable with another one suitable for your needs. This is very simple, once you have built your own ffmpeg binaries. The operation is described in the "Using an alternative ffmpeg executable" section., 大意就是说安装JAVE的Java 1.4以上版本,仅仅支持32位的Windows and Linux。这一点非常的坑,不可能为了转码将linux以及windows都换成32位的,但是继续又说到根据需要用二进制文件ffmpeg 替换一下,就可以在不同环境下使用了,这个好像可以解决;注意这一句‘Using an alternative ffmpeg executable’,点进去后可以看到,

这一段说的就很清楚了,jave并不是纯java写的,真正干活的是ffmpeg这个c语言写的,这下清楚了,原来是官方是只提供了32位的ffmpeg可执行文件,我们需要干的就是弄一个64位的可执行文件就可以搞定了,然后继承FFMPEGLocator 类,实现里边的方法在创建新的编码器就可以,点开上边的网址http://ffmpeg.mplayerhq.hu/,,来到ffmpeg的官网点击下载看到

看到linux 好开心,再看最后一行,32位64位静态编译是什么鬼,点进去看一看

卧槽,安装说明,毫不犹豫进去看看

我的乖乖,静态编译安装,二进制的,美太太,然后按照说明一路执行命令就可以了,执行完成后就可以得到一个64位二进制文件ffmpeg,然后将ffmpeg拷贝出来放在Java项目中就可以了。最主要的事情完成了。偷笑一下。 再次回到JAVE的官网继续看,拉到文档底部,可以看到 Examples,然后剔除不要的(只需转码),基本就剩下:

File source = new File("source.amr");
File target = new File("target.mp3");
AudioAttributes audio = new AudioAttributes();
audio.setCodec("libmp3lame");
EncodingAttributes attrs = new EncodingAttributes();
attrs.setFormat("mp3");
attrs.setAudioAttributes(audio);
Encoder encoder = new Encoder();
encoder.encode(source, target, attrs);
复制代码

现在一目了然,根据官方文档只需替换用Encoder encoder = new Encoder(new MyFFMPEGExecutableLocator())就可以在linux64上使用了。同时windows也可以使用原来的编码器。也就是说只需要在不同的环境下切换编码器就可以了。这样就可以完美的解决windows以及linux下的音频转码问题了。

提示:如果在linux上依然不能成功,请给ffmpeg的相关执行权限

声明:本人第一次写博客,有不当的地方还请海涵,有不明白的问题可以留言,不喜勿喷,请学会尊重别人。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值