为什么将WAV转换为MP3的长度不同
我使用NAudio和NAudio.Lame将wav文件转换为mp3文件,代码如下:
using var reader = new WaveFileReader(file);
using var ms = new MemoryStream();
var writer = new LameMP3FileWriter(ms, reader.WaveFormat, 32);
reader.CopyTo(writer);
writer.Flush();
File.WriteAllBytes(file.Replace("wav", "mp3"), ms.ToArray());
wav文件长度为1500ms,但mp3文件长度为1557ms。
我通过使用 ffmpeg.exe 执行同样的操作,命令如下:
ffmpeg -i c:\2\xxx.wav c:\2\xxx.mp3
输出信息:
ffmpeg version 5.0.1-essentials_build-www.gyan.dev Copyright (c) 2000-2022 the FFmpeg developers
built with gcc 11.2.0 (Rev7, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-lzma --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-sdl2 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-libass --enable-libfreetype --enable-libfribidi --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-libgme --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvo-amrwbenc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-librubberband
libavutil 57. 17.100 / 57. 17.100
libavcodec 59. 18.100 / 59. 18.100
libavformat 59. 16.100 / 59. 16.100
libavdevice 59. 4.100 / 59. 4.100
libavfilter 8. 24.100 / 8. 24.100
libswscale 6. 4.100 / 6. 4.100
libswresample 4. 3.100 / 4. 3.100
libpostproc 56. 3.100 / 56. 3.100
Guessed Channel Layout for Input Stream #0.0 : mono
Input #0, wav, from 'c:\2\xxx.wav':
Duration: 00:00:01.50, bitrate: 768 kb/s
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, mono, s16, 768 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (pcm_s16le (native) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
Output #0, mp3, to 'c:\2\xxx.mp3':
Metadata:
TSSE : Lavf59.16.100
Stream #0:0: Audio: mp3, 48000 Hz, mono, s16p
Metadata:
encoder : Lavc59.18.100 libmp3lame
size= 12kB time=00:00:01.51 bitrate= 66.2kbits/s speed= 137x
video:0kB audio:12kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.928711%
我得到一个长度为 1536ms 的 mp3 文件。 那么,为什么长度改变了呢? 感谢您的阅读。
I use NAudio and NAudio.Lame to convert a wav file to mp3 file,code like that:
using var reader = new WaveFileReader(file);
using var ms = new MemoryStream();
var writer = new LameMP3FileWriter(ms, reader.WaveFormat, 32);
reader.CopyTo(writer);
writer.Flush();
File.WriteAllBytes(file.Replace("wav", "mp3"), ms.ToArray());
the wav file length is 1500ms,but the mp3 file length is 1557ms.
And I do the same thing by using ffmpeg.exe,command like that:
ffmpeg -i c:\2\xxx.wav c:\2\xxx.mp3
the output info:
ffmpeg version 5.0.1-essentials_build-www.gyan.dev Copyright (c) 2000-2022 the FFmpeg developers
built with gcc 11.2.0 (Rev7, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-lzma --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-sdl2 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-libass --enable-libfreetype --enable-libfribidi --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-libgme --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvo-amrwbenc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-librubberband
libavutil 57. 17.100 / 57. 17.100
libavcodec 59. 18.100 / 59. 18.100
libavformat 59. 16.100 / 59. 16.100
libavdevice 59. 4.100 / 59. 4.100
libavfilter 8. 24.100 / 8. 24.100
libswscale 6. 4.100 / 6. 4.100
libswresample 4. 3.100 / 4. 3.100
libpostproc 56. 3.100 / 56. 3.100
Guessed Channel Layout for Input Stream #0.0 : mono
Input #0, wav, from 'c:\2\xxx.wav':
Duration: 00:00:01.50, bitrate: 768 kb/s
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, mono, s16, 768 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (pcm_s16le (native) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
Output #0, mp3, to 'c:\2\xxx.mp3':
Metadata:
TSSE : Lavf59.16.100
Stream #0:0: Audio: mp3, 48000 Hz, mono, s16p
Metadata:
encoder : Lavc59.18.100 libmp3lame
size= 12kB time=00:00:01.51 bitrate= 66.2kbits/s speed= 137x
video:0kB audio:12kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.928711%
And I get a mp3 file which length is 1536ms.
So,why the length changed?
Thanks for reading.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我认为 Mokubai的评论对您有用。
在这种情况下,我也试图进行一些测试。无法复制这个问题。
如果您需要更多帮助,可以在
我的测试代码
I think Mokubai's comment will useful to you.
And I also have tried to do some test in this case. Can't reproduce the issue.
If you want more help, you can leave message under Mark Heath's latest answer. He is an expert at NAudio.
My test code