如何取得WMV文件的Bitrate等信息?

MyCam 开发日志(十三)----------- CBR AND VBR编码模式 MyCam开发到现在预览部分的所有功能基本完成。特效部分也已经完成。剩下就是多尺寸视频文件的录制。之前写的编码成WMV的时候,录制的都是常用的尺寸(320*240)(640*480),我直接使用WMV SDK中已经提供的PROFILE文件就可以了,这样可以保证得到比较清晰的画质。现在Camera中出现了多个不同的尺寸,使用已经有的PROFILE已经不太现实。为了搞清楚到底应该怎么自己手动编译PRO 阅读详情

有那么一阵子,我们为了要取得一个视频文件的bitrate(比特率)等信息伤透了脑筋,因为我们对多媒体编程是全然的门外汉,不过幸运地,后来我们接触了DirectShow/DirectSound和WMF等好玩的东西。

关于MPG/MPEG视频文件的bitrate等,那将是另一篇文章,我们在这个小文里只讨论WMV文件的东东。:)

Tips:要针对某一种多媒体文件格式进行处理,一般我们都需要用到特定的Encoder(编码器)和Decoder(解码器)以及其它工具、文档等,这些东东如果被该格式的厂商收集起来提供给开发人员使用,那么显然就变成一个SDK咯,像微软为WMA/WMV/ASF等格式提供的WMF SDK。貌似Real为RM/RMVB等自家格式也提供了SDK吧,不过俺还没有兴趣去研究它们。另外,DirectShow缺省地为MPG/MPEG/WAV等古老的多媒体的格式提供了支持,所以一般情况下不需要去找关于它们的SDK。

嗯,要取得WMV文件的bitrate,只靠DirectShow是不够的,我们需要WMF(Windows Media Format)的支持。如果你还不清楚WMF是什么东东,那么下面一些文章兴许会对你有帮助。
http://www.microsoft.com/windows/windowsmedia/forpros/format/default.mspx
http://msdn2.microsoft.com/zh-cn/windowsmedia/default(en-us).aspx
http://msdn2.microsoft.com/en-us/library/aa387410.aspx

另外,你可以从下面的地址获得最新的WMF11 SDK。
http://download.microsoft.com/download/a/c/3/ac367925-39e7-4451-a175-a224f94fbdce/wmformat11sdk.exe

OK,如果你已经安装完WMF11 SDK,那么我们就可以进入主题了。按照缺省安装,我们会得到很多很多的文件(哦,不多才怪)。我们首先要关心的是以下一些目录和文件。

1、include和lib,使用VC++开发WMF相关程序的依赖资源。
  C:/WMSDK/WMFSDK11/include
  C:/WMSDK/WMFSDK11/lib

2、Bin和Samples,MS提供的很多例子,很实用。
  C:/WMSDK/WMFSDK11/Bin
  C:/WMSDK/WMFSDK11/samples

3、帮助文档咯,其实如果安装了MSDN的话,MSDN里面也有的。
  C:/WMSDK/WMFSDK11/wmformat.chm

那么为了达到我们本文的目的(取bitrate而已啦)要使用的文件呢?
请打开下面这个工程吧。
  C:/WMSDK/WMFSDK11/samples/wmprop/
然后重点关注wmprop.cpp里面的代码,它是我们的核心。
下面我给出一个我加注的版本,嗯,就是加了点注释帮助大家阅读而已。

//  Use IWMStreamConfig interface to access
//  number of streams, each stream number, and bitrate
////////////////////////////////////////////////////////////////////////////// /
HRESULT CWMProp::GetPropertiesFromProfile()
{
    HRESULT hr 
=  S_OK;
    
if  ( NULL  ==  m_pProfile )
    {
        
return ( E_FAIL );
    }

    
//  该变量用于保存媒体流的数量
    DWORD dwStreamCount  =   0 ;
    
    
// 取得媒体流的数量
    hr  =  m_pProfile -> GetStreamCount(  & dwStreamCount );
    
if  ( FAILED( hr ) )
    {
        _tprintf( _T( 
" Could not get stream count: (hr=0x%08x) "  ), hr );
        
return ( hr );
    }

    _tprintf( _T( 
" This Windows Media file has %d stream(s) "  ), dwStreamCount );
    _tprintf( _T( 
" "  ) );

    
// 遍历WMF文件里面包含的每一个流
     for  ( DWORD dwIndex  =   0 ; dwIndex  <  dwStreamCount; dwIndex ++  )
    {
        
// 核心API,IWMStreamConfig
        
// The IWMStreamConfig interface is the primary interface of 
        
// a stream configuration object. It provides methods to 
        
// configure basic properties for streams to be used in a profile.
        IWMStreamConfig  * pConfig  =  NULL;
        
        
// 取回一个流
        hr  =  m_pProfile -> GetStream( dwIndex,  & pConfig );
        
if  ( FAILED( hr ) )
        {
            _tprintf( _T( 
" Could not get the stream: (hr=0x%08x) "  ), hr );
            
return ( hr );
        }

        GUID guid 
=  GUID_NULL;
        
        
// 取回流的类型。一个WMV文件一般包含三个流:
        
// 视频流 => WMMEDIATYPE_Video
        
// 音频流 => WMMEDIATYPE_Audio
        
// 脚本流 => WMMEDIATYPE_Script
        hr  =  pConfig -> GetStreamType(  & guid );
        
if  ( FAILED( hr ) )
        {
            _tprintf( _T( 
" Could not get the stream type: (hr=0x%08x) "  ), hr );
            
return ( hr );
        }
        
else
        {
            
if  ( WMMEDIATYPE_Video  ==  guid )
            {
                WORD wStreamNum 
=   0 ;
                
// 流编号
                hr  =  pConfig -> GetStreamNumber(  & wStreamNum );
                
if  ( FAILED( hr ) )
                {
                    _tprintf( _T( 
" Could not get stream number: (hr=0x%08x) "  ), hr );
                    
return ( hr );
                }
                
                
// 比特率
                DWORD dwBitrate  =   0 ;
                
                
// 取回比特率 GetBitrate(这里取得的是视频流的比特率)
                hr  =  pConfig -> GetBitrate(  & dwBitrate );
                
if  ( FAILED( hr ) )
                {
                    _tprintf( _T( 
" Could not get bit rate: (hr=0x%08x) "  ), hr );
                    
return ( hr );
                }
                _tprintf( _T( 
" Video Stream properties: "  ) );
                _tprintf( _T( 
" Stream number: %d "  ), wStreamNum );
                _tprintf( _T( 
" Bitrate: %d bps  "  ), dwBitrate );
                
                
// 取得流的丰富信息
                hr  =  PrintCodecName( pConfig );
                _tprintf( _T( 
" "  ) );
            }
            
else   if  ( WMMEDIATYPE_Audio  ==  guid )
            {
                WORD wStreamNum 
=   0 ;
                hr 
=  pConfig -> GetStreamNumber(  & wStreamNum );
                
if  ( FAILED( hr ) )
                {
                    _tprintf( _T( 
" Could not get stream number: (hr=0x%08x) "  ), hr );
                    
return ( hr );
                }
                DWORD dwBitrate 
=   0 ;
                
                
// 取回比特率 GetBitrate(这里取得的是音频流的比特率)
                
// 注意我们通常提到的某媒体文件的比特率是指音频流比特率和视频流比特率的合计,
                
// 是不是还包含脚本流,这个鄙人目前还不清楚,并不是所有WMV文件都包含脚本流
                hr  =  pConfig -> GetBitrate(  & dwBitrate );
                
if  ( FAILED( hr ) )
                {
                    _tprintf( _T( 
" Could not get bit rate: (hr=0x%08x) "  ), hr );
                    
return ( hr );
                }
                _tprintf( _T( 
" Audio Stream properties: "  ) );
                _tprintf( _T( 
" Stream number: %d "  ), wStreamNum );
                _tprintf( _T( 
" Bitrate: %d bps  "  ), dwBitrate );
                hr 
=  PrintCodecName( pConfig );
                _tprintf( _T( 
" "  ) );
            }
            
else   if  ( WMMEDIATYPE_Script  ==  guid )
            {
                WORD wStreamNum 
=   0 ;
                hr 
=  pConfig -> GetStreamNumber(  & wStreamNum );
                
if  ( FAILED( hr ) )
                {
                    _tprintf( _T( 
" Could not get stream number: (hr=0x%08x) "  ), hr );
                    
return ( hr );
                }
                DWORD dwBitrate 
=   0 ;
                hr 
=  pConfig -> GetBitrate(  & dwBitrate );
                
if  ( FAILED( hr ) )
                {
                    _tprintf( _T( 
" Could not get bit rate: (hr=0x%08x) "  ), hr );
                    
return ( hr );
                }
                _tprintf( _T( 
" Script Stream properties: "  ) );
                _tprintf( _T( 
" Stream number: %d "  ), wStreamNum );
                _tprintf( _T( 
" Bitrate: %d bps  "  ), dwBitrate );
                _tprintf( _T( 
" "  ) );
            }
        }
        pConfig
-> Release();
    }
    
return ( S_OK );
}
//  Use IWMStreamConfig interface to access codec names
////////////////////////////////////////////////////////////////////////////// /
HRESULT CWMProp::PrintCodecName( IWMStreamConfig  * pConfig )
{
    
if  ( NULL  ==  pConfig )
    {
        
return ( E_FAIL);
    }

    HRESULT hr 
=  S_OK;
    
    
// 核心API IWMMediaProps
    
// The IWMMediaProps interface sets and retrieves the WM_MEDIA_TYPE structure 
    
// for an input, stream, or output. 
    IWMMediaProps *  pMediaProps  =  NULL;
    
do
    {
        hr 
=  pConfig -> QueryInterface( IID_IWMMediaProps, (  void   **  ) & pMediaProps );
        
if  ( FAILED( hr ) )
        {
            _tprintf( _T( 
"  QI for IWMMediaProps failed: (hr=0x%08x) "  ), hr );
            
break ;
        }

        DWORD cbType 
=   0 ;
        hr 
=  pMediaProps -> GetMediaType( NULL,  & cbType );
        
if  ( FAILED( hr ) )
        {
            _tprintf( _T( 
"  Get Mediatype failed: (hr=0x%08x) "  ), hr );
            
break ;
        }

        BYTE 
* pData  =   new  BYTE[ cbType ];
        
        
if  ( NULL  ==  pData )
        {
            hr 
=  E_OUTOFMEMORY;
            _tprintf( _T( 
"  Out of memory: (hr=0x%08x) "  ), hr );
            
break ;
        }

        ZeroMemory( pData, cbType );
        hr 
=  pMediaProps -> GetMediaType( ( WM_MEDIA_TYPE  * ) pData,  & cbType );
        
if  ( FAILED( hr ) )
        {
            _tprintf( _T( 
"  Get Mediatype failed: (hr=0x%08x) "  ), hr );
            
break ;
        }

        
//
        
//  Audio Codec Names
        
//       
         if  ( WMMEDIASUBTYPE_WMAudioV9  ==  ( ( WM_MEDIA_TYPE  * ) pData ) -> subtype )
        {
            _tprintf( _T( 
" Codec Name: Windows Media Audio V9 "  ) );
            delete []pData;
            pData 
=  NULL;
            
break ;
        }
        
else   if  ( WMMEDIASUBTYPE_WMAudio_Lossless  ==  ( ( WM_MEDIA_TYPE  * ) pData ) -> subtype )
        {
            _tprintf( _T( 
" Codec Name: Windows Media Audio V9 (Lossless Mode) "  ) );
            delete []pData;
            pData 
=  NULL;
            
break ;
        }
        
else   if  ( WMMEDIASUBTYPE_WMAudioV7  ==  ( ( WM_MEDIA_TYPE  * ) pData ) -> subtype )
        {
            _tprintf( _T( 
" Codec Name: Windows Media Audio V7/V8 "  ) );
            delete []pData;
            pData 
=  NULL;
            
break ;
        }
        
else   if  ( WMMEDIASUBTYPE_WMSP1  ==  ( ( WM_MEDIA_TYPE  * ) pData ) -> subtype )
        {
            _tprintf( _T( 
" Codec Name: Windows Media Speech Codec V9 "  ) );
            delete []pData;
            pData 
=  NULL;
            
break ;
        }
        
else   if  ( WMMEDIASUBTYPE_WMAudioV2  ==  ( ( WM_MEDIA_TYPE  * ) pData ) -> subtype )
        {
            _tprintf( _T( 
" Codec Name: Windows Media Audio V2 "  ) );
            delete []pData;
            pData 
=  NULL;
            
break ;
        }
        
else   if  ( WMMEDIASUBTYPE_ACELPnet  ==  ( ( WM_MEDIA_TYPE  * ) pData ) -> subtype )
        {
            _tprintf( _T( 
" Codec Name: ACELP.net "  ) );
            delete []pData;
            pData 
=  NULL;
            
break ;
        }
                
        
//
        
//  Video Codec Names
        
//   
         else   if  ( WMMEDIASUBTYPE_WMV1  ==  ( ( WM_MEDIA_TYPE  * ) pData ) -> subtype )
        {
            _tprintf( _T( 
" Codec Name: Windows Media Video V7 "  ) );
            delete []pData;
            pData 
=  NULL;
            
break ;
        }
        
        
if  ( WMMEDIASUBTYPE_MSS1  ==  ( ( WM_MEDIA_TYPE  * ) pData ) -> subtype )
        {
            _tprintf( _T( 
" Codec Name: Windows Media Screen V7 "  ) );
            delete []pData;
            pData 
=  NULL;
            
break ;
        }
        
        
if  ( WMMEDIASUBTYPE_MSS2  ==  ( ( WM_MEDIA_TYPE  * ) pData ) -> subtype )
        {
            _tprintf( _T( 
" Codec Name: Windows Media Screen V9 "  ) );
            delete []pData;
            pData 
=  NULL;
            
break ;
        }
        
else   if  ( WMMEDIASUBTYPE_WMV2  ==  ( ( WM_MEDIA_TYPE  * ) pData ) -> subtype )
        {
            _tprintf( _T( 
" Codec Name: Windows Media Video V8 "  ) );
            delete []pData;
            pData 
=  NULL;
            
break ;
        }
        
else   if  ( WMMEDIASUBTYPE_WMV3  ==  ( ( WM_MEDIA_TYPE  * ) pData ) -> subtype )
        {
            _tprintf( _T( 
" Codec Name: Windows Media Video V9 "  ) );
            delete []pData;
            pData 
=  NULL;
            
break ;
        }
        
else   if  ( WMMEDIASUBTYPE_MP43  ==  ( ( WM_MEDIA_TYPE  * ) pData ) -> subtype )
        {
            _tprintf( _T( 
" Codec Name: Microsoft MPEG-4 Video Codec V3  "  ) );
            delete []pData;
            pData 
=  NULL;
            
break ;
        }
        
else   if  ( WMMEDIASUBTYPE_MP4S  ==  ( ( WM_MEDIA_TYPE  * ) pData ) -> subtype )
        {
            _tprintf( _T( 
" Codec Name: ISO MPEG-4 Video V1 "  ) );
            delete []pData;
            pData 
=  NULL;
            
break ;
        }
                
    } 
while  ( FALSE );
    SAFE_RELEASE( pMediaProps );
    
return ( hr );
}

※关联文章推荐:
1、来自 陆其明's Blog
《Windows Media Format SDK系统概述》

http://blog.youkuaiyun.com/happydeer/archive/2004/11/29/198262.aspx

Wma文件的数据结构以及读取信息的代码   wma文件是微软开发的一种音频文件。本文详细介绍了wma文件的数据结构,并在最后提供了读取wam文件附加信息的VB代码。 立即下载

相关推荐

Java 获取视频时长、格式、大小需要的jar

Java 获取视频时长、格式、大小需要的jar jave-1.0.2

http streaming缓冲buffer更新进度的处理流程

对于http streaming,更新buffer进度的处理在AwesomePlayer::onBufferingUpdate()函数中,首先判断mCachedSource != NULL,即是http://流媒体的情况下,通过getBitrate(&amp;bitrate)函数取得bitrate,然后计算出buffer的进度,通过notifyListener_l(MEDIA_BUFFERING_...

蓝色妖姬 679

java的wma格式的音频教程

经我手压制的JAVA入门音频教程(1-15课),WMA格式,占空间小,推荐给你们

微软的COM中GUID和UUID、CLSID、IID

当初微软设计com规范的时候,有两种选择来保证用户的设计的com组件可以全球唯一:第一种是采用和Internet地址一样的管理方式,成立一个管理机构,用户如果想开发一个COM组件的时候需要向该机构提出申请,并交一定的费用。第二种是发明一种算法,每次都能产生一个全球唯一的COM组件标识符。第一种方法,用户使用起来太不方便,微软采用第二种方法,并发明了一种算法,这种算法用GUID(Gl

killcpp的专栏 6937

java使用Xuggler获得视频时长,分辨率,高宽,码率等信息

java使用Xuggler获得视频时长,分辨率,高宽,码率等信息,其中包括xuggle-xuggler-5.4.jar这个jar包,使用该jar包可直接获取视频的各种信息

省一蓝桥杯嵌入式-09RTC实时时钟

RTC(Real-Time Clock)实时时钟,是一个独立的定时器RTC模块拥有一组连续的计数的计数器,在响应软件配置下,可提供时钟、日历、闹钟功能RTC能提供年月日时分秒等信息(可设置)在系统复位或从待机模式唤醒后,RTC的设置时间维持不变(这个我没实现,复位后时间也重置了,有能力的可以自己研究一下)持续时间跟踪:在主系统断电后或处于低功耗模式时,RTC仍继续工作,原理是有额外的电池为其供电(蓝桥杯板子没有这个备用电源,该功能无效。

qq_46392331的博客 1729

ASF学习笔记

设置(Profile)一个设置是一个ASF的配置(configuration)的描述数据集合。一个设置必须至少包含一个流的配置设置。流信息设置中的流信息包含流的比特率(bit rate),缓冲窗口和媒体属性的设置。视频和音频的流信息准确描述了文件中的媒体配置,包括压缩数据使用的编码和解码器(如果有的话)。一个设置也包含很多创建ASF文件时使用的ASF的特性,这包括互斥、媒体优先级、带宽

ITBUG的专栏 2728

k8s 查看cpu使用率最高的pod

在 Kubernetes 中,可以使用命令查看 Pod 的资源使用情况,从而找到 CPU 使用率最高的 Pod。

u010674101的专栏 3345

directshow中获取码率

什么都不说了,看代码吧。(说明一下,这样得到的码率比文件属性中的码率是要小一点的,因为文件属性里标的码率包括了视频和音频,而这样得到的码率只包括视频,可是我又不知道怎么把音频的码率也得到,小就小一点吧^_^)BOOL CDxGraph::GetBitRate(long *outBitRate)...{    if (NULL != outBitRate)        *outBitRat

lemon_wei的专栏 1248

Revit获取族预览图

最近做到和族库相关的功能需要获取到族文件的预览图,在RevitAPI中提供了ElementType.GetPreviewImage方法,但是前提就是你是在Revit里面操作的,并且已经拿到了Symbol对象实例,才可以调用此方法。然后在网上找了另外一种方式,通过读取Revit文件,在REVITPREVIEW4.0字段截取文件信息,将其转换为图片格式。 一、使用RevitAPI中ElementType.GetPreviewImage方法 [Autodesk.Revit.Attributes.Transac.

weixin_44631419的博客 1755

SAP_SD模块路径及运输功能后台配置简介

后台路径:SPRO—后勤执行—装运—基本发运功能—定义路线—定义传输模式根据实际运输过程运输地理的类型:海运、公路运输、空运后台路径:SPRO—后勤执行—装运—基本发运功能—定义路线—定义发运类型根据实际运输过程运输方式:汽车、卡车、火车、轮船、飞机后台路径:SPRO—后勤执行—装运—基本发运功能—路径—定义路线—定义运输连接点指在运输过程中需要中转的地区可以维护中转地区的停留的时间后台路径:SPRO—后勤执行—装运—基本发运功能—路径—定义路线—定义路径和阶段。

我小时候很黑的博客 1397

我靠!Asf Writer设置Bitrate老是出错!

几乎搞了一个下午。设置 ASf Writer 的Bitrate 有两个地方:1.WM_MEDIA_TYPE中的pVih->dwBitRate 要设置一下2.IWMStreamConfig接口中的SetBitrate也要调用,两个置必须一样.如果只设置1或者2,那么在pProfile->ReconfigStream (pStreamConfig);这种代码就会出错!

Meuck的专栏 1562

MIKE水动力笔记17_MIKE文件转shp、统计每个单元格的面积

MIKE的工具箱中自带一个转shp的工具,然后可以拖进ArcGIS中很方便的统计每个单元格的面积和每个网格点的水深。

晏长街的博客 4151

getID3() 1.7.3

关于:getID3()是一个PHP脚本,用于获取MP3和其它多媒体文件的相关信息。包括:播放时间,bitrate,resolution。支持的格式有:MP3, Ogg Vorbis, WAV, AVI, MPEG-1 video, Windows Media (ASF, WMA, WMV), RealAudio & RealVideo, Monkeys Audio, FLAC & OggFL

hkai的专栏 1430

一、C++反作弊对抗实战 (基础篇 —— 2.注册表注入DLL)

在Windows NT/XP操作系统中,当需要加载user32.dll的程序启动时,user32.dll会加载注册表键HLM\Software\Microsoft\WindowsNT\CurrentVersion\Windows\AppInit_dlls下面列出的所有模块。

Koma的主页 1098

【K8S系列】Kubernetes 中 Pod 无法通过 Service 名称访问服务的 DNS 解析失败问题【已解决】

在 Kubernetes 中,Service 提供了一种稳定的方式,通过名称访问一组 Pod。当其他 Pod 无法通过 Service 名称访问服务,并且出现 DNS 解析失败时,通常会导致应用无法正常工作。本文将详细分析此问题的常见原因及其解决方案。

颜淡慕潇 1万+

查看视频文件的信息

 1.查看视频文件的信息 mplayer -identify -nosound -vc dummy -vo null xxx.flv xxx.flv是视频文件名,可以是wmv ,avi等 2.查看dvd的信息mplayer dvd:// -dvd-device /root/dvd/dvd203 -vo null -ao null -frames 0 -identify其中/ro

zzz_781111的专栏 3785

液态神经网络(Liquid Neural Networks)从线虫大脑到下一代 AI

液态神经网络(Liquid Neural Networks,LNN)是一类具有动态内部结构的神经网络,其灵感来源于生物神经系统,尤其是大脑中神经元如何以复杂、非线性的方式响应外部刺激。与传统神经网络不同,液态神经网络的每个神经元在处理输入时,不再是静态线性或非线性变换,而是基于一个微分方程模型进行响应。这种建模方式使神经元的行为具有时间连续性和动态适应性。换句话说,它不仅“记住”过去的信息,还能根据当前环境实时调整自身的动态特性,这对于感知、决策、预测等任务都非常关键。

hello.reader 7410

ffmpeg 音视频格式转换如何保证品质

我们在将多种格式的视频转换成flv格式的时候,我们关注的就是转换后的flv视频的品质和大小。下面就自己的实践所得来和大家分享一下,主要针对 avi、3gp、mp4和wmv四种格式来进行分析。通常在使用ffmpeg进行视频转换的时候我们使用到的控制音视频的主要参数有如下: 对于其他诸如-i、-y、-s等参数基本上都是可以很好理解的了。我们上面提到的几个参数前四个主要是用来设置音频的,后三个主要是用来设置视频的。对于 音频的ar(采样率)可以指定为22050、24000、44100或48000,一般来说后

JineD的博客 2552

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C#通过FFmpeg获得视频文件参数

C#通过FFmpeg获得视频参数 FFmpeg简介 FFmpegis a complete, cross-platform solution to record, convert and stream audio and video(录制、转换 、音/视频,并可将其转换为音/视频流的完整的,跨平台的j解决方案).FFmpeg的开发是基于Linux操作系统,但是可以在大多数操作系...

weixin_30312659的博客 965

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

ffmpeg 获得视频的时间长度, 仅仅学习一下

public static void main(String[] args) { String result = processFLV("E:\\test\\京视传媒\\体育类\\xiao.flv"); PatternCompiler compiler =new Perl5Compiler(); try { String regexDuration ="D...

weixin_30512785的博客 160

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

iPhone视频转换软件使用教程(组图)

  为了照顾英文不好的兄弟姐妹,我尽量作的让大家都看的明白.  首先大家先去http://iphone.tgbus.com/software/200707/20070728143020.shtml,下载视频转换软件。  进入页面后那个绿色的箭头后边跟着个Download Now就是下载了(地球人都知道了- -!), 可能大家会比较慢, 我家里用的是2M宽带,速度还是不错的,软件也不大.大家

The key to .Net 1118

格式工厂 wav 比特率_【资源分享】格式工厂FORMAT FACTORY-5.1.0

所有类型视频转到MP4、3GP、AVI、MKV、WMV、MPG、VOB、FLV、SWF、MOV,新版支持RMVB(rmvb需要安装Realplayer或相关的译码器)、xv(迅雷独有的文件格式)转换成其他格式所有类型音频转到MP3、WMA、FLAC、AAC、MMF、AMR、M4A、M4R、OGG、MP2、WAV所有类型图片转到JPG、PNG、ICO、BMP、GIF、TIF、PCX、TGA支持移动设...

weixin_39998903的博客 362

格式工厂 wav 比特率_Easy MP3 Converter Pro for mac(音频格式转换软件)

Mac哪款音频格式转换软件好用呢?Easy MP3 Converter Pro for mac支持批量转换音频格式,只需将各种格式的音频文件拖拽至Easy Mp3 Converter Pro mac版中,一键快速转换格式。Easy MP3 Converter Pro for mac官方介绍您想从Mac上的视频中提取音频吗?你有一些Mac不支持的音乐格式吗?Easy MP3 Converter Pr...

weixin_39737051的博客 390

ffmpeg视频转码压缩

视频尺寸:指的就是视频的分辨率,常见的分辨率有4096*2304,1920*1080,720*576等。 视频编码:视频编码方式就是指通过特定的压缩技术,将某个视频格式的文件转换成另一种视频格式文件的方式。视频编码格式常见到的有:MPEG-2 TS、Divx、Xvid、H.264、WMV-HD和VC-1。 音频编码:音频编码方式指通过特定的压缩技术对音频数据进行处理的方法。 帧率:帧率(即视频更新率)是用于测量显示帧数的量度。测量单位为“每秒显示帧数”(Frame Per Second,FPS,帧率)

phymat.nico的专栏 599

格式工厂 wav 比特率_IQmango Converter下载-IQmango Converter(音视频格式转换工具)v3.4.6免费版...

IQmango Converter是一款音视频格式转换工具,用户只需在其向导界面的引导下,即可完成对音频格式的转换,转换后即可支持在多种设备上进行播放,可以快速轻松地将音频从各种格式转换为您需要的所有音频格式文件!软件特色该应用程序支持所有格式,可以快速处理文件,并且不需要安装。我们的转换器可处理300多种不同的文件格式,包括视频格式并将它们转换为mp3,wav,m4a,flac,ogg,amr,...

weixin_39572316的博客 297
上一篇: 最近这些新技术到底是怎么了?
下一篇: 去你爷爷的MSDN!
梦想家起飞
博客等级 码龄24年 24粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值