ffmpeg 批量转换 wav 为 mp3
ffmpeg 可谓是一个计算机领域的瑞士军刀,处理音视频真是无往不利。
Shell
如下是在 Linux / Mac OS 系统下使用 ffmpeg
转换 wav
为 mp3
格式的代码(确保系统中已经安装了 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
文件。
参考资料
- FFMPEG: Convert m4a to mp3 without significant loss
- ffmpeg批量转换wav到MP3
- How to get the list of files in a directory in a shell script?
- What is the simplest way to remove a trailing slash from each parameter?
上一篇: 拆分和合并 tar.gz 文件