栏目介绍
「我的自动化」是 Power+ 的一个新栏目,每期会邀请一位 Power User 来介绍他们的效率工具里都装了啥。
2017 年夏天毕业后,我来到一个高架桥项目部工作,职务是技术员(施工员)。参加工作这半年,我手头的许多工作都使用了自动化的流程来完成,效率提高了很多。这篇文章相当于是对自己工作半年以来,自动化方面的总结,并不一定具有普适性,但希望能给大家一些启发。
一、利用 Workflow 做施工记录
工地上每天干的活儿,都需要记录到施工日志里,后续需要整理、存档。同事们多数用大脑,或笔记本在工地上进行记录,回到办公室再抄写一遍。我总感觉用脑子记会有遗漏,用笔记本在现场进行记录效率不高,后续整理也不方便。我管理的这一片工作,种类较多,但工作内容都相对比较固定,最终我决定用 Workflow 来进行施工日志的记录。
上图是我记录好的一条施工日志。拿图中的「中央分隔带混凝土浇筑」来说,每天浇筑的部位肯定是会变化的,所需的混凝土方量也不同,参与施工的工人人数,大多数时候都是一样的,偶尔可能会有变化。施工所需要的工具(振捣棒)也不会变化,记录时间直接让 Workflow 获取当前时间。因此,只需要把这些会发生变化的部分在 Workflow 中当作变量,依次输入即可。这些变量都是数字,因此 Input Type 选择 Number 在会比较合适,通知中心内也能够直接输入,无需跳转至 Workflow 主程序。
如果想要一次添加多条记录,在 Workflow 开始处加一个 Repeat 就行。最终将一条或多条记录 Append 到 Drafts 的指定条目中即可。
最后的运行效果如下图:
二、快速分享联系人信息
工作中经常需要把张三的联系方式告诉王五,或者需要把张三、李四甚至更多人的号码告诉王五,而张三、李四可能有一个或多个号码。直接对通讯录截图后发送过去,是极其不礼貌的行为,而一个个复制姓名、号码又十分麻烦。用 Workflow 配合其他几样工具,就能很方便得解决上面这一痛点。
1. 快速定位联系人
先来看看我的通讯录中单条联系人信息的格式。重点在于 ZJL 这一条目,它是联系人姓名拼音声母的缩写,我将它填写在 Nick Name 昵称 这一条目中。有了这个条目,只需输入几个字母,就能够快速定位到某个联系人。
注意,为联系人添加这一条目后,通讯录中会默认显示联系人的昵称,有时会带来不便。想要关闭这种显示方式,需要进入系统设置,通讯录,短名称,关掉首选昵称这一项。
为几百甚至上千个联系人添加拼音声母缩写,是件极其复杂的事情,好在有一款软件能帮我们批量完成此事。这款软件叫做 Phonetic Contacts,前两年也上过少数派编辑推荐的榜单。不过我没有真正使用过这款 App, 我每一条联系人信息都是自己手动修改的。这款 App 具体如何使用,请看少数派的相关文章。 2. 获取指定联系人电话号码
通过姓名的缩写,已经能做到快速定位指定的联系人,下一步需要做的就是,提取联系人的电话号码等信息,并整合在一起。这一步可以用 Workflow 实现。先来看看我们最终想要实现的成果:
整个流程如下:先将所需联系人的姓名拼音通过 Launch Center Pro 输入到剪切板,比如 ZJL(周杰伦),再运行 Workflow 获取对应联系人的电话号码,最终将姓名、号码整合到一起,复制到剪切板上。
要同时提取多个联系人的信息,只需把每条关键字分割开,逐一进行处理。把 Nick Name 设置为过滤条件,就能快速定位到指定联系人。当然也可能出现 Nick Name 相同到情况,比如 周杰伦 和 赵江路 的缩写都是 ZJL, 此时只需要加一个判断条件,弹出列表进行供手动选择。
获取到联系人信息后,再逐一进行处理,把其中的姓名、电话号码抽取出来,整合成固定的格式,最后复制到剪切板,粘贴到任意通讯软件中即可。
三、使用 VBA 批量处理 Excel 文档
在施工过程中,对于做完的分项工程,我们需要用(Windows 操作系统下的) Excel 制作评定表进行评定。而同一个分项工程中,评定的内容都是相同的,仅仅是部位不同,如下图:
注意看上面截图中的 Sheet 1, 这里面存放着供 VBA 调用的一些临时数据,后面会讲到。
再注意看工程部位,本例中需要从 PM97 一直排到 PM 135。也就是说需要有 39 个工作表,工作表中「工程部位」后面单元格中的数字需要依次增大,同时,每个「工作表的名称」需要以工程部位后面单元格中的数字一致。工作表中其他单元格中的内容则不变。
复制工作表很容易,Ctrl 加鼠标拖动就能完成。但一个个去更改工作表名称,以及单元格中的内容,单纯使用人力来完成,是非常费事的。如果用 VBA 来进行批处理,就极其简单了,一秒钟就能完成全部操作。
1. 准备工作
在正式使用 VBA 进行批处理之前,第一步要做的,就是在 Sheet 1 中输入供 VBA 调用的临时数据。本例中是需要用自动输入工程部位,那就先把所有的工程部位列出来,如下图:
第一列是 PM, 在我们这个工程项目中代表着主线高架桥,其他情况下,可能变成 PJDS, PJDX 等不同的代号;第二列则是墩号,从 97 开始一直到 135; 第三列则是用符号 & 把前面的两列组合起来,形成 PM97 这样的数据。
第二步要做的则是,复制出多个工作表,后续 VBA 程序就会在这些预先准备好的工作表的指定单元格内,输入指定的数据。本例中需要用到 39 个工作表,使用 Ctrl 加鼠标拖动就能完成复制的操作。
2. 使用 VBA 进行批处理
先放上这次需要用到的 VBA 代码:
Sub 替换单元格并重命名
Dim i&
For i = 2 To Sheets.Count
Sheets(i).Cells(3, "c") = Sheets(1).Cells(i, 1)
Sheets(i).Cells(3, "d") = Sheets(1).Cells(i, 2)
Sheets(i).Name = Sheets(1).Cells(i, 3)
Next
Sheets(1).Select
End Sub
下面解释 VBA 代码的意思。
For i = 2 To Sheets.Count 指的是从数字 2 开始执行循环,一直到「工作表总数」为止。本例中算上存放临时数据的 Sheet 1, 一共有 40 个工作表。
Sheets(i).Cells(3, "c") = Sheets(1).Cells(i, 1) 指的是,从存放临时数据的 Sheet 1 的第 1 列,第 i 行,取出数值,放到 Sheet i 的 C3 单元格中。当 i 等于 2 时,就是把 Sheet 1 工作表第 1 列,第 2 行的 PM, 放到 Sheet 2 中的 C3 单元格内。
Sheets(i).Cells(3, "d") = Sheets(1).Cells(i, 2) 指的是,从存放临时数据的 Sheet 1 的第 2 列,第 i 行,取出数值,放到 Sheet i 的 D3 单元格中。当 i 等于 2 时,就是把 Sheet 1 工作表第 2 列,第 2 行的 100, 放到 Sheet 2 中的 D3 单元格内。
Sheets(i).Name = Sheets(1).Cells(i, 3) 指的是,从存放临时数据的 Sheet 1 的第 3 列,第 i 行,取出数值,把 Sheet i 的名字命名为此数值。当 i 等于 2 时,就是把 Sheet 1 工作表第 3 列,第 2 行的数值 PM97 取出来,把 Sheet 2 命名为 PM97;。
Next 表示执行下一个循环。
Sheets(1).Select 表示执行完上面所有循环后,选中第一个工作表,也就是存放临时数据的那个表,便于稍后删除此表。
具体实现的效果如何,下载下面这个 Excel 文档,运行一下就知道了。
四、使用 ffmpeg 配合批处理批量转换视频
同事发了一些教学视频给我,而这些视频都采用 wmv9 编码并使用 avi 进行封装,因此无法在 iOS 或者 macOS 设备上进行硬解码。其结果就是,播放时快进快退不够流畅,CPU 占用率高,耗电量大。我决定将这些教学视频转换为 iOS 和 macOS 可以硬解码的格式。
市面上的视频转换软件百花齐放,我最终决定(在办公室的 Windows 电脑上)使用 ffmpeg 来完成这项工作。因为大多数视频转换软件就是 ffmpeg 套了个 GUI 的壳子,而 ffmpeg 使用命令行来进行操作的方式,让我有种很靠谱、一切尽在掌握的感觉。如何下载安装 ffmpeg 可以去他家官网看看,这里就不再赘述。 1. 分析命令
我想许多非 IT 行业的朋友看到命令行就会产生抗拒心理,但将每条命令分析清楚后,一切就了然了。本例中使用到的 ffmpeg 命令其实是非常简单的:
ffmpeg -i G:\学习视频1.avi -c:v libx264 -crf 23 -c:a aac -b:a 128k G:\学习视频1.mp4
ffmpeg -i 指的是调用 ffmpeg 并自定义参数。
G:\学习视频1.avi 表示原始视频的文件路径。
-c:v libx264 表示使用 libx264 对视频进行编码,它所生成的 H.264/MPEG–4 AVC 编码格式,能够被市面上主流的智能手机及电脑硬解码。
-crf 23 crf 指的是 Constant Rate Factor, 后面的数字 23 表示最终输出视频的质量。这个数字的范围是 0–51, 默认值是 23。51 表示最终视频质量最差,文件体积小;0 表示最终视频质量最好,文件体积最大,转码所需要的时间更多。经过我的多次尝试,用默认值输出的视频质量和体积都是比较均衡的。使用这个参数的缺陷在于,无法指定最终输出视频的码率,以及文件尺寸。
-c:a aac 表示使用 aac 对音频进行编码。
-b:a 128k 表示音频码率设置为 128kb/s。128k 这个数值可以根据原始视频的音频码率来进行一些调整。
G:\学习视频1.mp4 表示最终视频的输出目录和封装格式。
这么分析一下,这条命令的含义应该能够理解了。
2. 批量转换视频
上面那条命令可以直接运行,但教学视频有很多个,逐一把学习视频1中的 1 改成 2, 3, 4 也很费事的,我决定使用 Workflow 为每一个视频生成一个专门的 .bat 批处理文件,双击一下就能转换指定的视频。
批处理文件 .bat 的内容如下:
@echo off
cls
ffmpeg -i G:\学习视频1.avi -c:v libx264 -crf 23 -c:a aac -b:a 128k G:\学习视频1.mp4
pause
清屏后执行前面解释过的那条 ffmpeg 命令,视频转码完成后会在 CMD 窗口中显示「单击任意键以继续」。
Workflow 要做的就是把 学习视频1 中的 1 改成 2, 3, 4 并保存为 .bat 文件。
整个 Workflow 也很简单,依次生成从 1 开始的数字,将命令中文件名的序号替换掉,保存为 .bat 文件,最终将所有的 .bat 文件打包为压缩文件,通过 QQ 等通讯软件发送到 Windows 电脑上。
在 Windows 电脑上双击运行批处理,效果如下图:
CMD 窗口中会实时显示显示转码进度和速度,最终转码完成后,会提示「单击任意键以继续」。
我个人日常生活中用的是 Mac, 因此也将上面的 ffmpeg 命令做成了 LaunchBar 动作。选中原始视频后,⌘ Space 召唤出 LaunchBar 主界面(不是 Instant Sent),输入 ffmpeg 再回车运行即可。由于水平有限,后续没有继续优化,导致这个动作存在的问题是,一次只能选择、转换一个视频。
结语
以上这四套自动化流程,为我这半年的工作提升了不少效率。由于水平有限,虽然这些自动化流程都能正常运行,但对于其中一些软件的技术要点可能理解的不到位,请各位指正。最后再推荐一款 Windows 平台批量重命名的软件,Bulk Rename Utility, 可以调整的参数很多,上手很简单,处理大量文件时也帮助了我很多。