gpt4 book ai didi

asp.net-core - 为什么将wav转换为mp3会得到不同的长度

转载 作者:行者123 更新时间:2023-12-04 23:09:57 26 4
gpt4 key购买 nike

我使用 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%
我得到一个长度为 1536 毫秒的 mp3 文件。
那么,为什么长度改变了?
谢谢阅读。

最佳答案

我认为 Mokubai's comment会对你有用。
在这种情况下,我也尝试过做一些测试。无法重现问题。
如需更多帮助,可以在Mark Heath下留言的最新回答。他是 NAudio 的专家。

我的测试代码

using System;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using Azure.Storage.Blobs;
using IdentityModel.Client;
using NAudio.Lame;
using NAudio.Wave;
using Newtonsoft.Json.Linq;

namespace ClientCredentialsConsoleApp
{
public class Program
{
public static async Task Main(string[] args)
{
var tempAudioUrl = "https://****/file_example_WAV_10MG.wav";
var audioFile = await AudioConverter.ConvertToMp3Async_YourCode(new Uri(string.Format(tempAudioUrl)));
File.WriteAllBytes("wav" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".mp3", audioFile);

}

}
public static class AudioConverter
{
public static async Task<byte[]> ConvertToMp3Async(Uri uri)
{
using (var client = new WebClient())
{
var file = await client.DownloadDataTaskAsync(uri);
var target = new WaveFormat(8000, 16, 1);
using (var outPutStream = new MemoryStream())
using (var waveStream = new WaveFileReader(new MemoryStream(file)))
using (var conversionStream = new WaveFormatConversionStream(target, waveStream))
using (var writer = new LameMP3FileWriter(outPutStream, conversionStream.WaveFormat, 32, null))
{
conversionStream.CopyTo(writer);

return outPutStream.ToArray();
}

}
}
public static async Task<byte[]> ConvertToMp3Async_YourCode(Uri uri)
{
using (var client = new WebClient())
{

var file = await client.DownloadDataTaskAsync(uri);
using var reader = new WaveFileReader(new MemoryStream(file));
Console.WriteLine("wav time is :"+reader.TotalTime);
var ms = new MemoryStream();
//var writer = new LameMP3FileWriter(ms, reader.WaveFormat, 32)
using (var writer = new LameMP3FileWriter(ms, reader.WaveFormat, 32))
{
reader.CopyTo(writer);

return ms.ToArray();
}
//reader.CopyTo(writer);
//writer.Flush();
//File.WriteAllBytes("wav"+DateTime.Now.ToString("yyyyMMddHH:mm:ss")+ ".mp3", ms.ToArray());

}
}
}
}

关于asp.net-core - 为什么将wav转换为mp3会得到不同的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71856492/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com