java amr格式转mp3格式(完美解决Linux下转换0K问题)
2016-11-19 17:10
507 查看
因项目需求,需要将 amr 格式的文件转成 mp3格式。
网络上提供的思路大多是使用jave-x-x.jar。
这个包确实有用,因为开发时是在windows环境中,测试转换虽然报了异常:
但也确实转换成功了,可以播放。
可是一旦部署到Linux环境当中,不是转换失败,就是转换的文件为大小 0 k。百思不得其解。
jave的能转换的原理其实就是调用外部的二进制可执行文件
jave原jar包截图
。
所以实际上,jave就是封装了一层对外部
而windows上能转换是因为:ffmpeg.exe 这个程序没问题。
而Linux上转换失败也是因为 ffmpeg 这个可能版本太老或依赖库缺失。
起初我以为是调用外部的ffmpeg,所以重新安装编译了Linux的ffmpeg,然并卵。
所以只能再想其他解决方案。
解决方法;
1:在java项目中添加jar包http://download.csdn.net/download/z313731418/9336665地址
1.1如果liux版本不同则需要修改jar包中的ffmpeg文件,下载站点:http://ffmpeg.org/download.html
下载
然后选择一个32位还是64位:
下载
下载之后解压,选择其中的ffmpeg,替换掉。
2、java 代码
[java]
view plain
copy
public static void changeToMp3(String sourcePath, String targetPath) {
File source = new File(sourcePath);
File target = new File(targetPath);
AudioAttributes audio = new AudioAttributes();
Encoder encoder = new Encoder();
audio.setCodec("libmp3lame");
EncodingAttributes attrs = new EncodingAttributes();
attrs.setFormat("mp3");
attrs.setAudioAttributes(audio);
try {
encoder.encode(source, target, attrs);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InputFormatException e) {
e.printStackTrace();
} catch (EncoderException e) {
e.printStackTrace();
}
}
3.如果打印出了错误
基本上算是成功了。可以去目录下查看是否有文件。
在操作的时候,为了验证服务器支持这种方式,你可以将下载回来的ffmpeg拷贝到你的服务器上,手动进行转换一次,如果失败,可以留言哦。
可以操作如下:
解压文件(可以自己下载,也可以下载博主在最后提供的现成的jar包,直接解压jar也,打开
进入目录,看到ffmpeg文件后,将其拷贝到Linux环境下。
准备一个amr文件,将两个文件都拷贝到同一个目录下,进行测试。如果准备好了,如图:
arm和ffmpeg
接着先给ffmpeg加个执行权限
接着调用 ffmpeg 执行转换下
然后你会看到一堆的日志,并且可能还有提示,“test.amr: Input/output error”,但不要担心,先不管,你查看下这个目录下是否多了一个test.mp3 文件。如果有了,恭喜你,转换成功了,尝试播放下MP3
你可能得到的日志如下:
日志和执行.
重点:
用命令可以转换成功,把jar包导进去用程序就不行。
可能是缓存,你到Tomcat下有个temp目录,进入jave 目录,挺多层的,进去看看有没一个ffmpeg文件,删除掉。
网络上提供的思路大多是使用jave-x-x.jar。
这个包确实有用,因为开发时是在windows环境中,测试转换虽然报了异常:
1 | it.sauronsoftware.jave.EncoderException: Duration: N/A, bitrate: N/A |
可是一旦部署到Linux环境当中,不是转换失败,就是转换的文件为大小 0 k。百思不得其解。
原因
经过一些资料和源码跟踪,终于找到了原因。jave的能转换的原理其实就是调用外部的二进制可执行文件
ffmpeg,打开它的jar包就可以发现,它里面内置了:
jave原jar包截图
。
所以实际上,jave就是封装了一层对外部
ffmpeg的调用。
而windows上能转换是因为:ffmpeg.exe 这个程序没问题。
而Linux上转换失败也是因为 ffmpeg 这个可能版本太老或依赖库缺失。
起初我以为是调用外部的ffmpeg,所以重新安装编译了Linux的ffmpeg,然并卵。
所以只能再想其他解决方案。
解决方法;
1:在java项目中添加jar包http://download.csdn.net/download/z313731418/9336665地址
1.1如果liux版本不同则需要修改jar包中的ffmpeg文件,下载站点:http://ffmpeg.org/download.html
下载
然后选择一个32位还是64位:
下载
下载之后解压,选择其中的ffmpeg,替换掉。
2、java 代码
[java]
view plain
copy
public static void changeToMp3(String sourcePath, String targetPath) {
File source = new File(sourcePath);
File target = new File(targetPath);
AudioAttributes audio = new AudioAttributes();
Encoder encoder = new Encoder();
audio.setCodec("libmp3lame");
EncodingAttributes attrs = new EncodingAttributes();
attrs.setFormat("mp3");
attrs.setAudioAttributes(audio);
try {
encoder.encode(source, target, attrs);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InputFormatException e) {
e.printStackTrace();
} catch (EncoderException e) {
e.printStackTrace();
}
}
3.如果打印出了错误
基本上算是成功了。可以去目录下查看是否有文件。
其他!失败看这里!
如果没成功,或者转换失败,看这里。在操作的时候,为了验证服务器支持这种方式,你可以将下载回来的ffmpeg拷贝到你的服务器上,手动进行转换一次,如果失败,可以留言哦。
可以操作如下:
解压文件(可以自己下载,也可以下载博主在最后提供的现成的jar包,直接解压jar也,打开
.it/sauronsoftware/jave目录,也可以看到这个ffmpeg )
进入目录,看到ffmpeg文件后,将其拷贝到Linux环境下。
准备一个amr文件,将两个文件都拷贝到同一个目录下,进行测试。如果准备好了,如图:
arm和ffmpeg
接着先给ffmpeg加个执行权限
1 | chmod +x ffmpeg |
1 | ./ffmpeg -i test.amr test.mp3 |
你可能得到的日志如下:
日志和执行.
重点:
用命令可以转换成功,把jar包导进去用程序就不行。
可能是缓存,你到Tomcat下有个temp目录,进入jave 目录,挺多层的,进去看看有没一个ffmpeg文件,删除掉。
相关文章推荐
- java amr格式转mp3格式(完美解决Linux下转换0K问题)
- java amr格式转mp3格式(完美解决Linux下转换0K问题)
- 完美解决Invalid layout of java.lang.String at value问题的方法
- 解决spring使用动态代理类型转换失败的问题--java.lang.ClassCastException: com.sun.proxy.$Proxy$ cannot be cast to ...今天
- 完美解决Invalid layout of java.lang.String at value问题的方法
- 完美解决Invalid layout of java.lang.String at value问题的方法
- 完美解决linux下U盘文件只读的问题
- Java 用Jackson进行json和object之间的转换(并解决json中存在新增多余字段的问题)
- 完美解决java.lang.OutOfMemoryError处理错误的问题
- Win7+Linux双系统,完美解决删除Linux后出现的任何问题!
- linux出现bash: ./java: cannot execute binary file 问题的解决办法
- Linux 环境下思源黑体字体与 Java 之间的兼容性问题的解决
- Linux 环境下思源黑体字体与 Java 之间的兼容性问题的解决(补充说明)
- Python脚本完美解决Linux环境解压.zip文件乱码问题
- 完美解决Linux(Android)操作系统下aes解密失败的问题
- 关于java中long类型的数据转换json传到前台时丢失精度问题的解决办法
- JAVA之NIO按行读写大文件,完美解决中文乱码问题
- 完美的java解决下载文件问题
- Java 数组转换成List,然后执行add或remove抛异常UnsupportedOperationException问题的解决
- [Java][Liferay] 解决在Linux系统中liferay-ext项目无法卸载的问题