使用Jave将G711A音频转码MP3或AAC
因为项目关系,需要使用到音视频转码这块,将G711A音频转码为MP3或AAC格式。网上普遍都是使用C/C++或者ffmpeg转码。由于项目中要求要使用Java编写,笔者在网上多番查找,终于找到了使用Java封装ffmpeg的Jave项目。
经过考虑决定使用 https://github.com/a-schild/jave2
封装的jar包,而不是 http://www.sauronsoftware.it/projects/jave/
封装的。主要原因是前者将 ffmpeg 单独封装成了jar包,并且提供了Windows、Linux、MacOs多个版本的jar包,方便替换。在这里笔者使用的是 2.4.6 版本的。
- 获取途径一:根据 https://github.com/a-schild/jave2 中提示去做。
- 获取途径二:在 maven 中直接搜 jave 下载 jar 包,或者直接使用 maven 引入。
笔者是直接下载的 jar 包,因为在 maven 中引入的时候,总是不成功,有可能是网络的原因,下载的时候是10几K的蹦。我也很无奈啊…
以下是需要引入的jar包:
- jave-core-2.4.6
- jave-native-win64-2.4.6
- commons-logging-1.2
由于jave-core包中需要使用log所以又格外加了一个commons-logging,至于其他版本的jave-core需要的可能会不一样,读者可以查看对应版本的源码,确定要引入的其他jar包。在部署到Linux中要替换jave-native-win64-2.4.6为jave-native-linux64-2.4.6。
如果对jave的使用不了解,可以参考jave的说明文档 http://www.sauronsoftware.it/projects/jave/manual.php,但是文档有点老旧,里面有一些编解码格式参数会不正确,这需要读者进行尝试。也可以继续往下阅读,看看笔者是如何解决的。
所需要的jar包准备完成,现在开始上代码
1、创建Java项目
这里笔者不再过多介绍,如何创建自己百度,我相信你能看到这于你Java已经很熟悉了。这里不再过多解释。
2、将上述jar包引入到项目中
这里也不过多解释。不会了自己百度。
在这里说明以下,笔者的开发环境,jdk8 + idea。
3、G711A + AVC 格式MP4视频转MP3 + AVC格式MP4视频
由于这里视频编码格式不需要变,都是AVC,直接使用VideoAttributes.DIRECT_STREAM_COPY即可,如果读者的视频编码格式需要变动,请参考 jave 说明文档,再次说明,文档中提供的编解码格式可能会有不支持的,需要读者自己验证。我在刚开始使用时,就遇到了这种情况,参考了说明文档,想要使用h264的编码格式即AVC,然后将编码格式设置为libx264,但是报错了,找不到。经过多番努力,在源码中,找到了这个直接copy原视频编码的方法。
而对于音频编码为MP3来说,提供的说明还是正常的,即使用libmp3lame即可。
具体代码如下:
import ws.schild.jave.*;
import java.io.File;
/**
* @Author:
* @Date: 2020/4/17 10:39
*/
public class G711AToMp3 {
public static int name=0;
public static void main(String[] args) throws EncoderException {
for(int i=0;i<10;i++){
new Thread(new Runnable() {
@Override
publ