做为一名技术宅男,没事就上掘金来淘宝,在这学习了不少东西,也一直想开个博客,写写本身的东西,一方面就当是笔记,另外一方面也能够做为他人学习的前进的一种参考,本着这样的想法今天来开启个人第一篇博客之路,俗话说前人栽树后人乘凉,咱们受益于前人,亦让后人得益于咱们,废话很少说了让咱们开启转码吧,在此郑重说明:所写内容均来自与实战,可借鉴,有问题可与本人联系,共同探讨,一块儿进步.php
在一个特定的场景之下,pc端管理后台能够为场景上传一个默认的语音讲解,而后在app端,用户能够为听场景的讲解也能够单独为场景配音,上传经过以后,会在用户端展现供他人播放。 **java
录音上传很简单,可是在上传后会发现Android的录音默认是amr格式的,audio标签不能播放,为了兼容性决定将音频的格式统一成MP3。将pc端上传的音频一并处理,并计算音频的时长。linux
鉴于此想法,开启填坑之路。 度娘了一些博客,基本都是指向了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’,点进去后能够看到, windows
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下的音频转码问题了。bash
提示:若是在linux上依然不能成功,请给ffmpeg的相关执行权限app
声明:本人第一次写博客,有不当的地方还请海涵,有不明白的问题能够留言,不喜勿喷,请学会尊重别人。学习