使用FFmpeg Android更改音频音量

时间:2018-08-22 18:56:12

标签: android cmd ffmpeg wav volume

据我了解,更改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()};

但是添加此行后,应用程序开始崩溃。

2 个答案:

答案 0 :(得分:1)

请尝试使用同一命令代替此库。它使用最新的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
}

答案 1 :(得分:0)

这里的错误是FFmpeg不执行就地编辑,这意味着我无法覆盖相同的File。我尝试通过添加命令"-y"进行覆盖,但由于该规则相同,因此也无法正常工作。

因此解决方案是创建一个新的File作为输出File