|ZYCIIS| 如何用SharpFFmpeg将我的音频PCMA的RAW转为AAC音频 谢谢

javamy031 2012-11-18 04:29:17
http://sourceforge.net/projects/sharpffmpeg/
上面是SharpFFmpeg的地址
我想问一下
C#如何时用SharpFFmpeg将我的音频PCMA的RAW转为AAC音频

谢谢
...全文
366 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
爱LOVE大葱 2014-06-18
  • 打赏
  • 举报
回复
请问你H.264编码做出来了吗,求回复
javamy031 2012-11-21
  • 打赏
  • 举报
回复
引用 7 楼 jshi123 的回复:
话说回来,如果你做的是webchat程序,没有必要用AAC编/解码。mp3,aac这些都是适合传输音乐的,如果是语音的话用Speex, Truespeech, G.722这些就够了(NAudio的例子中有使用方法)。 ps. 那个StreamCoder的试用版可以下载,没有问题。
你好,因为客户要求最后这些聊天都是生成MP4文件格式的,所以要求H264+AAC 现在我是一步步来实现 谢谢
jshi123 2012-11-20
  • 打赏
  • 举报
回复
话说回来,如果你做的是webchat程序,没有必要用AAC编/解码。mp3,aac这些都是适合传输音乐的,如果是语音的话用Speex, Truespeech, G.722这些就够了(NAudio的例子中有使用方法)。 ps. 那个StreamCoder的试用版可以下载,没有问题。
jshi123 2012-11-20
  • 打赏
  • 举报
回复
帮你把上面链接里的c++程序转成了c#,你可以试下:

	public class AACEncoder : IDisposable
	{
		public const int FF_PROFILE_AAC_MAIN = 0;
		public const int FF_PROFILE_AAC_LOW = 1;
		public const int FF_PROFILE_AAC_SSR = 2;
		public const int FF_PROFILE_AAC_LTP = 3;
		public const int SAMPLE_SIZE = 2;

		private int _frameBytes;
		private IntPtr _pInputBuffer;

		private IntPtr _pEncoderOutput;
		private  int _allocOutputSize;
		
		private IntPtr _pCodecContext;

		public AACEncoder(int sampleRate, int channels, int audioBitrate)
		{
			FFmpeg.avcodec_register_all();

			//Set up audio encoder
			var pCodec = FFmpeg.avcodec_find_encoder(FFmpeg.CodecID.CODEC_ID_AAC);
			if (pCodec == IntPtr.Zero)
				throw new Exception("avcodec_find_encoder: ERROR\n");

			_pCodecContext = FFmpeg.avcodec_alloc_context();
			var context = (FFmpeg.AVCodecContext)Marshal.PtrToStructure(_pCodecContext, typeof(FFmpeg.AVCodecContext));
			context.bit_rate = audioBitrate;
			context.sample_fmt = FFmpeg.SampleFormat.SAMPLE_FMT_S16;
			context.sample_rate = sampleRate;
			context.channels = channels;
			context.profile = FF_PROFILE_AAC_MAIN;
			context.codec_type = FFmpeg.CodecType.CODEC_TYPE_AUDIO;
			Marshal.StructureToPtr(context, _pCodecContext, false);
			
			if (FFmpeg.avcodec_open(_pCodecContext, pCodec) < 0)
				throw new Exception("avcodec_open: ERROR\n");

			_allocOutputSize = FFmpeg.FF_MIN_BUFFER_SIZE * 10;
			_pEncoderOutput = Marshal.AllocHGlobal(_allocOutputSize);

			if (_pEncoderOutput == IntPtr.Zero)
				throw new Exception(string.Format("encoderOutput: malloc Error size({0})", _allocOutputSize));

			context = (FFmpeg.AVCodecContext)Marshal.PtrToStructure(_pCodecContext, typeof(FFmpeg.AVCodecContext));
			_frameBytes = context.frame_size * context.channels * SAMPLE_SIZE;
			_pInputBuffer = Marshal.AllocHGlobal(_frameBytes);
		}
		
		public void Dispose()
		{
			Marshal.FreeHGlobal(_pInputBuffer);
			Marshal.FreeHGlobal(_pEncoderOutput);
		}

		public byte[] Encode(byte[] rawData, int rawDataSize)
		{
			int p = 0, encoderOutputSize = 0;

			// Note: revisit the while loop
			// BUG-1 这里有个bug,输入音频的帧长度必须是1024
			while (rawDataSize >= _frameBytes)
			{
				Marshal.Copy(rawData, p, _pInputBuffer, _frameBytes);
				int packetSize = FFmpeg.avcodec_encode_audio(_pCodecContext, _pEncoderOutput, _allocOutputSize,_pInputBuffer);
				encoderOutputSize += packetSize;
				p += _frameBytes;
				rawDataSize -= _frameBytes;
			}
			var result = new byte[encoderOutputSize];
			Marshal.Copy(_pEncoderOutput, result, 0, encoderOutputSize);
			return result;
		}
	}
javamy031 2012-11-19
  • 打赏
  • 举报
回复
http://www.streamcoders.com/products/msnet.html 这是一个C#的,但是下载不下来(注册没反应),而且好像是要钱的
javamy031 2012-11-19
  • 打赏
  • 举报
回复
http://www.codeproject.com/Articles/332123/AAC-Encode 这个是C++的 但我的是C#的,求解 谢谢
javamy031 2012-11-19
  • 打赏
  • 举报
回复
我搜索SharpFFmpeg里面的 FFmpeg 类中没有发现有音频编码返回byte[]的方法 要怎么实现呢? 难道C#就没有办法实现从PCM转到AAC吗?
raaaazer 2012-11-19
  • 打赏
  • 举报
回复
没接触过这个SharpFFmpeg,但是我建议你也参考下这个 音频编解码·实战篇(1)PCM转至AAC(AAC编码)http://blog.csdn.net/poechant/article/details/7435054
javamy031 2012-11-19
  • 打赏
  • 举报
回复
我现在录了麦克风的音频的Byte,根据网上说的是PCMA格式 然后我想转成AAC格式后RTP到服务器 现在PCMA格式的RTP到服务器,服务器也能接收到音频了 但现在要求是AAC格式, 我网上找的转只有FFMPEG,也是C的,没有学过C正在开始学 然后找了个SharpFFmpeg,不知道这个能不能把我的实时PCMA流,转为AAC流 谢谢
内容概要:本文系统介绍了基于LlamaFactory框架对大语言模型Qwen3-1.7B进行LoRA微调以实现商品十分类任务的完整流程,涵盖环境搭建、数据预处理、模型微调、性能评估与Badcase分析,以及使用vLLM进行推理加速部署的全过程。通过DeepSpeed技术实现训练加速,并结合实际分类效果进行准确率分析,将模型原始准确率从59.6%提升至91.3%,显著优化分类表现。同时针对低召回率类别(如冷藏即饮果汁)开展Badcase分析,定位训练数据不足问题并提出增量训练改进方案。最后通过vLLM部署实现推理性能大幅提升,批处理时间由54秒缩短至22秒。; 适合人群:具备一定深度学习与自然语言处理基础,熟悉Python编程和Linux环境,从事AI算法研发或模型优化工作的工程师及研究人员,尤其适合有大模型微调与部署需求的从业者; 使用场景及目标:①掌握基于LoRA的大模型高效微调方法;②学习如何利用DeepSpeed加速训练过程;③提升分类任务准确率与召回率的调优策略;④实现高性能推理部署与端到端模型优化闭环; 阅读建议:建议结合代码实践操作,重点关注数据构造、参数配置、Badcase分析与推理部署环节,深入理解微调机制与性能瓶颈优化思路,配合日志与评估指标迭代改进模型。

111,128

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧