【问题标题】:Changing Audio Volume using FFmpeg Android使用 FFmpeg Android 更改音频音量
【发布时间】:2018-08-24 02:57:52
【问题描述】:

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

但添加此行后应用开始崩溃。

【问题讨论】:

  • 添加最后一行后出现什么异常?
  • @RamiJemli 它只是崩溃而没有给我任何东西,我尝试调试它以获得异常但我得到了相同的结果 - 没有。
  • @RamiJemli 我可以确定这是因为当我删除它时,它不会崩溃。或者我只是不知道如何查找命令行错误

标签: android cmd ffmpeg wav volume


【解决方案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
}

【讨论】:

  • 由于第一个命令运行完美,我怀疑不支持 FFmpeg
  • 我用同样的方式初始化ffmpeg
  • 是的,但据我所知,这是唯一一个拥有最新编译的 FFMpeg 版本的库。值得一试。
  • 我让它工作了。请检查我更新的答案中的命令。
  • 好的,你检查pcmtowavTempFile.toString()和pcmtowavTempFile.toString()的内容了吗
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 2012-06-30
    相关资源
    最近更新 更多