我尝试使用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。
答案 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。