ffmpeg 音频转amr

1.安装ffmpeg
Mac:
不需要安装,直接在官网下载 http://ffmpeg.org/download.html
下载地址:https://evermeet.cx/ffmpeg/(免安装版,将其copy到自己的目录,直接可以用)
ffmpeg安装后,输入ffmepg -version命令,查看是否支持opencore-amr的解码器
Linux:
下载地址:https://www.johnvansickle.com/ffmpeg/
我选择的是: x86_64 build(适合自己的服务器)也是免安装版
2.amr格式需要opencore-amr
其下载地址:https://sourceforge.net/projects/opencore-amr/
amr编译方法:参考自:http://blog.youkuaiyun.com/tylz04/article/details/9041739

其编译方法;
    chmod 755 opencore-amr-0.1.3.tar.gz     //改变文件操作权限
    tar -xzvf opencore-amr-0.1.3.tar.gz     //解压文件
    cd opencore-amr-0.1.3       //进入到opencore-amr文件夹内
    ./configure --enable-shared=no --enable-static=yes  //配置
    make        //编译
    make install

ffmpeg会自己寻找解码器
ffmpeg查看是否支持opencore-amr:
终端输入: ffmpeg查看 –enable-libopencore-armnb和–enable-libopencore-amrwb表示支持opencore-amr解码器

configuration: --cc=/usr/bin/clang --prefix=/opt/ffmpeg --extra-version=tessus --enable-avisynth --enable-fontconfig --enable-gpl --enable-libass --enable-libbluray --enable-libfreetype --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopus --enable-libschroedinger --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzmq --enable-libzvbi --enable-version3 --disable-ffplay --disable-indev=qtkit

3.mp3与wav转amr代码

/** ffmpeg的安装目录,用于启用ffmpeg */
private static final String ffmpeg = "/usr/local/ffmpeg-3.3-64bit-static/ffmpeg";
/**
 * -ab(-b:a) bitrate 设置音频码率
 * -ar freq 设置音频采样率
 * -c:a(-acodec) 设置声音解码器
 * -y 覆盖输出文件,若果源文件已经存在,那么不经提示,直接覆盖
 * -vol 音量大小
 * -ac (声道数1和2)
 * @param sourcePath 源文件地址,输出位置:源文件文件夹内,只改变文件格式
 */
public static boolean changeToAmer(String sourcePath){
    try {
        String prefix = sourcePath.substring(0,sourcePath.lastIndexOf("."));
        String commend = ffmpeg + " -i " + sourcePath + " -c:a libopencore_amrnb -ac 1 -ar 8000 -b:a 7.95K -y " + prefix + ".amr";
        VideoUtilsExt.executeCommend(commend);
    } catch (IOException e) {
        e.printStackTrace();
        return false;
    }
    return true;
}

public static void executeCommend(String commend) throws IOException{
        System.out.println(commend);
        Process process = new ProcessBuilder(Arrays.asList(commend.split(" "))).redirectErrorStream(true).start();
        new MyPrintStream(process.getInputStream()).start();
        try {
            process.waitFor();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

补充:MyPrintStream内部类,其实就是将视频转换的获得的流打印出来(包括ffmeg相关信息,命令行,以及转换过程,异常信息等)

class MyPrintStream extends Thread{
    InputStream iStream = null;
    public MyPrintStream(InputStream iStream) {
        this.iStream = iStream;
    }

    @Override
    public void run() {
        try{
            int r = 0;
            while ((r = iStream.read())!= -1) {
                System.out.print((char)(r));
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

另外,如果视频转换的并发量比较大,可以创建一个线程池,将转换代码放到线程里面完成。

<think>嗯,用户现在想要知道如何使用ffmpeg把wav音频换为amr格式。这个问题其实挺明确的,但需要结合之前提供的三个参考引用内容来给出准确方案。 先看看引用[1]里提供了两个具体命令示例:一个是"ffmpeg -i test.wav -acodec libamr_nb -ab 12.2k -ar 8000 -ac 1 wav2amr.amr",另一个是"ffmpeg.exe -i PA003.wav -ar 8000 -ab 12.2k -ac 1 target.amr"。这两个命令结构基本一致,主要参数包括设置amr窄带编码器、12.2k比特率、8kHz采样率和单声道。用户提到这个方案已经验证通过,应该是最可靠的参考。 引用[2]提到项目中出现过InputFormatException报错,这说明可能遇到编码器支持问题。而引用[3]补充了关键信息:需要确认ffmpeg是否编译了opencore-amr支持。它详细说明了在Mac/Linux下如何获取预编译版本或自行编译带amr支持的ffmpeg,特别强调要检查版本信息里是否包含libopencore_amr。 综合这些信息,完整的解决方案应该包括:首先强调环境准备,必须确保ffmpeg支持amr编码;然后给出标准化命令模板,核心参数不能省略;最后补充质量优化选项和批量处理技巧。用户可能没意识到采样率和声道数对amr文件的影响,这些技术细节需要解释清楚。 另外注意到引用[1]提供的测试程序下载链接已失效,但命令本身是有效的,这点需要说明避免用户困惑。对于可能出现的安装问题,准备在相关问题里补充环境配置指南应该会更有帮助。 </think>好的,根据提供的参考信息和标准方法,使用 FFmpeg 将 WAV 格式音频换为 AMR 格式音频的核心命令和步骤如下: **核心命令:** ```bash ffmpeg -i 输入文件.wav -acodec libamr_nb -ar 8000 -ab 12.2k -ac 1 输出文件.amr ``` **参数详解:** 1. `-i 输入文件.wav`: 指定输入的 WAV 音频文件。 2. `-acodec libamr_nb`: 这是最关键的部分。它指定使用 `libamr_nb` 编解码器进行音频编码。`nb` 代表窄带 (Narrowband),这是 AMR 最常见的格式,适用于电话语音质量。**确保你的 FFmpeg 编译时支持了这个编解码器 (参考引用[3])。** 3. `-ar 8000`: 设置输出的采样率 (Audio Rate) 为 8000 Hz。这是 AMR-NB (窄带) 的标准采样率。 4. `-ab 12.2k`: 设置输出的音频比特率 (Audio Bitrate) 为 12.2 kbps。这是 AMR-NB 支持的最高质量档位(模式 7),音质最好但也文件最大。你可以根据需要在 AMR-NB 支持的比特率中选择(如 4.75k, 5.15k, 5.9k, 6.7k, 7.4k, 7.95k, 10.2k, 12.2k)。比特率越低,文件越小,音质越差。 5. `-ac 1`: 设置输出的声道数为 1 (单声道 Mono)。AMR-NB 是专为单声道语音设计的编解码器。 6. `输出文件.amr`: 指定输出的 AMR 文件名称。 **主要步骤:** 1. **确保 FFmpeg 支持 AMR 编码:** * 运行命令 `ffmpeg -codecs | grep amr` (Linux/macOS) 或 `ffmpeg -codecs | findstr amr` (Windows)。 * 在输出列表中查找 `libamr_nb`(或类似名称,如 `amr_nb`)编码器。它应该在 `E` (编码) 列下有一个 `E` 标志。例如: `DEA.L. amr_nb ... libopencore_amrnb (decoder: libopencore_amrnb)`。 * **如果找不到支持 `libamr_nb` 的编码器 (E标志),你需要重新编译 FFmpeg 并包含 `libopencore-amr` 库支持 (参考引用[3]),或者下载一个预编译好的、包含此支持的版本 (如引用[1]和[3]中提到的下载链接)。** 2. **执行换命令:** * 打开命令行终端 (Windows: CMD 或 PowerShell; macOS/Linux: Terminal)。 * 导航 (`cd`) 到你的音频文件所在目录,或者直接在命令中使用文件的完整路径。 * 输入上述核心命令,根据你的实际文件名和所需比特率进行调整: ```bash ffmpeg -i "我的音频.wav" -acodec libamr_nb -ar 8000 -ab 12.2k -ac 1 "换后的音频.amr" ``` * 按回车执行命令。FFmpeg 会显示处理进度信息。完成后,你将在当前目录下看到生成的 `.amr` 文件。 **重要说明:** * **环境依赖:** `libamr_nb` 编解码器依赖于 `libopencore-amr` 库。你需要确保 FFmpeg 在编译或运行时能找到这个库 (参考引用[3]关于安装/编译 opencore-amr 的部分)。 * **参数固定性:** AMR-NB 标准要求采样率 (`-ar`) 为 8000 Hz,声道数 (`-ac`) 为 1。这两个参数通常不能改变。 * **比特率选择 (`-ab`):** 12.2kbps 是最高质量。如果需要更小的文件,可以尝试较低的比特率(如 `-ab 7.4k` 或 `-ab 4.75k`),但音质会相应下降。AMR-NB 的主要优势在于在较低的比特率下仍能保持可接受的语音清晰度。参考[^1]已验证了 `-ab 12.2k`。 * **批量处理:** 你可以编写简单的 Shell 脚本 (Linux/macOS) 或批处理脚本 (Windows) 来批量换一个目录下的所有 WAV 文件。 * **报错处理:** 如果遇到类似 `InputFormatException` 或其他错误 (如引用[2]中提到的问题),首先要检查的就是 **FFmpeg 是否确实支持 `libamr_nb` 编码器**。其次是检查输入文件路径是否正确、权限是否足够。 **
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值