ffmpeg配了环境变量,在cmd中可以正常使用,Java使用processbuilder调用cmd命令就报错无法执行,
public void test3() throws Exception {
ProcessBuilder builder = new ProcessBuilder("ffmpeg -i E:\\football.mp4");
builder.redirectErrorStream(true);
try {
Process process = builder.start();
final StringBuilder stringBuilder = new StringBuilder();
final InputStream inputStream = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream,"GBK"));
String line;
int i = 1;
try {
while ((line = reader.readLine()) != null) {
System.out.println("读取第"+ i++ +"行:"+line);
stringBuilder.append(line);
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (Exception e) {
throw new RuntimeException("ffmpeg执行异常" + e.getMessage());
}
}
报错信息
java.lang.RuntimeException: ffmpeg执行异常Cannot run program "ffmpeg -i E:\football.mp4": CreateProcess error=2, 系统找不到指定的文件。
文件位置是对的,也是存在的 同样的命令 cmd直接执行时可以的
文件权限和ffmpeg文件夹的权限也修改过:
D:\ffmpeg /T /E /C /G everyone:F
到底是为什么啊?
python 可以解决
先安装包
pip install pydub
导入
from pydub import AudioSegment
使用
def trans_mp3_to_wav(filepath):
song = AudioSegment.from_mp3(filepath)
song.export("now.wav", format="wav")
trans_mp3_to_wav('f:\\MyAudio_1.mp3')
即可用pydub使用 ffmpeg
我也出现这个问题,原因是ffmpeg是在Java进程启动过后,才后添加ffmpeg的环境变量,一开始怎么找都没找到原因,后来想想,会不会是jvm加载环境变量机制不一样,随后我就重启了电脑,再执行程序,就没出现这个问题了。初步猜测就是JVM加载环境变量的机制问题,具体得验证一下才知道