多音频转换
ffmpeg基于命令行的批量音频转换
事情起因于我想在运动时不带手机就有设备记录我的运动数据以及运动过程可以听歌,所以我买了块智能手表,但是到手后发现这块智能手表并不支持flac格式的音频文件。这块表的价格还是1000+的三星手表,差评!此外,国补的迷惑操作使得我所购买的商品较于去年同期价格要高上近200。那我只好将我平常听的flac格式的音乐转换为mp3格式了,这对听歌体验来说要差好多,幸运的是运动过程人的神经是兴奋状态,而身体是负荷状态,音乐只是起到一定的缓解作用倒对存储格式的要求不需要太高。
起初还是有点头疼的,毕竟我的电脑上没有文件转换的软件,使用网页在线转换时间长还可能收取费用。纠结了一会,想起之前下载过ffmpeg,这玩意儿据说是音视频领域的瑞士军刀来着,所以过来试一试,想不到确实好用。命令行格式如下:
for %f in (*.*) do ffmpeg -i "%f" "%~nf.mp3"
(*.*):因为是批量处理,所以要给出范围,圆括号是Windows下批量处理范围的标识,通常是一个文件路径。第二个
*
标识文件格式。%f:这种批量处理的方法实际上一个一个地处理,它是单线程的。每读取一个文件就会将它标记为
f
,这个f
实际上是变量名,%
标识这是循环变量名。%~nf:这应该拆开来看。
%f
是一个循环变量名,~n
表示提取除去文件扩展名的文件名,比如1.flac则提取1。
我将手机上的音乐备份到D:\temporary_file\1这个文件夹中,它作为输入,转换的结果输出到D:\temporary_file\2文件夹。所以命令行如下:
for %f in (D:\temporary_file\1\*.flac) do ffmpeg -i "%f" -ab 320k -ar 44100 -ac 2 -map_metadata 0 -id3v2_version 3 "D:\temporary_file\2\%~nf.mp3"
上面的部分参数只是转换过程中的精度设置,着重强调以下两个参数:
-map_metadata 0:将源文件的所有元数据复制到输出文件中。若没有这个参数或者值为-1则表明不复制。
-id3v2_version 3:按照id3v2.3标准处理文件的元数据。
简单来说,元数据是用来描述数据的。在音频文件,或者具体点音乐中,除去音乐本身,即发出声音的数据以外的数据,如歌词,作者,专辑名等都可以认为是元数据。mp3中处理元数据多数用id3v2.3这一标准,兼容性良好。这两个参数要搭配使用,只复制不处理是不行。