使用 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