Ubuntu下自动化安装ffmpeg
sudo apt-get install libavcodec-extra-52 sudo apt-get install ffmpeg
ffmpeg常用命令
1.简单命令
ffmpeg -i test.mp3 -ab 64k -acodec libmp3lame out.mp3
ffmpeg -loglevel quiet -i 1.mp3 -ab 24k -ar 22050 -acodec libmp3lame 132out.mp3
注:这条命令可以解决java调用的时候线程死锁问题,但使用该命令跟ffmpeg版本有关
同时在高码率转低码率转不下的时候,可以设置歌曲的频率
如果上述命令不能运行可以尝试一下命令
ffmpeg -i 1.mp3 -ab 24k -ar 22050 -acodec libmp3lame 13d2out.mp3 >/dev/null
ffmpeg -i 1.mp3 -ab 24k -ar 22050 -acodec libmp3lame 13d2out.mp3 >/dev/null 2>&1
Windows环境下的调用
public void run() {
Runtime rt = Runtime.getRuntime();
Process p = null;
try {
p = rt.exec("cmd /c ffmpeg -loglevel quiet -i 12.mp3 -ab 24k -ar 22050 -acodec libmp3lame out.mp3", null, new File("C:\\ffmpeg-git-670229e-win32-static\\bin"));
// 获取进城的错误流
final InputStream is1 = p.getErrorStream();
// 获取进城的标准输入流
final InputStream is2 = p.getInputStream();
// 启动两个线程,一个线程负责读标准输出流,另一个负责读标准错误流
new Thread() {
public void run() {
BufferedReader br1 = new BufferedReader(
new InputStreamReader(is1));
try {
String line1 = null;
while ((line1 = br1.readLine()) != null) {
if (line1 != null) {
}
}
} catch (IOException e) {
try {
is1.close();
} catch (IOException e1) {
}
} finally {
try {
is1.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}.start();
new Thread() {
public void run() {
BufferedReader br2 = new BufferedReader(
new InputStreamReader(is2));
try {
String line2 = null;
while ((line2 = br2.readLine()) != null) {
if (line2 != null) {
}
}
} catch (IOException e) {
try {
is2.close();
} catch (IOException e1) {
}
} finally {
try {
is2.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}.start();
int i = p.waitFor();// 返回0则表示正常执行完成
p.destroy();
} catch (Exception e) {
e.printStackTrace();
try {
p.getErrorStream().close();
p.getInputStream().close();
p.getOutputStream().close();
} catch (Exception ee) {
}
}
}
linux环境下的调用
public void run() {
Runtime rt = Runtime.getRuntime();
Process p = null;
try {
p = rt.exec("ffmpeg -loglevel quiet -i 12.mp3 -ab 24k -ar 22050 -acodec libmp3lame out.mp3");
// 获取进城的错误流
final InputStream is1 = p.getErrorStream();
// 获取进城的标准输入流
final InputStream is2 = p.getInputStream();
// 启动两个线程,一个线程负责读标准输出流,另一个负责读标准错误流
new Thread() {
public void run() {
BufferedReader br1 = new BufferedReader(
new InputStreamReader(is1));
try {
String line1 = null;
while ((line1 = br1.readLine()) != null) {
if (line1 != null) {
}
}
} catch (IOException e) {
try {
is1.close();
} catch (IOException e1) {
}
} finally {
try {
is1.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}.start();
new Thread() {
public void run() {
BufferedReader br2 = new BufferedReader(
new InputStreamReader(is2));
try {
String line2 = null;
while ((line2 = br2.readLine()) != null) {
if (line2 != null) {
}
}
} catch (IOException e) {
try {
is2.close();
} catch (IOException e1) {
}
} finally {
try {
is2.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}.start();
int i = p.waitFor();
p.destroy();
} catch (Exception e) {
e.printStackTrace();
try {
p.getErrorStream().close();
p.getInputStream().close();
p.getOutputStream().close();
} catch (Exception ee) {
}
}
}