使用 FFmpeg 更改音频音量 Android
Changing Audio Volume using FFmpeg Android
据我了解,更改 FFmpeg
音量的唯一方法是通过 command line
。
这是应该改变音频音量的方法:
ffmpeg -i input.wav -filter:a "volume=1.5" output.wav
现在我已经在命令行中使用了 FFmpeg
,它看起来像这样并且没有给我任何错误:
String[] cmd = { "-i" , pcmtowavTempFile.toString(), "-i", mp3towavTempFile.toString(), "-filter_complex", "amix=inputs=2:duration=first:dropout_transition=3", combinedwavTempFile.toString()};
ffmpeg.execute(cmd, new ExecuteBinaryResponseHandler() {
@Override
public void onSuccess(String message) {
super.onSuccess(message);
encodeWavToAAC();
}
@Override
public void onFailure(String message) {
super.onFailure(message);
onError(message);
}
});
但是如果我尝试以相同的方法对音量进行处理,它就会忽略它:
String[] cmd = { "-i" , pcmtowavTempFile.toString(), "-filter:a", "volume=1.3", pcmtowavTempFile.toString()};
ffmpeg.execute(cmd, new ExecuteBinaryResponseHandler() {
@Override
public void onSuccess(String message) {
super.onSuccess(message);
}
@Override
public void onFailure(String message) {
super.onFailure(message);
}
});
我没有得到,没有 success or error message
用最后的体积变化方法。
由于音量介于 " "
之间,我尝试添加这个:
String[] cmd = { "-i" , pcmtowavTempFile.toString(), "-filter:a", "\"volume=1.3\"", pcmtowavTempFile.toString()};
但是应用程序在添加此行后开始崩溃。
请尝试使用此库代替相同的命令。它使用最新的 FFmpeg。
https://github.com/bravobit/FFmpeg-Android
FFmpeg ffmpeg = FFmpeg.getInstance(context);
if (ffmpeg.isSupported()) {
// to execute "ffmpeg -version" command you just need to pass "-version"
String[] cmd= {"-i", pcmtowavTempFile.toString(), "-af", "volume=1.3", pcmtowavTempFile.toString()};
ffmpeg.execute(cmd, new ExecuteBinaryResponseHandler() {
@Override
public void onStart() {}
@Override
public void onProgress(String message) {}
@Override
public void onFailure(String message) {}
@Override
public void onSuccess(String message) {}
@Override
public void onFinish() {}
});
} else {
// ffmpeg is not supported
}
这里的错误是 FFmpeg 不执行就地编辑,这意味着我不能覆盖相同的 File
。我尝试通过添加命令 "-y"
来覆盖,但由于相同的规则,这也不起作用。
所以解决方案是创建一个新的 File
作为输出 File
。
据我了解,更改 FFmpeg
音量的唯一方法是通过 command line
。
这是应该改变音频音量的方法:
ffmpeg -i input.wav -filter:a "volume=1.5" output.wav
现在我已经在命令行中使用了 FFmpeg
,它看起来像这样并且没有给我任何错误:
String[] cmd = { "-i" , pcmtowavTempFile.toString(), "-i", mp3towavTempFile.toString(), "-filter_complex", "amix=inputs=2:duration=first:dropout_transition=3", combinedwavTempFile.toString()};
ffmpeg.execute(cmd, new ExecuteBinaryResponseHandler() {
@Override
public void onSuccess(String message) {
super.onSuccess(message);
encodeWavToAAC();
}
@Override
public void onFailure(String message) {
super.onFailure(message);
onError(message);
}
});
但是如果我尝试以相同的方法对音量进行处理,它就会忽略它:
String[] cmd = { "-i" , pcmtowavTempFile.toString(), "-filter:a", "volume=1.3", pcmtowavTempFile.toString()};
ffmpeg.execute(cmd, new ExecuteBinaryResponseHandler() {
@Override
public void onSuccess(String message) {
super.onSuccess(message);
}
@Override
public void onFailure(String message) {
super.onFailure(message);
}
});
我没有得到,没有 success or error message
用最后的体积变化方法。
由于音量介于 " "
之间,我尝试添加这个:
String[] cmd = { "-i" , pcmtowavTempFile.toString(), "-filter:a", "\"volume=1.3\"", pcmtowavTempFile.toString()};
但是应用程序在添加此行后开始崩溃。
请尝试使用此库代替相同的命令。它使用最新的 FFmpeg。
https://github.com/bravobit/FFmpeg-Android
FFmpeg ffmpeg = FFmpeg.getInstance(context);
if (ffmpeg.isSupported()) {
// to execute "ffmpeg -version" command you just need to pass "-version"
String[] cmd= {"-i", pcmtowavTempFile.toString(), "-af", "volume=1.3", pcmtowavTempFile.toString()};
ffmpeg.execute(cmd, new ExecuteBinaryResponseHandler() {
@Override
public void onStart() {}
@Override
public void onProgress(String message) {}
@Override
public void onFailure(String message) {}
@Override
public void onSuccess(String message) {}
@Override
public void onFinish() {}
});
} else {
// ffmpeg is not supported
}
这里的错误是 FFmpeg 不执行就地编辑,这意味着我不能覆盖相同的 File
。我尝试通过添加命令 "-y"
来覆盖,但由于相同的规则,这也不起作用。
所以解决方案是创建一个新的 File
作为输出 File
。