Android FFmpeg 转换MP3格式

简介: Android FFmpeg 转换MP3格式

平台


RK3399 + Android 8.1


概述


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


mp3 转 adpcm

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


引用


科普贴!mp3中的比特率VBR,ABR,CBR分别是什么意思?

MobileFFmpeg

FFmpegAndroid

Converting to .mp3 format using ffmpeg and the libmp3lame codec

wiki:Encode/MP3


相关文章
|
6月前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
234 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
6月前
|
编译器 开发工具 Android开发
Android 引入FFmpeg
Android 引入FFmpeg
66 0
|
6月前
|
存储 编解码 数据处理
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码(三)
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码
204 0
|
6月前
|
存储 编解码 数据处理
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码(二)
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码
228 0
|
6月前
|
Unix Linux Shell
FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库
在Linux环境下交叉编译Android所需的FFmpeg so库,首先下载`android-ndk-r21e`,然后解压。接着,上传FFmpeg及相关库(如x264、freetype、lame)源码,修改相关sh文件,将`SYSTEM=windows-x86_64`改为`SYSTEM=linux-x86_64`并删除回车符。对x264的configure文件进行修改,然后编译x264。同样编译其他第三方库。设置环境变量`PKG_CONFIG_PATH`,最后在FFmpeg源码目录执行配置、编译和安装命令,生成的so文件复制到App工程指定目录。
342 9
FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库
|
1月前
|
编解码 语音技术 内存技术
FFmpeg开发笔记(五十八)把32位采样的MP3转换为16位的PCM音频
《FFmpeg开发实战:从零基础到短视频上线》一书中的“5.1.2 把音频流保存为PCM文件”章节介绍了将媒体文件中的音频流转换为原始PCM音频的方法。示例代码直接保存解码后的PCM数据,保留了原始音频的采样频率、声道数量和采样位数。但在实际应用中,有时需要特定规格的PCM音频。例如,某些语音识别引擎仅接受16位PCM数据,而标准MP3音频通常采用32位采样,因此需将32位MP3音频转换为16位PCM音频。
60 0
FFmpeg开发笔记(五十八)把32位采样的MP3转换为16位的PCM音频
|
1月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
88 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
1月前
FFmpeg学习笔记(二):多线程rtsp推流和ffplay拉流操作,并储存为多路avi格式的视频
这篇博客主要介绍了如何使用FFmpeg进行多线程RTSP推流和ffplay拉流操作,以及如何将视频流保存为多路AVI格式的视频文件。
184 0
|
3月前
|
JSON Java Android开发
Android 开发者必备秘籍:轻松攻克 JSON 格式数据解析难题,让你的应用更出色!
【8月更文挑战第18天】在Android开发中,解析JSON数据至关重要。JSON以其简洁和易读成为首选的数据交换格式。开发者可通过多种途径解析JSON,如使用内置的`JSONObject`和`JSONArray`类直接操作数据,或借助Google提供的Gson库将JSON自动映射为Java对象。无论哪种方法,正确解析JSON都是实现高效应用的关键,能帮助开发者处理网络请求返回的数据,并将其展示给用户,从而提升应用的功能性和用户体验。
94 1
|
5月前
|
开发工具 Android开发 开发者
Android `.9.png` 图像是用于UI的可拉伸格式,保持元素清晰度和比例
【6月更文挑战第26天】Android `.9.png` 图像是用于UI的可拉伸格式,保持元素清晰度和比例。通过边上的黑线定义拉伸区域,右下角黑点标识内容区域,适应文本或组件大小变化。常用于按钮、背景等,确保跨屏幕尺寸显示质量。Android SDK 提供`draw9patch.bat`工具来创建和编辑。**
255 6