使用mpeg-2容器(FFMPEG)将mp3转换为AAC

时间:2014-02-12 22:19:25

标签: audio ffmpeg mp3 aac

我尝试使用FFMPEG将mp3音频文件转换为AAC文件,我需要将音频包装在MPEG-2容器中。 生成的AAC文件需要是AAC-LC(低复杂度),1通道,CBR模式,44100采样率和48kb / s比特率,因此我使用此命令:

ffmpeg -y -i input.mp3 -ar 44100 -ab 48k -acodec libfdk_aac -ac 1 output.aac

但是当我检查ADTS标头时,音频文件总是被包装在MPEG-4容器中。我已经尝试了这里列出的所有编解码器,但我仍然最终得到一个围绕音频的mpeg-4容器:http://trac.ffmpeg.org/wiki/AACEncodingGuide

以下是检查AAC输出文件时收到的标题:

mpeg_type:' MPEG4',   个人资料:2,   profile_name:' AAC LC',   sample_freq:44100,   channel_config:1,   频道:1,   frame_length:139,   buffer_fullness:157,   number_of_frames:1,   frames_per_sec:43.06640625

为什么ffmpeg围绕音频包装mp4容器的任何想法?我可以以某种方式解决这个问题吗?除了FFMPEG之外还有其他编码器吗?我给了FAAC编码器一个镜头,它给了我正确的编码和ADTS标题,但唉它不支持mp3,只有WAV。

3 个答案:

答案 0 :(得分:2)

你的术语有点混乱。首先,mp4与mpeg4不同。 mpeg4是一个包含术语,用于描述各种编解码器和容器。 mp4容器也称为mpeg4第14部分.aac容器格式只是带有ADTS头的原始aac帧的集合,在mpeg4第3部分中有描述。因此.aac是mpeg4格式但不是mp4文件。

http://en.wikipedia.org/wiki/MPEG-4

现在只要想要一个mpeg2容器,它是一个mpeg2传输流,程序流?

答案 1 :(得分:1)

获得ffmpeg& libfdk_aac将标志设置为mpeg2而不是mpeg4使用mpeg2配置文件:

14:22:12,224 ERROR [com.enk.ne.frontend.ws.NotificationEngineWsInputImpl] Error in processing CreateProvisiningBaseServiceImpl: org.springframework.orm.hibernate3.HibernateJdbcException: JDBC exception on Hibernate data access: SQLException for SQL [insert into NE_NOTIFICATION_INPUT (CREATION_DATE, FILE_NAME, INPUT_TYPE, INPUT_ID) values (?, ?, 'FE', ?)]; SQL state [99999]; error code [17003]; could not insert: [com.enk.ne.db.model.FeInput]; nested exception is org.hibernate.exception.GenericJDBCException: could not insert: [com.enk.ne.db.model.FeInput].

答案 2 :(得分:0)

我可以通过以下建议成功更改MPEG容器:

FFmpeg's AAC ("libfaac") Codec Options?

我需要进入FFmpeg的源代码,并在第115行将libfaac.c中的硬编码MPEG版本更改为MPEG2(与其他帖子中提到的内容相差不多)。然后我重新编译了FFmpeg,确保包含--enable-libfaac。