批量压缩歌曲

有时候听歌。好像停留在了某个阶段不再成长了,所以绝大多数歌曲对我都太新。像刘德华《忘情水》,还有孙燕姿(非AI的那位)《绿光》,老狼《同桌的你》《白衣飘飘的年代》《B小调雨后》,在我听来都是非常新的歌,才听到没多久的感觉。相应的,更新的歌由于基本没听过,就都感觉特别陌生。嗯,就是上古戏曲古董突然听到五四音乐的感觉,有点排斥。所以,当老朋友给我一大批听起来非常熟悉亲切的老歌的时候,我的愉悦可想而知。这旋律,这钢琴或提琴的伴奏,这……原来这首歌的首唱是他/她啊,不如后来谁谁唱得好,怪不得没流行。

过了一段时间,硬盘空间又告罄。删了一段时间各种宝物,今天轮到这些歌了。

2.5G空间可供回收。或者移到移动硬盘,不过那样可能得很久之后才能听了,因为不是顺手就能做的,可能就不做了。删除之前,突然注意到文件扩展名是 .WMA,每个文件10M左右。MP3就可以啊,虽然WMA采样率可能更高,奈何我的音箱以及耳朵没有多么优秀,白白浪费。

压缩一下。

第一步 改名,去空格

为了后续转换能成批操作,我查看了文件名。有的文件名中存在空格,这会要求转换命令中作为文件名的参数必须外加引号括住。需要额外的工作,不如统一把空格去除。

例如:

东北师大校歌 – 老年合唱团版 .wma

改名为

东北师大校歌–老年合唱团版.wma

操作的方法是 用 Total Commander 全选文件,然后 File | Multi-Rename Tool。左上红框中是目标文件,[N]表示原名不增加日期、时间、序号之类。右上红框,Search for中有个 空格,这样就把所有空格替换为 无。

有些同学在描述这一步的时候可能会称为“预处理”——凡是正式行动之前的都是预处理,如果有若干步需要区分,就分别叫 预处理1,预处理2,预处理3。

第二步 遍历文件

Total Commander据我所知不提供 选中以后提交给某个工具处理 这样的功能,还得用 shell 之类的工具,才能指定这200多个文件都需要操作。即 遍历,这些被遍历的文件都执行相同的操作(题外话,在STL和SICP中也有类似思路)。

我隐约记得 linux 下几种 shell 如何遍历文件,但是我的座机 bash shell 下默认不搜索 ffmpeg 这个转换工具。用windows的批处理吧,我语法不熟悉,搜索。

用 bing,关键词:bat 遍历文件。

第一条命中。

写日志,避免以后引用或要查找的时候忘了。

这条指令与我记忆中长得非常像,差不多。(切手指长小段焯水晾干)备用。

第三步 压缩 格式转换

优秀工具ffmpeg有这个功能,语法我记不清了,猜测是

Ffmpeg -i 输入文件.wma 输出文件.mp3

压缩比,比特率,采样率之类的都用默认值。

差不多,(勾芡大火爆炒出锅晾凉)备用。

第四步 技术原型试验

我才不会直接在任何宝物上实施写操作。万一写错了,把宝物写坏了写没了怎么办。打游戏时凡重大事件以前,必save以备load。

在当前目录下随便建个目录,起名 1 (随便起的,一会儿就删除)。把十几首歌曲复制(不是搬移)进去。

在目录1下建个批处理文件,名字是 1.bat(随便起的,一会儿就删除)。1.bat的内容如下。

for %%i in (*) do ( ffmpeg -i %%i %%i.mp3)

命令行下(在Total Commander按ctrl-下键),在目录1下运行1.bat。不到一分钟,mp3文件生成了。播放,效果不错。原有wma仍在。

以上说明技术原型验证通过。

第五步 操作

把所有wma文件复制(不是搬移)到目录1(这是操作台)中。

命令行下,在目录1中执行1.bat。等。

第六步 估算

从下图中可以看出,这首歌典时长将近4分钟,转换速度为50倍速左右。

C:\Users\young\Documents\WeChat Files\wxid_mkn03idldug522\FileStorage\Temp\1686816594230.png

歌典大约250首,需要转换多久呢?

每首转换需要 4分钟*60秒/分钟/50倍速,约4秒左右。

250首*4秒/首,合约16分钟。

已转换得到的mp3每首大小约3~5M,与经验中的每分种1M相符。原WMA文件每首10M左右,这样压缩比约0.3~0.5。

还有十多分钟,正好写博客。

十多分钟后转换结束,时间估算正确。MP3占用文件1M,原WMA约2.5G,压缩比0.4,估算准确。

第七步 清理

不,不叫做 后处理。

把目录1递归删除。

把WMA文件搬移(复制后删除原文件)到移动硬盘,在日志中记录目标硬盘的卷标。

把mp3文件都移到 "music 一人一首成名曲 252首 mp3"目录下。

Leave a Reply

Your email address will not be published. Required fields are marked *