如何通过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
C#程序中通过调用外部程序ffmpeg.exe代码中实现wav格式音频转为mp3音频格式。
FFMPEG 音频转PCM文件
通过ffmpeg提供的API完成AAC文件的解码。 编译环境 VS2008 开发语言 C
Java音频视频编码器,本文实例将任何音频格式转换为MP3格式 您还可以调整视频大小,更改其大小和比例等 本文实例实用于任何Windows,MacOS,Linux系统 附:完整jar项目,完善的demo,详细的注释,简单易操作
用以视音频文件的转码,方便播放多格式视音频文件
因为原来的demo在转换avi到MP4时只能转换不包含音频流的avi文件,在转换包含音频流的avi文件时会报错。所以这里我在做封装格式转换时过滤掉了avi文件中的音频流,只转换视频流。这样操作在转换包含音频流的avi文件时...
利用开源免费的工具ffmpeg,通过delphi2010编写的给小白使用的把任意音频文件转换成mp3格式的文件。欢迎学习交流,如需源码请mail联系。方便乞丐版的车能够播放音乐
如果你想将MP4文件中的音频提取为MP3格式,可以使用FFmpeg工具。以下是使用命令行的示例: ``` ffmpeg -i input.mp4 -vn -acodec libmp3lame -q:a 2 output.mp3 ``` 请确保你已经安装了FFmpeg,并将`input.mp4`...
c++使用ffmpeg把h264/h265和mp3写入mp4文件,内含ffmpeg库、示例demo、视频素材。
通过ffmpeg工具测试aac和mp3音频格式的效果,附件中包含了9个文件,分别是从同一个mp4文件中抽取出来的不同码率下的MP3和aac格式的音频文件,可以下载下来查看转换的效果。
利用ffmpeg视频转换处理,可转换flv,视频转换gif,里面有windows文件,ffmpeg.exe等。
ffmpeg文件生成m3u8文件及ts切片程序_1,实现输入本地文件切片成ts文件,m3u8,demo级别
软件介绍: 浪潮数字媒体音频转换工具V1.35使用说明... 1,音频文件MP3、S48、WAV之间相互转换; 2,音频文件MP3、S48、WAV输出WMA音频文件; 3,VCD音频转换成MP3、S48、WAV、WMA文件; 4,目前Wave文件输出只支持16位;
整合QT与Ffmpeg,实现ffmpeg抽取音频、视频、格式转换等内容。本例是QT源码文件,需要自己下载ffmpeg,Ffmpeg_demo1.pro中配置自己的ffmpeg目录
视音频分离器讲解的是将ts本地文件转换为 h264 + aac的过程 视音频复用器讲解的是将h264+aac封装为mp4 文件的过程 相关博客 https://blog.csdn.net/github_35041937/article/details/81481292 已经检验过quicktime ...
使用python和ffmpeg制作的音频格式转换工具,可以将常用音频转为MP3、aac、wav、flac四种格式(目前版本),程序包含UI界面,使用pyqt5制作,并且使用qss渲染配色。其中关于ffmpeg的使用,涉及音频信息读取与音频...
ffmpeg解码音频并保存PCM的简单demo,很有用! PCM是音频解码后的文件。或者说经过音频经过采样后形成的二进制文件。...保存PCM文件时使用的是采用有符号16位保存,而源音频不一定是,所以需要转换。
解决 第三方语音识别(百度语音,阿里,科大讯飞等厂商)不支持 微信录音文件 格式
基于ffmpeg的音频处理Java SDK (1)支持批量剪切mp3的音频资源 (2)支持截取wav、mp3音频段 (3)支持格式转换:转wav、mp3 (4)支持获取音频文件信息