`

如何通过ffmpeg将音频文件转换成Mp3 转

 
阅读更多
如何通过ffmpeg将音频文件转换成Mp3 转

博客分类: ffmpeg

http://bbs.189works.com/thread-44808-1-1.html

安装完成ffmpeg后,就可以使用ffmpeg进行音频文件格式转换。比如 ./ffmpeg -i /media/1.mp3 /media/1.wav, 通过该命令行可以将/media文件夹下1.mp3文件转换成WAV格式的。

    但是反过来 ./ffmpeg -i /media/1.WAV /media/1.MP3 却不能转换成Mp3格式,提示如下错误(找不到编码器):
    Stream mapping:
    Stream #0:0 -> #0:0 (wav -> ?)
    Encoder (codec none) not found for output stream #0:0
    如果强行指定编码器 ./ffmpeg -i /media/1.wav -acodec mp3 /media/1.mp3, 仍提示找不到编码器错误:
    Unknown encoder 'mp3'

    这是因为,ffmpeg虽然是个开源软件,但因为具体格式的版权原因,它并没有包含所有的编解码格式,或者有个格式只有对应的解码器,但没有编码器,比如Mp3就只有解码器,能播放Mp3文件,但却没有Mp3的编码器,无法将其它格式转换成Mp3。可以通过命令行 ./ffmpeg -codecs 查询编解码配置,第一个D表示Decoder,该格式能够解码;E表示Encoder,该格式可以编码。从中可以看出Mp3不能编码,Mp2倒是即可解码也可编码。如何解决这个问题呢?   
D A D  mp1             MP1 (MPEG audio layer 1)
D A D  mp1float        MP1 (MPEG audio layer 1)
DEA D  mp2             MP2 (MPEG audio layer 2)
D A D  mp2float        MP2 (MPEG audio layer 2)
D A D  mp3             MP3 (MPEG audio layer 3)
D A D  mp3adu          ADU (Application Data Unit) MP3 (MPEG audio layer 3)
D A D  mp3adufloat     ADU (Application Data Unit) MP3 (MPEG audio layer 3)

    我的第一个方法是自己写代码来完成。源码文件中,Allcodecs.c中对各个格式进行注册,先修改Mp3的注册行,改为同时注册解码器和编码器:
    REGISTER_ENCDEC  (MP2, mp2);
    REGISTER_DECODER (MP2FLOAT, mp2float);
    REGISTER_DECODER (MP3, mp3)  // 此行修改为 REGISTER_ENCDEC  (MP3, mp3)
    然后新增Mp3编码器的实现Struct,里面Init函数、encode函数、close函数使用Mp2的函数,因为我也不知道如何去实现Mp3的函数,或者说到代码实现级我也不知道Mp3和Mp2的区别在哪。
    AVCodec ff_mp3_encoder = {
    .name           = "mp3",
    .type           = AVMEDIA_TYPE_AUDIO,
    .id             = CODEC_ID_MP3,
    .priv_data_size = sizeof(MpegAudioContext),
    .init           = MPA_encode_init,
    .encode         = MPA_encode_frame,
    .close          = MPA_encode_close,
    .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
    .supported_samplerates= (const int[]){44100, 48000,  32000, 22050, 24000, 16000, 0},
    .long_name = NULL_IF_CONFIG_SMALL("MP3 (MPEG audio layer 3)"),
    .defaults       = mp3_defaults,
};
    重新编译上线。 用命令行./ffmpeg -i /media/1.WAV /media/1.MP3 试了一下,能成功生成1.mp3文件,文件也能播放。似乎没有问题了,单用 file /media/1.mp3 查看了一下,发现文件不是Mp3格式的,而是Mp2格式的:
    /media/1.mp3: MPEG ADTS, layer II, v1, 128 kbps, 44.1 kHz, Stereo
    很遗憾,自行修改代码的方式行不通,因为不是每个编解码格式协议的专家,自行修改代码失败的风险很大,不仅是Mp3,还有一些其他格式比如AMR OGG H.263是没有编码器的。所以,第二个方案,使用成熟的第三方编码器和ffmpeg结合。

    Mp3比较好的开源第三方库是libmp3lame(简称Lame)。我下了一个最新版本(3.99.4)的Lame源码,编译它:
    首先配置: ./configure --prefix=/shared --enable-shared --enable-static
    然后编译:  make
               make install
    生成文件: 动态链接库 /shared/lib/libmp3lame.so 和 静态链接库 /shared/lib/libmp3lame.a。这里只需要使用动态链接库,将.so文件拷贝到/lib中,这个文件夹是动态链接库的默认搜索路径,让ffmpeg运行时可以找到。
    然后对ffmpeg配置libmp3lame: ./configure --enable-libmp3lame
    重新编译ffmpeg,运行转化命令,看看效果如何。
    首先执行 ./ffmpeg -codecs 查看可用编解码的变化,可以看到多出了libmp3lame编码器,带E的:
    D V D  lagarith        Lagarith lossless
    EA    libmp3lame      libmp3lame MP3 (MPEG audio layer 3)
    EV    ljpeg           Lossless JPEG
    D V D  loco            LOCO
    然后执行 ./ffmpeg -i /media/1.WAV /media/1.MP3, 生成1.mp3,用File命令查看,确实是Mp3文件。
    /media/1.mp3: Audio file with ID3 version 2.4.0, contains: MPEG ADTS, layer III, v1, 128 kbps, 44.1 kHz, Stereo
    大功告成,问题解决。
    也可在命令行中指定编解码生成Mp3文件:./ffmpeg -i /media/1.WAV -acodec libmp3lame /media/1.MP3.
分享到:
评论

相关推荐

    利用ffmpeg,将音频格式转换为mp3的工具,绿色免费

    描述中提到了"通过delphi2010编写的给小白使用的把任意音频文件转换成mp3格式的文件",这表明开发人员使用了Delphi,一个基于Object Pascal的集成开发环境,来创建了一个用户友好的界面,使得不熟悉命令行操作的用户...

    C#使用ffmpeg将wav转mp3

    本篇文章将详细探讨如何在C#环境下利用开源工具ffmpeg.exe将.wav格式的音频文件转换为.mp3格式。 首先,我们需要了解ffmpeg。ffmpeg是一个强大的跨平台命令行工具,用于处理各种音视频文件,包括转换、分割、合并、...

    音频格式转换的ffmpeg

    要将 AMR 文件转换为 MP3,我们需要利用 FFmpeg 的功能。 在 Windows 上,你可以通过以下步骤安装 FFmpeg: 1. 下载最新版本的 FFmpeg 安装包。 2. 完成安装后,确保将其添加到系统环境变量,以便在命令行中使用。 ...

    ffmpeg音频转文本

    ffmpeg

    ffmpeg MP3 转换 pcm

    在这个项目中,我们学习了如何在VS2013下编译FFmpeg,并使用它将MP3文件转换为PCM格式,这有助于我们在音频处理领域进行更深入的探索和开发。通过参考雷神的博客和源码,你可以获得更丰富的知识和实践经验。

    利用ffmpeg音频g711转pcm

    假设你有一个名为`input.g711`的G.711音频文件,转换为PCM的命令如下: ```bash ffmpeg -i input.g711 -f s16le -ar 8000 -ac 1 output.pcm ``` 这里,`-i`参数指定了输入文件,`-f`参数指定输出格式为s16le,代表...

    通过ffmpeg将AAC格式转成WAV格式

    在这个场景中,我们的目标是使用FFmpeg库将AAC(Advanced Audio Coding)格式的音频文件转换为WAV(Waveform Audio File Format)格式。这是一个常见的需求,因为WAV是一种通用且无损的音频格式,适用于各种音频处理...

    ffmpeg 提取MP4视频中的音频mp3

    在本场景中,我们将重点讨论如何使用FFmpeg从MP4视频中提取音频并将其转换为MP3格式。这对于音频处理、视频编辑或二次开发项目非常有用,比如C#应用或其他编程语言的应用。 首先,我们需要了解FFmpeg的基本结构和...

    FFMPEG_音频编码PCM_MP3_本地文件

    要将PCM文件转换为MP3,你可以使用以下基本命令格式: ``` ffmpeg -i input.pcm -vn -ar 44100 -ac 2 -ab 192k output.mp3 ``` 这里: - `-i input.pcm` 指定了输入的PCM文件。 - `-vn` 表示不处理视频流,...

    音频转换器,此实例是将wav转换成mp3(ffmpeg.rar

    本实例重点讨论如何使用FFmpeg工具将.wav格式的音频文件转换为.mp3格式。FFmpeg是一款强大的开源跨平台命令行工具,用于处理音频、视频以及进行格式转换。 首先,让我们了解.wav和.mp3这两种音频格式的基本知识。....

    使用ffmpeg 将avi 文件转换为MP4 不进行编解码工作,只做封装格式转换

    因为原来的demo在转换avi到MP4时只能转换不包含音频流的avi文件,在转换包含音频流的avi文件时会报错。所以这里我在做封装格式转换时过滤掉了avi文件中的音频流,只转换视频流。这样操作在转换包含音频流的avi文件时...

    基于ffmpeg的音频处理Java SDK

    批量剪切mp3音频资源是一项常见的需求,例如,可能需要将一个长篇的音频文件分割成多个小片段。Java SDK提供了这样的功能,允许开发者指定起始和结束时间,快速地对mp3文件进行裁剪。这在处理大量音频内容时尤其有用...

    Node.js-微信amr音频转mp3模块

    在Node.js环境中,可以利用此模块轻松地将AMR音频文件转换为MP3,以便在各种系统和设备上流畅播放。这个过程通常包括以下几个关键步骤: 1. **AMR音频解析**:首先,模块需要能够识别和解析AMR格式的音频文件。AMR...

    java任意音频格式转码

    6. **性能优化**:在处理大量音频文件或大文件时,可以考虑使用多线程来并发处理多个转换任务,提高效率。 7. **错误处理**:在实际开发中,必须对可能出现的各种异常进行处理,例如文件不存在、权限问题、ffmpeg...

    利用FFmpeg将mkv视频转换为H.264

    综上所述,利用FFmpeg将MKV视频转换为H.264编码的MP4文件,既可以通过命令行操作,也可以通过编程接口实现。这种转换有助于提高视频的播放兼容性,并且可以通过调整编码参数来平衡视频质量和文件大小。

    FFMPEG_音频编码WAV_MP3_本地文件

    在FFmpeg中,我们可以使用以下命令将WAV文件转换为MP3: ```bash ffmpeg -i input.wav -c:a libmp3lame -q:a 2 output.mp3 ``` 在这个命令中: - `-i` 参数指定输入文件,这里是`input.wav`。 - `-c:a libmp3lame`...

    用java程序调用ffmpeg执行视频文件格式转换flv

    如果文件类型是FFmpeg可以直接处理的,它会直接调用`processFLV()`方法将文件转换为FLV。如果文件格式需要预先转换,程序会先调用`processAVI()`,该方法使用Mencoder将文件转换为AVI,然后再次调用`processFLV()`将...

    (带一键安装脚本sh)Linux编译ffmpeg并转换MP3到AMR.zip

    至于FFmpeg的音频转换功能,它支持多种音频格式的转换,例如将MP3文件转换为AMR。MP3是一种广泛使用的音频格式,而AMR则常用于移动设备,尤其是早期的智能手机中,因为它的压缩效率高,适合有限的存储和带宽条件。 ...

    基于ffmpeg将avi视频转换为mp4视频

    这将把当前目录下的所有AVI文件转换为MP4,并保留原文件名。 6. **源码软件和音视频综合资源** 由于FFmpeg是开源的,开发者可以查看和修改其源代码,以满足特定需求或开发新的功能。同时,音视频综合资源通常包括...

    java任意音频文件格式转mp3

    Java音频视频编码器,本文实例将任何音频格式转换为MP3格式 您还可以调整视频大小,更改其大小和比例等 本文实例实用于任何Windows,MacOS,Linux系统 附:完整jar项目,完善的demo,详细的注释,简单易操作

Global site tag (gtag.js) - Google Analytics