Android FFmpeg 转换MP3格式

暴德运
2023-12-01

平台

RK3399 + Android 8.1

概述

需要在RK上完成MP3格式转换, 主要分两部分:

  1. mp3 转 adpcm
  2. mp3 转 CBR mp3

专业的事情还是要找专业的工具做, 比哪 FFMPEG. 很强大, 但并不了解它, 只能在应用边缘窥探.
在github上分别找了两个项目测试, 效果还可以: MobileFFmpeg , FFmpegAndroid


mp3 转 adpcm

FFmpegAndroid为例:

FFmpegUtil.java 中添加

    public static final String AUDIO_CODEC_ADPCM = "adpcm_ms";
    public static final String AUDIO_CODEC_WAV = "wav";
    public static final String AUDIO_CODEC_MP3 = "mp3";
    //ffmpeg -i INPUT.wav -f wav -acodec adpcm_ms OUTPUT.wav
    public static String[] transformAudioAdpcm(String inputPath, String outputPath) {
        String transformAudioCmd = "ffmpeg -i %s -acodec %s -ac 1 -ar 16000 %s";
        transformAudioCmd = String.format(transformAudioCmd, inputPath, AUDIO_CODEC_ADPCM, outputPath);
        return transformAudioCmd.split(" ");
    }

MainActivity.java 调用:

    String srcMp3 = "/mnt/sdcard/test.mp3";
    void toAdpcm(){
        d("toAdpcm");
        String out = "/mnt/sdcard/test.wav";
        FFmpegHandler ffh = new FFmpegHandler(h);
        String[] cmds = FFmpegUtil.transformAudioAdpcm(srcMp3, out);
        ffh.executeFFmpegCmd(cmds);
    }

实际执行的命令: ffmpeg -i /mnt/sdcard/test.mp3 -acodec adpcm_ms -ac 1 -ar 16000 /mnt/sdcard/test.wav


mp3 转 CBR mp3

首先科普下CBR VBR ABR

CBR (constant Bitrate)固定比特率。
VBR(Variable Bitrate)动态比特率
ABR(Average Bitrate)平均比特率,是VBR的一种插值参数。

MobileFFmpeg为例:

	String src = "/sdcard/test.mp3";
	String dst = "/sdcard/cbr.mp3";
	//8, 16, 24, 32, 40, 48, 64, 80, 96, 112, 128, 160, 192, 224, 256
	int rc = FFmpeg.execute(" -i " + src + " -codec:a libmp3lame -b:a 48k " + dst);

实际执行的命令: ffmpeg -i /mnt/sdcard/test.mp3 -codec:a libmp3lame -ar -b:a 48k /mnt/sdcard/test.wav


更多丰富的功能可以查看FFmpeg的文档, 共勉!

Converting to .mp3 format using ffmpeg and the libmp3lame codec.pdf

引用

 类似资料: