推拉公式 U=EV/ID(转载+收藏)

加拿大科学家研究拖拉现象多年,最终提出“拖拉公式”U=EV/ID,用于计算克服拖拉习惯的成功率。该公式指出,个人完成任务的效率(U)与任务的成功期望值(E)和价值(V)成正比,与任务紧急度(I)和个人对拖拉的认识(D)成反比。
克服拖拉习惯几率有多高 看看公式就知道
  
  不少人有这样的坏习惯,做事拖拖拉拉,今日事要明日、甚至后日才能完成。加拿大科学家多年研究人们做事拖拉的原因,最后得出一个“拖拉公式 ”,计算一个人能够成功克服拖拉习惯的几率公式。加拿大卡尔加里大学商业学教授皮尔斯·斯蒂尔近期推出新作《拖拉公式:今日复明日》,在书中介绍了这个“ 拖拉公式”。
  
  斯蒂尔10多年前开始研究拖拉现象,找来250名学生作为研究对象。经过多年观察,他发现一个人是否拖拉、成功戒掉拖拉习惯的机会有多大皆有规律可循,从而得出一个数学公式U=EV/ID。
  
  在这个公式中,U代表效率,指个人完成预定任务的欲望值;U与E、V成正比,E代表对成功的期望值,V代表任务的完成价值;同时,U与I、D成反比,I是任务的紧急度,D是个人对拖拉的意识值。
   斯蒂尔在书中说,拖拉问题已经日趋严重。电脑游戏和个人日程管理的普及为人们提供了更多分心的机会,加上更多工作属于“个人构建”性质,人们可以不断重新制定自己的计划安排。
   斯蒂尔承认自己就常常因为玩电脑游戏而分心。根据他的研究统计,习惯性拖拉的人数比例高达20%。
   人们一直以来都认为拖拉的原因不是太过追求完美就是懒惰至极。然而,斯蒂尔认为这两种截然相反的看法都不对,实际上,拖拉的人有自己的“毛病”。
  
  他在书中说,比其他人相比,拖拉的人往往更加性格冲动、古怪善变,在关注细节、对他人负责等方面又不够尽职。
  
  习惯拖拉的人相信自己能够完成任务,而且很在乎自己能否完成。这一点完全不同于懒惰的人,他们根本就不关心任务能否完成,只是不想去完成。但这两种情况最后都有可能造成拖拉。
  
  普遍
  
  拖拉现象在学生中较为普遍。刚在英国伦敦大学学院取得博士学位的什洛·霍奇金森就是其中之一。她表示自己是典型的“学生综合症”,就像马克·吐温描写的那样,“能拖到后天的事情决不只拖到明天”。
  
  有一些职业更容易形成拖拉习惯。
  
  流行音乐家常常拖拉,因为他们总是想超过以前的成就。比如,美国乐队“枪炮与玫瑰”历时14年才完成一张专辑,而爱尔兰U2乐队的歌迷等待他们的新专辑也已有4年。
  
  作家也比较容易拖拉。其中就有以《追忆逝水年华》一书闻名的法国作家马塞尔·普鲁斯特。英国作家道格拉斯·亚当斯经常拖拉,他说自己喜欢那种已经误过的期限时间突然在脑海中“飞速闪现”的感觉。
  
  前伦敦市长肯·利文斯通8年前应邀开始写作自己的回忆录。当上周出版商问及进展时,他回答说:“我还在写呢。”

拖拉是为了使某样东东更完美~
而我却是拖拉拖拉,使事情更糟糕~
<think>好的,我现在需要帮助用户解决FFmpeg命令中出现的“Unknown function in w/h*(ih/2)”错误。用户已经提供了相关的引用内容,但根据对话历史,用户之前的问题和我的回答主要涉及scale2ref滤镜的使用以及变量作用域的问题。现在用户遇到了具体的错误,需要修正表达式中的语法问题。 首先,我需要回忆scale2ref滤镜的正确用法。scale2ref的作用是根据参考流的尺寸调整主流。用户之前的错误在于表达式中的变量作用域不明确,比如使用了未明确指定作用域的变量如w、h和ih。根据之前的回答,变量需要明确指定是主流还是参考流的属性,如main_w、ref_h等。 接下来,用户当前的错误信息是“未知函数”,这可能是因为FFmpeg将表达式中的某些字符错误解析为函数名。例如,表达式中的w/h可能被误认为是一个函数,而实际上用户是想进行除法运算。此外,运算符的优先级也可能导致解析错误,需要确保表达式中的运算顺序正确,可能需要添加括号。 然后,我需要参考用户提供的引用内容。引用[1]提到设置音视频编解码器参数,引用[2]涉及推拉流命令,但这两个引用可能与当前问题关联不大。用户的问题更多是关于滤镜表达式中的语法错误,因此需要专注于变量作用域和表达式结构。 接下来,我应该检查用户给出的错误表达式:“w/h*(ih/2)”。这里的w和h可能未明确是主流还是参考流的属性,应该替换为main_w/main_h或ref_w/ref_h。而ih默认指向当前输入流的高度,但在此上下文中可能需要明确参考流的高度,即ref_h。此外,运算符优先级方面,乘法和除法的顺序可能导致错误,添加括号可以明确运算顺序。 修正后的表达式需要明确变量作用域,例如将w替换为main_w,h替换为main_h,ih替换为ref_h,并确保使用引号包裹整个表达式。同时,检查是否遗漏了必要的括号,例如将w/h*(ih/2)改写为(main_w/main_h)*(ref_h/2),但可能更准确的表达式应该是根据用户之前的例子,例如main_w*ref_h/(main_h*2),这样可以避免运算符优先级的问题。 另外,用户之前的回答中提到的修正后的命令是使用scale2ref=w='main_w*ref_h/(main_h*2)':h='ref_h/2',这可能是一个正确的例子,应该参考这个结构进行调整。 最后,需要确保用户理解变量作用域的重要性,并提供调试方法,例如使用eval滤镜输出变量值,分步验证表达式是否正确。同时,提醒用户注意FFmpeg表达式中必须使用单引号包裹,避免特殊字符被shell解析。</think>### 分步解析与修正FFmpeg的`scale2ref`表达式错误 --- #### 一、错误根源分析 **错误命令片段**: ```bash scale2ref=w=w/h*(ih/2):h=ih/2 ``` **错误类型**: 1. **变量作用域缺失** - `w`/`h`未明确属于主流或参考流,需替换为`main_w`/`main_h`(主流属性)或`ref_w`/`ref_h`(参考流属性) - `ih`默认指向当前滤镜输入流,但此处应使用`ref_h`明确参考流高度[^1] 2. **运算符优先级混淆** `w/h*(ih/2)`未用括号明确运算顺序,FFmpeg表达式引擎可能将其解析为`(w/h)*ih/2`,导致逻辑错误 --- #### 二、修正方案 **修正目标**: 将主流宽度按参考流高度的1/2缩放,并保持宽高比 **正确表达式**: ```bash scale2ref=w='main_w*ref_h/(main_h*2)':h='ref_h/2' ``` **关键调整**: 1. **作用域明确化**: - `main_w`:主流的原始宽度 - `ref_h`:参考流的原始高度 - `main_h`:主流的原始高度 2. **数学规范化**: - 缩放公式:$$ \text{新宽度} = \frac{\text{主流宽度} \times \text{参考流高度}}{\text{主流高度} \times 2} $$ - 分母`(main_h*2)`通过括号强制优先计算 --- #### 三、完整命令示例 **应用场景**: 输入流`input0.mp4`(主流)需基于参考流`input1.mp4`的高度缩放 ```bash ffmpeg -i input0.mp4 -i input1.mp4 -filter_complex \ "[0][1]scale2ref=w='main_w*ref_h/(main_h*2)':h='ref_h/2'[out][ref]" \ -map "[out]" output.mp4 ``` **参数解释**: - `[0][1]`:输入流0(主流)和输入流1(参考流) - `[out][ref]`:输出缩放后的主流和未修改的参考流 - `-map "[out]"`:仅输出缩放后的主流 --- #### 四、验证与调试方法 1. **变量值输出** 使用`eval`滤镜实时打印变量值: ```bash ffmpeg -i input0.mp4 -i input1.mp4 -filter_complex \ "[0][1]scale2ref=w='main_w*ref_h/(main_h*2)':h='ref_h/2', eval=print('main_w=%.0f | ref_h=%.0f')" -f null - ``` 2. **分步验证** 先固定参数测试逻辑: ```bash # 第一步:固定参考流高度为720 scale2ref=w='main_w*720/(main_h*2)':h=360 # 第二步:替换为动态参数 scale2ref=w='main_w*ref_h/(main_h*2)':h='ref_h/2' ``` --- #### 五、关联问题扩展 1. **动态画中画实现** 结合`overlay`滤镜,将缩放后的主流叠加到参考流: ```bash ffmpeg -i main.mp4 -i ref.mp4 -filter_complex \ "[0][1]scale2ref=w='main_w*ref_h/(main_h*2)':h='ref_h/2'[scaled][bg]; \ [bg][scaled]overlay=x=W-w-10:y=H-h-10" output.mp4 ``` 2. **多参考流应用** 通过`split`滤镜生成多个参考流分支: ```bash ffmpeg -i main.mp4 -i ref1.mp4 -i ref2.mp4 -filter_complex \ "[1][2]concat[ref]; \ [0][ref]scale2ref=w='main_w*ref_h/(main_h*3)':h='ref_h/3'" output.mp4 ``` --- #### 六、错误对照表 | 错误表达式 | 修正后表达式 | 核心问题 | |--------------------|-------------------------------|------------------------------| | `w=ow/ih*2` | `w='main_w/ref_h*2'` | 使用废弃变量`ow` | | `h=ih/2` | `h='ref_h/2'` | 未明确参考流作用域 | | `scale2ref=w/h` | `scale2ref=w='main_w/h'` | 缺少引号包裹表达式 | --- ### 相关问题 1. 如何通过`scale2ref`实现视频尺寸的动态自适应? 2. FFmpeg表达式支持哪些数学运算符和函数? 3. 如何避免滤镜链中的变量作用域冲突? [^1]: FFmpeg官方文档关于变量作用域的说明 [^2]: FFmpeg表达式运算符优先级规范
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值