Windows Batch + FFMpeg 批量将 mp3 转为 ogg 格式

刚才需要将音乐转换为 ogg 格式以便能在欧卡中听歌,故做此记录

批处理的 for 循环

这里相当于一个 foreach 循环,关键词:for, in, do

for /R %v in (*.mp3) do echo "%v"

上述语句会对递归(/R)后发现的所有 mp3 文件执行 echo 文件名操作。

对于循环,这篇文章,可以参考。

批处理获得无扩展名的文件名

"%~nv"

其中 %v 是完整的 path,%~nv 就是所需文件名。

例子:

%v = C:UsersiDocumentsEuro Truck Simulator 2musicRising Star运命の轭.mp3
则 %~nv = 运命の轭

但是如果是递归目录,这样之后只能导出在一个目录。因此我们改用这种写法:

%r:~0,-5%

如果你对这种用法好奇,参考:What is the best way to do a substring in a batch file?

批处理一行写多个命令

&

ref

ffmpeg 转码

ffmpeg -i input.mp3 output.ogg

上述语句会把 input.mp3 转码为 ogg 格式,并保存为 output.ogg

写得比较好的是这篇文章,可以参考。

综合

由上,我们可以得到最终命令:

for /R %v in (*.mp3) do ffmpeg -i "%v" "%v:~0,-5%.ogg"

for /R %v in (*.mp3) do set r="%v"& ffmpeg -i "%v" %r:~0,-5%.ogg" -b:a 128k
for /R %v in (*.mp3) do set r="%v"& echo "!%r!"

最后,奉上 Python3 脚本

import os

path = r"C:\Users\i\Documents\Euro Truck Simulator 2\music\Rising Star"

files = []
for r, d, f in os.walk(path):
    for file in f:
        if '.mp3' in file:
            files.append(os.path.join(r, file))

for f in files:
    newName = f[0:-4]+'.ogg'
    print(newName)
    os.system("ffmpeg -i \"{0}\" \"{1}\" -b:a 128k".format(f,newName))

Comments

  1. Gazzz

    欧卡还行φ( ̄∇ ̄o) 买了方向盘了吗~

      1. pluvet

        方向盘感觉没必要,散心小游戏就不搞这么复杂了

发表留言

本站启用了垃圾评论检测插件,如果误删请联系我~