我有一个未压缩的.wav文件,我将其变成一个96k的MP3文件:
ffmpeg.exe -i song.wav -vn -b:a 96000 -ac 2 -ar 48000 -acodec libmp3lame -y song.mp3
输入文件包含637386个样本。输出有639360个样本。 MP3中的额外样本在文件开头都是零。这种情况发生在我翻译的每个文件中,并且编解码器比libmp3lame更多。这是一个FFMPEG错误还是编解码器错误?为什么这些被添加?有没有办法阻止它们被添加?
编辑:简化示例和控制台输出:
ffmpeg.exe -i song.wav -y song.mp3
ffmpeg version N-55796-gb74213d Copyright (c) 2000-2013 the FFmpeg developers
built on Aug 26 2013 19:43:51 with gcc 4.7.3 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
libavutil 52. 42.100 / 52. 42.100
libavcodec 55. 29.100 / 55. 29.100
libavformat 55. 14.102 / 55. 14.102
libavdevice 55. 3.100 / 55. 3.100
libavfilter 3. 82.102 / 3. 82.102
libswscale 2. 5.100 / 2. 5.100
libswresample 0. 17.103 / 0. 17.103
libpostproc 52. 3.100 / 52. 3.100
Guessed Channel Layout for Input Stream #0.0 : stereo
Input #0, wav, from 'song.wav':
Duration: 00:00:13.28, bitrate: 1538 kb/s
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, stereo, s16, 1536 kb/s
Output #0, mp3, to 'song.mp3':
Metadata:
TSSE : Lavf55.14.102
Stream #0:0: Audio: mp3 (libmp3lame), 48000 Hz, stereo, s16p
Stream mapping:
Stream #0:0 -> #0:0 (pcm_s16le -> libmp3lame)
Press [q] to stop, [?] for help
size= 208kB time=00:00:13.29 bitrate= 128.4kbits/s
video:0kB audio:208kB subtitle:0 global headers:0kB muxing overhead 0.111205%
wav中的样本数:637386
mp3中的样本数:639984
答案 0 :(得分:5)
LAME在FFmpeg中添加的延迟量为
avctx->initial_padding = lame_get_encoder_delay(s->gfp) + 528 + 1;
来自LAME项目的FAQ:
2。为什么LAME会在每首歌的开头添加沉默?
文件开头的解码器延迟:
我测试的所有解码器引入了528个样本的延迟。那 在解码一个mp3文件后,输出将有528个样本 0附加在前面。这是因为标准 ISO使用的MDCT /滤波器组例程具有528个采样延迟。它 可以用0样本编写MDCT / filterbank例程 延迟(参见Takehiro的MDCT / filterbank例程的描述 LAME编码如下)但我不知道有人做过这个。 此外,由于MDCT帧的重叠性质, 第一颗颗粒的前半部分(1颗颗粒= 576个样品)没有 前一帧与之重叠,导致第一帧衰减 N个样本。 N的值取决于窗口类型。对于 “STOP_TYPE”和“SHORT_TYPE”,N = 96,而“START_TYPE”和 “NORMAL_TYPE”,N = 288。第一帧由LAME 3.56及以上制作 将永远是STOP_TYPE或SHORT_TYPE。
文件开头的编码器延迟:
基于ISO的编码器(BladeEnc,8hz-mp3等)使用MDCT /滤波器组 例程类似于解码中使用的例程,因而也介绍 他们自己的528样本延迟。 .wav文件编码&解码后会有一个 1056个样本延迟(1056个样本将附加到开头)。
根据常见问题解答的差异与输出中的差异不同,可能是因为我不知道的技术细微差别,但这不是错误。