DirectShow 生产音频 视频如何压缩

hzy694358 2013-03-28 10:14:49
DirectShow生产的avi音频文件很大,一分钟将近10M
但是找了下好像也没看到有现成的压缩filter
只有视频有看到IAMVideoCompression

网上资料说的视频压缩VCM 音频ACM有是指的什么 都要自己实现filter?

还有,为何我生产avi文件可以生产asf就不可以呢?

hr = m_pCaptureGB->SetOutputFileName(&MEDIASUBTYPE_Avi, L"C:\\shrhr.wav", &pWriter, NULL);

/* 对pWriter(AviWriter)进行设置 */
IConfigAviMux *pConfig = 0;
hr = pWriter->QueryInterface(IID_IConfigAviMux, (void**)&pConfig);
if(SUCCEEDED(hr))
{
pConfig->Release();
}

hr = m_pCaptureGB->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Audio, mAudioFilter->mFilter, NULL, pWriter);


hr = m_pCaptureGB->SetOutputFileName(&MEDIASUBTYPE_Asf, L"C:\\shrhr.asf", &pWriter, NULL);

/* 对pWriter(AsfWriter)进行设置 */
IConfigAsfWriter *pConfig = 0;
hr = pWriter->QueryInterface(IID_IConfigAsfWriter, (void**)&pConfig);
if(SUCCEEDED(hr))
{
pConfig->Release();
}

hr = m_pCaptureGB->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Audio, mAudioFilter->mFilter, NULL, pWriter);
...全文
185 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
hzy694358 2013-03-29
  • 打赏
  • 举报
回复
引用 11 楼 dream238 的回复:
引用 10 楼 hzy694358 的回复:引用 9 楼 dream238 的回复:USB Microphone -> ASF Writer 就行了,ASF Writer的属性页可以选择一个Profile。 我说要压缩啊,怎么加压缩filter,我都不懂你说的是什么意思, 能说明白点? 系统的WM ASF Writer自己本身就是集Encoder + Mux为一……
那如果我不想写文件的话,只想网络传输,怎么加Audio Compressors
ArcRain 2013-03-29
  • 打赏
  • 举报
回复
引用 10 楼 hzy694358 的回复:
引用 9 楼 dream238 的回复:USB Microphone -> ASF Writer 就行了,ASF Writer的属性页可以选择一个Profile。 我说要压缩啊,怎么加压缩filter,我都不懂你说的是什么意思, 能说明白点?
系统的WM ASF Writer自己本身就是集Encoder + Mux为一体的,可以转为WMV/WMA/ASF
hzy694358 2013-03-29
  • 打赏
  • 举报
回复
引用 9 楼 dream238 的回复:
USB Microphone -> ASF Writer 就行了,ASF Writer的属性页可以选择一个Profile。
我说要压缩啊,怎么加压缩filter,我都不懂你说的是什么意思, 能说明白点?
ArcRain 2013-03-29
  • 打赏
  • 举报
回复
引用 8 楼 hzy694358 的回复:
我在Graph Edit上测试结果: USB Microphone -> AVI MUX -> 1.avi 成功 因为单独生成的avi文件太大,我想加压缩就加了个Audio Compressor:Windows Media Audio V1 USB Microphone -> Windows Media Audio V1 -> AVI MUX -> 1.avi ……
USB Microphone -> ASF Writer 就行了,ASF Writer的属性页可以选择一个Profile。
hzy694358 2013-03-29
  • 打赏
  • 举报
回复
我在Graph Edit上测试结果: USB Microphone -> AVI MUX -> 1.avi 成功 因为单独生成的avi文件太大,我想加压缩就加了个Audio Compressor:Windows Media Audio V1 USB Microphone -> Windows Media Audio V1 -> AVI MUX -> 1.avi 失败,提示: 参数不正确,返回代码:0x80070057 这是什么问题,我就想加个压缩的filter 咋都没找到资料呢
hzy694358 2013-03-29
  • 打赏
  • 举报
回复
Windows Media Audio V1 -》 Windows Media Audio V2 算法就可以了 好像那些音频算法并不是所有的都能用。或者可能还需要其他的处理吧
ArcRain 2013-03-28
  • 打赏
  • 举报
回复
引用 4 楼 hzy694358 的回复:
http://www.cnblogs.com/matter/archive/2008/07/22/1248511.html 这里面用的是MEDIASUBTYPE_Asf 然后将文件改成了wmv后缀 ,这样就是wmv格式了?不是Asf? 那我直接用MEDIASUBTYPE_Avi 然后将文件也改成了wmv后缀 是不是也可以呢?
MEDIASUBTYPE_ASF这种容器其实是可以用来封装WMV的,所以就写成MEDIASUBTYPE_ASF了。 MEDIASUBTYPE主要是用来区别FILTER提供的PIN所支持的的媒体类型,不同的流类型定义不同,支持的话就能连上PIN,不支持就连不上。
hzy694358 2013-03-28
  • 打赏
  • 举报
回复
http://www.cnblogs.com/matter/archive/2008/07/22/1248511.html 这里面用的是MEDIASUBTYPE_Asf 然后将文件改成了wmv后缀 ,这样就是wmv格式了?不是Asf? 那我直接用MEDIASUBTYPE_Avi 然后将文件也改成了wmv后缀 是不是也可以呢?
ArcRain 2013-03-28
  • 打赏
  • 举报
回复
你可以看下这里的介绍:http://msdn.microsoft.com/zh-cn/library/windows/desktop/dd757032%28v=vs.85%29.aspx 主要是用到WM ASF Writer filter,需要从这个FILTER上拿到些接口进行设置。 其他可以参考的: 将视频流保存成wmv格式的文件-http://www.cnblogs.com/matter/archive/2008/07/22/1248511.html
hzy694358 2013-03-28
  • 打赏
  • 举报
回复
引用 1 楼 dream238 的回复:
如果不限制格式,考虑用WMV格式吧,只要有装了WMP,基本上就能转出来,体积相对也会小不少。
换成WMV MEDIASUBTYPE_Avi IConfigAviMux IID_IConfigAviMux 这些要分别改成什么? 定义中没看到有MEDIASUBTYPE_Wmv的类型 还有压缩的又该如何处理呢?
ArcRain 2013-03-28
  • 打赏
  • 举报
回复
如果不限制格式,考虑用WMV格式吧,只要有装了WMP,基本上就能转出来,体积相对也会小不少。
hzy694358 2013-03-28
  • 打赏
  • 举报
回复
引用 6 楼 SoftSoftSoft2008 的回复:
其实可以自己捕获视频数据,再编码成h264,再写成媒体文件 mp4
我用枚举CLSID_AudioCompressorCategory设备,查找到Microsoft G.723.1 然后将这个filter调用如下的代码进行压缩,但是不能用,生成的avi是空的 这个代码要怎么写呢?

IBaseFilter *pG723 = NULL;
((CAudioCaptureFilter *)mAudioFilter)->CreateCompressFilter(&pG723);
if (pG723)
{
	if (SUCCEEDED(mGraph->AddFilter(pG723, _T("G723.1"))))
	{
		hr = m_pCaptureGB->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Audio, mAudioFilter->mFilter, pG723, pWriter); 
	}
}
SoftSoftSoft2008 2013-03-28
  • 打赏
  • 举报
回复
其实可以自己捕获视频数据,再编码成h264,再写成媒体文件 mp4

2,542

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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