ioleon13's blog

—Good Good Study,Day Day Up!

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  27 随笔 :: 0 文章 :: 22 评论 :: 0 引用

公告

2010年9月27日 #

     进行音视频处理,ffmpeg的确是很好很强大,最近经常做这样一个工作:从视频文件中提取音频。一个一个的复制、粘贴到cmd窗口,文件多了就吃不消了,这时人的惰性发挥了作用,上网找了找,和我一样的懒人不在少数,三下五除二之间,自己整了个批量转换脚本,简单的一句话,几百个音频文件就哗啦哗啦的出来了。以AVI到WAV文件为例,批处理脚本如下:

 @echo   —————————————————————————–

@echo                AVI转wav批处理脚本
@echo   —————————————————————————–
@echo
echo 开始视频转换过程
echo 确认请按任意键,否则关闭执行窗口,或者按ctrl+c终止
echo 使用ffmpeg命令开始批量转换,注意ffmpeg必须在path环境内
@
pause
for /. %%a in (*.avi) do ffmpeg -i %%~na.avi -ar 16000 -ac 1 %%~na.wav

 

     将以上文本保存成aviTowav.cmd放到视频文件所在的目录即可,需要注意的是:

     1、文件中如果有空格,需要在文件名的地方加上引号。for /. %%a in (*.avi) do ffmpeg -i "%%~na.avi" -ar 16000 -ac 1 "%%~na.wav"

 

     2、需要将ffmpeg.exe所在的目录加入到系统环境变量中,也可以不加,但是需要用绝对路径指定ffmpeg的位置。

     3、输入文件和输出文件路径都可以使用绝对路径来指定。

     至于ffmpeg参数的具体意义就不在这里赘述了,如果需要进一步了解,请看以下连接:

      ffmpeg批量转换脚本及选项说明:http://www.linuxbyte.org/ffmpeg-pi-liang-zhuan-huan-jiao-ben.html

  rmvb转VCD DVD批处理脚本:http://www.todo8.com/?p=282 

   windows下删除1天前的文件的批处理脚本程序:http://hi.baidu.com/genlly_gui/blog/item/054ea41279ebc172cb80c4a1.html

 

posted @ 2010-09-27 16:15 木子一叶 阅读(179) 评论(0) 编辑

2010年9月21日 #

2009年下半年也参加了一次考试,可惜报名时报成了系统架构设计师,硬着头皮去考了,上午没过。

2010年上半年终于报考了信息系统项目管理师,这个考着对自己对公司都还有点用处,可惜下午的案例分析没过。

两次考试,对我来说,论文似乎是不用担心的,但是还是在此记下备忘。

2009年下半年论文考的是:成本管理和需求管理;

2010年上半年论文考的是:软件可行性研究和范围管理。

 

个人预测2010年下半年的论文极有可能考:项目整体管理时间管理质量管理人力资源管理。 

posted @ 2010-09-21 14:37 木子一叶 阅读(536) 评论(0) 编辑

2010年3月12日 #

  最近在学习H.264编解码知识,上网搜了不少资料看,发现大多数中文资料中都缺少相应的图片,例如编解码流程图、编码模板等,这对加深理解是很有帮助的。木有办法,只好回去潜心阅读《H.264_MPEG-4_Part_10_White_Paper》,也整理出了几张相关的图片。

  1、H.264的系统编码流程图如下:

  2、H.264的系统解码流程图如下:

 

  3、帧内预测编码模板

4*4宏块亮度预测模式:

 

  4、帧间预测编码宏块划分方法

  ①8种宏块及子宏块的划分方法:

 

  ②亚像素预测模式:

 

posted @ 2010-03-12 15:00 木子一叶 阅读(973) 评论(0) 编辑

作为一个卓有成效的管理者,必须在思想上养成如下五种习惯:

1、卓有成效的管理者必须懂得如何有效地利用他们的时间。他们会利用自己所能控制的点点滴滴时间开展有条不紊的工作。

2、卓有成效的管理者重视对外界的贡献。他们不满足于埋头工作,比较注意如何使自己的努力产生必要的成果。他们一接手工作,不是立即一头钻进工作里去,也不是马上考虑工作的办法和手段,而是首先自问道:“别人希望我做出什么样的撑过来?”

3、卓有成效的管理者善于利用长处,不光善于利用他们自己的长处,而且也知道如何利用上司、同事及下属的长处。他们还善于抓住形势提供的机会做他们想做的事。他们不会把工作建立在自己的短处和弱点上面,也绝不会去做自己做不了的事情。

4、卓有成效的管理者知道如何将自己的精力集中在一些重要的领域里。这样一来,上佳的表现便能结出丰硕的成果。他们会按照工作的轻重缓急,制订出先后次序,重要的事先做,不重要的事放一放,除此之外也没有别的方法,不这么做必然会一事无成。

5、最后,卓有成效的管理者善于做出有效的决策。他们知道,要这样做首先要解决条理和秩序问题,这就是如何按正确的次序采取正确的步骤。他们也知道,有效的决策总是在不同意见讨论的基础上做出的一种判断,它决不会是“大家意见一致”的产物。他们认为在很短的时间内作出很多的决策,就难免会出现错误。机构真正需要的知识数量不多的决策,但它们却是些根本性的决策。组织真正需要的是正确的战略,而不是大轰大嗡那一套。

posted @ 2010-03-12 14:15 木子一叶 阅读(91) 评论(0) 编辑

2010年3月2日 #

 

实际工作中,对于回调函数一直是我不愿意去触碰的东西,一来由于被很多人搞得神秘兮兮的以为是很高深难懂的技术,二来在一般情况下通过互相包含类指针也能够解决问题,所以一直就不想去研究这个东东,最近一个项目中被经理逼着使用了回调函数,切切实实体会到了它的好处,代码中类之间的关系再也不那么错综复杂了,类A想告诉类B一个事情再也不需要在A中定义B的指针了,定义回调函数即可。下面把我理解的回调函数写出来,抛出一块砖,个中滋味要各位看客多实践才能体会出来。

1、基础知识

所谓回调,就是模块A要通过模块B的某个函数b()完成一定的功能,但是函数b()自己无法实现全部功能,需要反过头来调用模块A中的某个函数a()来完成,这个a()就是回调函数。如下图

 

①约定接口规范。在模块B必须约定接口规范,也就是定义回调函数a()的函数原型

这里回调函数原型的定义最好遵循typedef void (*SCT_XXX)(LPVOID lp, const CBParamStruct& cbNode); SCT_XXX是回调函数名称,lp是回调上下文,CBParamStruct是回调参数,一般由于要回调的参数不止一个,所以定义一个结构体比较方便。

②回调函数的注册。为了让模块B知道自己将要使用的回调函数,必须有一个函数或语句来注册回调函数

注册回调函数的定义遵循void RCF_XXX(SCT_XXX pfn, LPVOID lp); RCF_XXX是注册函数名,pfn是回调函数名称(是指针),lp是回调上下文。一般在A模块初始化完B模块后调用,将A模块中定义的回调函数地址赋值给pfn,lp赋值为this。 

③在模块A中要做的事情:

首先将回调函数声明成静态的,static void  CF_XXX(LPVOID lp, const CBParamStruct& cbNode); 函数的参数必须与B模块中回调函数原型的参数保持一致。

初始化B模块时,调用注册函数将模块A中声明的回调函数CF_XXX的地址传给pfn,即pfn=CF_XXX;(函数名称CF_XXX其实是个指针,指向回调函数的地址) 。

 2、举例

回调函数使用第一个场景:MFC界面编程。有这样一个需求,主界面左侧是一个树形列表,右侧是一个绘图区用来展示左侧列表项的内容,双击绘图区弹出框用来编辑。一般的做法是在绘图区对话框初始化时将主对话框或者树形列表的指针传进来,在绘图区对话框中处理双击事件,在事件出来函数中调用主对话框或树形列表的指针完成更新操作。这样主对话框类和绘图区对话框类之间就出现了互相包含的关系,回调函数这个时候就可以大显身手了,主对话框仅需要包含绘图区对话框的头文件和声明一个绘图区对话框的对象即可。具体做法是:在绘图区对话框中定义回调函数原型和注册回调的函数,并处理鼠标双击事件,在事件函数中发出回调通知。主对话框中按原型定义回调函数,在回调函数中完成树形列表的更新。

回调函数的第二个应用场景:网络编程。 在网络编程中,为了体现模块化,一般把通讯和数据处理划分开来,即通讯模块负责协议定义、数据收发,而数据处理模块只负责对收发的数据进行解析和打包,假如通讯模块开启了一个线程在持续地接收数据,这个时候问题来了,它通过什么手段把数据交到数据处理模块手中呢?每次收到数据,拿到数据处理模块的指针完成相关操作,这样有犯了两个类指针互相指的错误,也破坏了两个模块的独立性。使用回调函数这些问题都迎刃而解了,下面给出部分伪代码:

通讯模块
typedef void (*DataReceiveCBFunc)(ReceiveParam & recvParam);  // 回调函数原型定义

// 开始接收,数据处理模块调用,相对于注册回调函数
static BOOL StartReceive(DataReceiveCBFunc pfnData, LPVOID lpContext,……);
// 接收数据的线程,一收到数据就通知回调
static UINT TH_Receive(LPVOID lp);

 

数据处理模块
// 开始接收数据,开启监听线程,调用上面的StartReceive函数
int StartReceiveInfo(int nListenPort, std::string strLocalIP);
// 数据接收回调函数,被CUdpEx::TH_Receive()回调
static void RecvInfoCallback(ReceiveParam &recvParam);  
posted @ 2010-03-02 16:12 木子一叶 阅读(334) 评论(3) 编辑

2008年4月21日 #

摘要: 年轻男人必读100条阅读全文
posted @ 2008-04-21 16:45 木子一叶 阅读(57) 评论(0) 编辑

2008年4月16日 #

posted @ 2008-04-16 18:07 木子一叶 阅读(32) 评论(0) 编辑

2008年4月10日 #

摘要: c、c++,MFC笔试须知阅读全文
posted @ 2008-04-10 17:49 木子一叶 阅读(572) 评论(0) 编辑

2007年8月17日 #

摘要: VC++6.0中显示Windows位图阅读全文
posted @ 2007-08-17 16:11 木子一叶 阅读(2951) 评论(0) 编辑

2007年6月6日 #

摘要: 凸多边形最优三角剖分 动态规划算法 凸多边形判定阅读全文
posted @ 2007-06-06 18:13 木子一叶 阅读(1438) 评论(2) 编辑

仅列出标题  下一页