ffmpeg 批量转换 wav 为 mp3

2.7k 技术 发表评论

ffmpeg 可谓是一个计算机领域的瑞士军刀,处理音视频真是无往不利。

Shell

如下是在 Linux / Mac OS 系统下使用 ffmpeg 转换 wavmp3 格式的代码(确保系统中已经安装了 ffmpeg)。

#!/bin/sh

if [ ! -n "$1" ]; then
    echo "Please enter dir!"
    exit 1
fi

for i in "$1"/*.wav
do
    ffmpeg -i "$i" -codec:v copy -codec:a libmp3lame -q:a 0 "${i%.wav}.mp3"
    #rm -rf "$i" # Remove original wav file
done

将以上文件保存为一个 sh 文件,例如:convert-wav-to-mp3.sh,就可以使用了:

sh convert-wav-to-mp3.sh my-wavs/

命令执行完毕后,my-wavs目录下面的所有 wav 文件就转换成 mp3 格式了。

如果希望自动删除源 wav 文件,删除倒数第二行的最前面的注释即可。

    rm -rf "$i" # Remove original wav file

参数说明

  • -i: 输入文件路径
  • -codec:v copy:输出文件的参数尽量拷贝输入文件的参数,确保一致
  • -codec:a libmp3lame:使用 libmplame 编码器编码 mp3
  • -q:a 0:输出最高质量,0最高,9最低
  • ${i%.wav}.mp3:删除文件名末尾的.wav,然后在结尾加上.mp3

Python 方式

另外一种就是通过 Python 调用 ffmpeg 方式(因为 python 迭代目录更加方便),如下是代码:

import os
import sys

if len(sys.argv) <= 1 or not os.path.isdir(sys.argv[1]):
    print("Please enter correct directory")
    sys.exit(1)

g = os.walk(sys.argv[1])
for root, dirs, files in g:
    for f in files:
        if f.endswith(".wav") and not f.startswith("._"):
            input_filename = os.path.join(root, f)
            output_filename = os.path.join(root, f.replace(".wav", ".mp3"))
            print("=============")
            command = "ffmpeg -i '{}' -codec:v copy -codec:a libmp3lame -q:a 0 '{}'".format(input_filename, output_filename)
            print(command)
            os.system(command)
            os.remove(input_filename)

这个方式的好处就是,可以迭代制定目录下所有的 wav 文件,转换成 mp3,然后删除源 wav 文件。

参考资料

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

昵称 *