导航:首页 > 文件处理 > directshow视频压缩

directshow视频压缩

发布时间:2022-08-16 02:43:13

❶ 求一款大家常用的视频压缩软件

压缩宝典——TMPGEnc与Canopus ProCoder
推荐使用TMPGEnc或Canopus ProCoder,其实会声会影也可以进行视频的压缩,但是它的压缩的最大缺点是画面中的色块特别多,而且压缩时的可调节参数较少,所以我们还是选用专业的软件来压缩吧。
TMPGEnc是日本人开发的一套MPEG编码工具软件,支持VCD、SVCD、DVD等多种格式,所以许多网友习惯称它为“小日本”。它能将各种常见影片文件进行压缩、转换成符合VCD、SVCD、DVD等的视频格式,这个软件非常的小巧和高效.
Canopus ProCoder 是目前的压缩软件中画质、画面细节处理方面相当好的一个,它的设计基于Canopus专利DV和MPEG-2 codecs技术,支持输出到MPEG-1、 MPEG-2、 Windows媒体、RealVideo、Apple QuickTime、Microsoft DirectShow、Microsoft Video for Windows、Microsoft DV、Microsoft DV和Canopus DV视频格式。
这两个软件可以说是当前视频压缩软件一族中比较优秀的代表人物.

❷ 有什么软件可以把视频资料压缩但不影响播放质量的

只要是把播放码率降低,播放质量就必然下降,因为原有的信息被压缩掉了,细节就没有了,只能找折中方案,在给定码率条件下做到效果最好,这个跟编码方式有关,比如,·264编码就是蓝光盘的编码方式,采用动态码率,在画面黑暗的场景和画面内容基本静止时可以采用低码率,而在动作场面,加大码率,同时保证整个影片的平均码率,越好的编码方式就越是耗费cpu时间,下面的软件是公认的高画质编码软件
TMPGEnc是日本人堀浩行开发的一套老牌的高画质视频编码转换工具软件,在 Canopus ProCoder v2.0 Final 推出以前,一直是视频转换领域的画质冠军,支持 VCD、SVCD、DVD 以及所有主流媒体格式 (Windows Media、Real Video、Apple QuickTime、Microsoft DirectShow、Microsoft Video for Windows、Microsoft DV、Canopus DV、Canopus MPEG-1 和 MPEG-2 编码),而且还提供对高清晰度视频格式的支持。

❸ 如何将directshow捕获到的视频数据打包成rtp包

捕获到的数据是裸数据,需要压缩。你可以找一个压缩算法例如x264,压缩成H264文件。然后编写RTP 12字节的头,将H264数据定界符后面的数据放进去就可以了。如果一帧数据大需就需要再分片。

❹ 用directshow写的视频压缩程序为什么在工控机上不能压缩,工控机是xp系统的,在普通的xp电脑上却能运行

工控机只是一个加固的PC 机而已,压缩问题属于软体问题,并不是什么问题都跟硬件挂钩,这个思想是错误的,机子出问题了只要能开机,正常进系统,基本上跟硬件关系不大,先软后硬逐个来 ,多了解问题,这个过程就是学习!经验就是这样来的!100分好多啊,真舍得!

❺ 怎样压缩视频

Batch Real Procer 1.5.3.1 简体中文版
软件大小:4365KB 软件类别:国产软件/视频工具
下载次数:188427 软件授权:免费版
软件语言:简体中文 运行环境:Win9x/Me/NT/2000/XP/2003
软件评级: 更新时间:2004-4-10 10:57:14
开 发 商:Home Page 联 系 人:未知
软件详细信息

一个批量RM文件生成器。采用全新的RealVideo9内核。与目前其他的Real9格式压缩器不同的是,BRP是调用Real9的内核来进行压缩,而不是调用Helix Procer Plus 9的命令行来实现压缩的。可以支持众多的文件格式。比如:avi、mpg、vob、dat(VideoCD file)等等,只要是采用微软公司的DirectShow接口就可以播放的媒体文件,基本都可以导入。
具体的功能有:
可以设定压缩列表,软件按照列表自动顺序压缩。
可以选择压缩完成后自动关机,便于长时间无人运行。
带看门狗功能:如果因为源文件有错导致压缩引擎死锁,180秒后系统自动终止当前文件的压缩(终止过程约需20~40秒),开始压缩列表中的下一个文件。
内部采用经验参数进行设定,用户可以在不设定任何参数的情况下压缩出高质量的RealMedia文件。
下载地址:
http://flashget.newhua.com/down/brp1531_chs.exe

❻ 怎样用DirectShow来压缩一个AVI文件

这里我们讲解怎样用DirectShow来压缩一个AVI文件。我们重点放到视频压缩,同样的方法可以应用到音频压缩。
我们分以下几步来讲解:
1、 选择一个压缩过滤器
有许多种方法可以压缩视频或者音频,比如:
a、 本地DirectShow过滤器
b、 视频压缩管理编码器(VCM)
c、 音频压缩管理编码器(ACM)
d、 DirectX媒体对象(DMOs)
在DirectShow中,VCM被AVI Compressor过滤器封装了。同样的,ACM编码器也被ACM Wrapper过滤器封装了。DMOs被DMO Wrapper过滤器封装。系统设备枚举器提供了一个统一的方法来枚举和创建这些压缩器,我们不用考虑底层的操作。
枚举设备方法请参照前面的讲述。这里我们只给出代码:
void OnInitDialog(HWND hDlg)
{
HRESULT hr;
ICreateDevEnum *pSysDevEnum = NULL;
IEnumMoniker *pEnum = NULL;
IMoniker *pMoniker = NULL;

hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL,
CLSCTX_INPROC_SERVER, IID_ICreateDevEnum,
(void**)&pSysDevEnum);
hr = pSysDevEnum->CreateClassEnumerator(
CLSID_VideoCompressorCategory, &pEnum, 0);

while (S_OK == pEnum->Next(1, &pMoniker, NULL))
{
IPropertyBag *pPropBag = NULL;
pMoniker->BindToStorage(0, 0, IID_IPropertyBag,
(void **)&pPropBag);
VARIANT var;
VariantInit(&var);
hr = pPropBag->Read(L"FriendlyName", &var, 0);
if (SUCCEEDED(hr))
{
LRESULT iSel = AddString(GetDlgItem(hDlg,
IDC_CODEC_LIST), var.bstrVal);
}
VariantClear(&var);
pPropBag->Release();
pMoniker->Release();
}

SendDlgItemMessage(hDlg, IDC_CODEC_LIST,
LB_SETCURSEL, 0, 0);
pSysDevEnum->Release();
pEnum->Release();
}
创建一个过滤器的实例,调用IMoniker::BindToObject方法。方法会返回一个IBaseFilter接口指针。就象下面那样:
IBaseFilter *pFilter = NULL;
hr = pMoniker->BindToObject(NULL, NULL, IID_IBaseFilter,
(void**)&pFilter);
if (SUCCEEDED(hr))
{
// 可以使用过滤器了
// 记着释放IBaseFilter接口指针
}
2、 设置视频压缩属性
视频压缩过滤器可以在它的输出引脚支持IAMVideoCompression接口。使用这个接口可以设置压缩的属性,比如桢率,压缩质量等待。
首先,调用IBaseFilter::EnumPins方法找到过滤器的输出引脚,然后为接口查询引脚。一些过滤器不是所有的接口都支持,也有的不支持某个压缩属性。为了决定支持的属性能力,我们调用IAMVideoCompression::GetInfo来确定。这个方法返回一些信息:
a、 一个设置性能的标识
b、 一个描述字符串和版本字符串
c、 默认的桢速率,质量等参数
它按照下面的语法调用:
hr = pCompress->GetInfo(pszVersion, &cbVersion, pszDesc, &cbDesc,
&lKeyFrame, &lPFrame, &dblQuality, &lCap);

pszVersion和pszDesc参数是接收版本和描述字符串的宽字符缓冲区。cbVersion和cbDesc参数接收被请求的缓冲区大小。IkeyFrame,lPFrame和dblQuality参数获得默认的桢速率,p桢率和质量。质量是用从0.0到1.0的浮点数来表示的。Icap参数获得一个被或的能力标识,这个被定义为CompressionCaps枚举类型。
这些参数的任何一个都可以设置为NULL,。例如如果为了获得版本和描述字符串,第一次调用方法的时候,第一个和第三个参数为NULL。使用返回值cbVersion和cbDesc来分配缓冲区,然后再次调用该方法:
int cbVersion, cbDesc; // Size in bytes, not characters!
hr = pCompress->GetInfo(0, &cbVersion, 0, &cbDesc, 0, 0, 0, 0);
if (SUCCEEDED(hr))
{
WCHAR *pszVersion = new WCHAR[cbVersion/2];
WCHAR *pszDesc = new WCHAR[cbDesc/2];
hr = pCompress->GetInfo(pszVersion, 0, pszDesc, 0, 0, 0, 0, 0);
}
iCap参数提供了对IAMVideoCompression方法的过滤器的支持能力。例如,如果iCap包含了CompressionCaps_CanKeyFrame标志,你就可以调用IAMVideoCompression::get_KeyFrameRate方法来得到关键桢的速率,调用IAMVideoCompression::put_KeyFrameRate来设置桢速率。如果iCap的值没有包含这些参数,那么就只能使用默认的值了。
if (lCap & CompressionCaps_CanKeyFrame)
{
hr = pCompress->get_KeyFrameRate(&lKeyFrame);
if (FAILED(hr) || lKeyFrame < 0)
{
lKeyFrame = lDefaultKeyFrame; // 来自 GetInfo.
}
}

下面的代码试着在输出引脚寻找IAMVideoCompression接口。如果成功,它将会返回默认的和实际的压缩属性值。
HRESULT hr = E_FAIL;
IEnumPins *pEnum = NULL;
IPin *pPin = NULL;
IAMVideoCompression *pCompress = NULL;

// 寻找支持 IAMVideoCompression的引脚
pFilter->EnumPins(&pEnum);
while (S_OK == pEnum->Next(1, &pPin, NULL))
{
hr = pPin->QueryInterface(IID_IAMVideoCompression, (void**)&pCompress);
pPin->Release();
if (SUCCEEDED(hr)) // Found the interface.
{
break;
}
}
if (SUCCEEDED(hr))
{
long lCap; // 性能标识
long lKeyFrame, lPFrame; // 真实值
double m_Quality;
long lKeyFrameDef, lPFrameDef; //默认值
double QualityDef;

//得到默认值和它的性能
hr = pCompress->GetInfo(0, 0, 0, 0, &KeyFrameDef, &lPFrameDef,
&QualityDef, &lCap);
if (SUCCEEDED(hr))
{
// 得到实际的值.
if (lCap & CompressionCaps_CanKeyFrame)
{
hr = pCompress->get_KeyFrameRate(&lKeyFrame);
if (FAILED(hr) || lKeyFrame < 0)
lKeyFrame = lKeyFrameDef;
}
if (lCap & CompressionCaps_CanBFrame)
{
hr = pCompress->get_PFramesPerKeyFrame(&lPFrame);
if (FAILED(hr) || lPFrame < 0)
lPFrame = lPFrameDef;
}
if (lCap & CompressionCaps_CanQuality)
{
hr = pCompress->get_Quality(&Quality);
if (FAILED(hr) || Quality < 0)
Quality = QualityDef;
}
}
}

注意:如果你使用IcaptureGraphBuilder2接口来创建你的过滤图形,你可以调用IcaptureGraphBuilder2::FindInterface方法来获得IAMVideoCompression接口。
3、 建立压缩图形
下图是一个典型的AVI文件的过滤图形:

AVI_Splitter过滤器从文件的源过滤器(File Source(Async))拉数据,然后分解到视频和音频流。视频解压缩过滤器解码被压缩的视频,然后重新被视频压缩器重新压缩。
被压缩的视频进入到AVI Mux过滤器。音频流在这个例子中没有被压缩,因此它直接从AVI Splitter传输到AVI Mux。AVI Mux进行隔行扫描,然后使用File Write过滤器将数据输出到磁盘上。注意,就算原始文件里面没有音频流,AVI Mux过滤器也是必须的。最简单的方法创建这种过滤图形就是使用Capture Graph Builder,这是DirectShow里面为了建立捕获图形或者别的定制的过滤图形的一个部件。
注意:DirectShow里面包含了两个Capture Graph Builder版本。它们提供了不同的接口和类的标识。早期的版本类标识是CLSID_CaptureGraphBuild,接口是IcaptureGraphBuilder。它兼容存在的应用程序。新版本的类标识是CLSID_CaptureGraphBuilder2新的接口名称是IcaptureGraphBuilder2。新的接口比老的接口有更多的灵活性。
创建Capture Graph Builder我们还是使用CoCreateInstance:
ICaptureGraphBuilder2 *pBuild = NULL;
hr = CoCreateInstance(CLSID_CaptureGraphBuilder2,
NULL, CLSCTX_INPROC_SERVER,
IID_ICaptureGraphBuilder2, (void **)&pBuild);
然后我们使用Capture Graph Builder来建立过滤图形:
a、 建立部分渲染的过滤图形,它包含AVI Mux 过滤器和File Writer过滤器。
b、 添加源过滤器和压缩过滤器。
c、 连接源过滤器到MUX 过滤器。
下面逐步的解释每一个细节:
建立渲染段
为了建立过滤图形的渲染段,调用IcaptureGraphBuilder2::SetOutputFileName方法。它返回一个MUX的过滤器和File Write的指针。MUX是下面建立过滤图形所需要的,但是这个例子不需要File Write,因此,它的参数为NULL。
IBaseFilter *pMux = NULL;
pBuild->SetOutputFileName(
&MEDIASUBTYPE_Avi, //文件类型
wszOutputFile, // 文件名
&pMux, // 得到一个指向multiplexer的指针
NULL); // 得到一个指向File Write的指针

当该方法返回,MUX过滤器有一个很明显的参考计数,所以以后一定要确保释放它。MUX过滤器提供了两个接口来控制AVI格式:
IconfigInterleaving接口:设置交错模式
IconfigAviMux接口:设置主流和AVI兼容性的索引
添加源过滤器和压缩过滤器
下一步我们要在过滤图形中添加源过滤器和压缩过滤器。当你调用SetOutputFileName的时候,Capture Graph Builder会自动的创建一个过滤图形管理器的实例。你可以调用IcaptureGraphBuilder::GetFiltergraph方法来获得刚才创建的过滤图形管理器的指针。
IGraphBuilder *pGraph = NULL;
pBuild->GetFiltergraph(&pGraph);
现在我们该调用IgraphBuilder::AddSourceFilter方法来添加异步文件源过滤器,然后调用IfilterGraph::AddFilter方法来添加视频压缩过滤器:
IBaseFilter *pSrc = NULL;
pGraph->AddSourceFilter(wszInputFile, L"Source Filter", &pSrc);
pGraph->AddFilter(pVComp, L"Compressor");
到了这一步我们的状态就象下图那样,源过滤器和压缩过滤器没有和别的任何过滤器连接。

连接源到Mux
最后一步就是通过视频压缩过滤器连接源过滤器到AVI Mux过滤器。我们使用IcaptureGraphBuilder2::RenderStream方法来连接源过滤器的输出引脚到指定的过滤器。
前两个参数指定了用那个源过滤器的引脚来连接,通过指明引脚的分类和媒体类型来实现。异步文件源过滤器只有一个输出引脚,所以这些参数要设置成NULL。后三个参数指定了源过滤器,压缩过滤器,和Mux过滤器。
下面的代码演示了通过视频压缩过滤器来渲染视频流:
pBuild->RenderStream(
NULL, // 输出引脚类型
NULL, // 媒体类型
pSrc, // 源过滤器
pVComp, // 压缩过滤器
pMux);
假定源文件包含了音频流,AVI Splitter过滤器会在输出引脚输出音频流。为了连接这个管脚我们需要再次调用RenderStream:
pBuild->RenderStream(NULL, NULL, pSrc, NULL, pMux);
这里我们没有指定压缩过滤器。而且源过滤器的输出引脚已经连接了,因此RenderStream方法会搜索一个未连接的输出引脚到Splitter过滤器。它可以直接连接引脚到MUX过滤器。但是如果源文件没有音频流,那么第二次调用会失败。
4、 写文件
如果想写文件正常的进行,你必须调用ImediaControl::Run方法来运行过滤图形。等到播放完成后调用ImediaControl::Stop。
如果要显示文件的写的进度,你可以使用ImediaSeeking来查询Mux过滤器。调用ImediaSeeking::GetDuration方法来获得文件的持续时间。定时的使用ImediaSeeking::GetCurrentPostition方法来获得当前的位置,但必须要是过滤图形运行中。
注意,一般情况下我们用ImediaSeeking接口查询过滤图形管理器来定位,如果正在写文件的话,这将是一个特例。这里我们要查询Mux过滤器就可以了。查询过滤图形定位要求回放的时候才可以,而不是写文件的时候。
看了下面的代码读者就会更加清楚了。
IMediaSeeking *pSeek = NULL;
IMediaEventEx *pEvent = NULL;
IMediaControl *pControl = NULL;
REFERENCE_TIME rtTotal;

hr = pMux->QueryInterface(IID_IMediaSeeking, (void**)&pSeek);
hr = pGraph->QueryInterface(IID_IMediaEventEx, (void**)&pEvent);
hr = pGraph->QueryInterface(IID_IMediaControl, (void**)&pControl);

// 设置DirectShow的时间通报
hr = pEvent->SetNotifyWindow((OAHWND)hwnd, WM_GRAPHNOTIFY, 0);

hr = GetDuration(&rtTotal);
SendDlgItemMessage(hwnd, IDC_PROGRESS1, PBM_SETRANGE, 0,
MAKELPARAM(0, rtTotal / 10000000));
// 开始时间.
UINT_PTR res = SetTimer(hwnd, nIDEvent, 100, NULL);
// 运行过滤图形.
pControl->Run();
当应用程序收到定时器事件,它就更新当前位置:
void OnTimer(HWND hDlg, IMediaSeeking *pSeek)
{
REFERENCE_TIME rtNow;
HRESULT hr = pSeek->GetCurrentPosition(&rtNow);
if (SUCCEEDED(hr))
{
SendDlgItemMessage(hDlg, IDC_PROGRESS1, PBM_SETPOS, rtNow/10000000, 0);
}
}
当应用程序收到DirectShow结束事件,它就可以停止图形,就象下面那样:
LRESULT CALLBACK WndProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
/* ... */
case WM_GRAPHNOTIFY:
DoHandleEvent();
break;
/* ... */
}
}

void DoHandleEvent()
{
long evCode, param1, param2;
bool bComplete = false;
if (!pEvent) return;

//得到所有的事件
while (SUCCEEDED(pEvent->GetEvent(&evCode, ¶m1, ¶m2, 0))
{
pEvent->FreeEventParams(evCode, param1, param2);
switch(evCode)
{
case EC_USERABORT:
case EC_ERRORABORT:
case EC_COMPLETE:
bComplete = true;
break;
}
}
if (bComplete)
{
pControl->Stop(); // Important! You must stop the graph!

//关掉事件通报.
pEvent->SetNotifyWindow(NULL, 0, 0);
pEvent->Release();
pEvent = NULL;
SendDlgItemMessage(IDC_PROGRESS1, PBM_SETPOS, 0, 0);
KillTimer(hwnd, nIDEvent);
}
}

❼ Directshow Des视频编码的问题

你会用DirectShow显示图片吗?求助!!!!!

❽ 求directshow视频图像缩放与旋转算法

这个操作可以参考directshow samples里面的filter ezrgb24,
参照这个示例可以实现对sample的图像进行变换的功能。
它的实施步骤大概是这样的:先将pIn的数据直接复制到pOut,然后将pOut的数据取出来进行变换。
变换进行的操作参考一些DIB算法库就可以了。

❾ 有什么好的视频压缩软件

压缩宝典——TMPGEnc与Canopus ProCoder
推荐使用TMPGEnc或Canopus ProCoder,其实会声会影也可以进行视频的压缩,但是它的压缩的最大缺点是画面中的色块特别多,而且压缩时的可调节参数较少,所以我们还是选用专业的软件来压缩吧。
TMPGEnc是日本人开发的一套MPEG编码工具软件,支持VCD、SVCD、DVD等多种格式,所以许多网友习惯称它为“小日本”。它能将各种常见影片文件进行压缩、转换成符合VCD、SVCD、DVD等的视频格式,这个软件非常的小巧和高效.
Canopus ProCoder 是目前的压缩软件中画质、画面细节处理方面相当好的一个,它的设计基于Canopus专利DV和MPEG-2 codecs技术,支持输出到MPEG-1、 MPEG-2、 Windows媒体、RealVideo、Apple QuickTime、Microsoft DirectShow、Microsoft Video for Windows、Microsoft DV、Microsoft DV和Canopus DV视频格式。
简单的,专业的软件 procoder3 ,支持高清压缩,基本上什么格式都能够压缩和转换,还能批量转换。 现在网上有中文版和破解版 Grass Valley ProCoder 3 的前身就是广受赞誉的 Canopus ProCoder 2 ,其结合速度和灵活性于一体,是一款适合专业人士使用的先进的视频转换工具。作为广受赞誉的编码转换软件的领先者,ProCoder 3 具有广泛的输入输出选项、先进的滤镜、批处理功能和简单易用的界面。不管您是为制作DVD进行MPEG编码,或为流媒体应用进行WindowsMedia编码,或是为了 NTSC 和 PAL 之间相互转换,ProCoder3 都能快速而方便地进行视频转换。可以将单个源文件同时转换成多个目标文件,用批处理模式连续进行多个文件的转换工作,或者用 ProCoder3 的拖放预设按钮进行一键式转换。 新特性: 一、支持更多移动视频格式 — 新增H.264的编码和解码,ProCoder 3 可以为时下流行的 Apple iPod03 和Sony PSP64 等移动视频设备转换和输出这些格式的文件。 二、增加了对EDIUS产品工作流程的更多支持 — ProCoder3 已经包含了Canopus HQ 编解码器,ProCoder 可以独立进行 Canopus HQ 文件的编码和解码,而无需预先安装 EDIUS 软件。 三、支持AVCHD便携摄像机的格式 — 新增的 AVCHD 解码功能可以将新一代的AVCHD便携摄像机里的视频素材转换后用于编辑、输出流媒体或刻录 DVD。 四、加快多核 CPU 系统的编码速度 — MPEG-2(传输流)的 Grid编码支持,为新的多核或多 CPU 系统提供更快的编码速度。当你编码时选择“预览 DVD 目标”或“HDV 目标”时,将自动启动该特性进行编码。 五、支持杜比03数字音频 — 在进行 DVD 制作和复制过程中, ProCoder 3 支持杜比数字音频的编码,在减小文件大小的同时提高了音频的质量。ProCoder 3 还可以用内置的通道混合器来增加、改变和删除目标格式中的单独的音频通道。 参考资料:

阅读全文

与directshow视频压缩相关的资料

热点内容
linuxpostgresql配置 浏览:871
云服务器如何挂机赚钱 浏览:549
null是java关键字 浏览:688
看过读过听过是什么APP 浏览:834
java判断数据是否存在 浏览:15
一巴掌解压图片 浏览:976
自己搭建的服务器如何安全 浏览:753
miui源码公开 浏览:447
linuxbin是什么 浏览:332
php小项目留言板 浏览:955
得推论坛系统源码v24 浏览:67
android根据号码查询联系人 浏览:496
命令行ftp上传 浏览:338
大爷程序员 浏览:198
自私的基因pdf 浏览:479
程序员是怎么做优化设置 浏览:251
命令与征服现代冲突视频 浏览:678
基于单片机的文献综述 浏览:999
dnf扫货脚本源码 浏览:729
用于编译器中缓解控制冲突的方法 浏览:194