使用 ffmpeg 将音频文件批量转换为指定的比特率,但前提是它们的比特率高于该比特率

使用 ffmpeg 将音频文件批量转换为指定的比特率,但前提是它们的比特率高于该比特率

我的目录中有一堆音频文件,有些是 128Kbps,有些更高。

我想将比特率高于128Kbps的转换为128Kbps以节省空间。我尝试编写一个 shell 脚本来执行此操作:

#!/bin/bash

FILES="*.mp3"

for F in $FILES

do
newname=`basename "$F" -smaller.mp3`
ffmpeg -i "$F" -acodec libmp3lame -ac 2 -ab 128k -ar 44100 "$newname.mp3"

done

但它也会转换已经是 128Kbps 的文件,因此需要更多时间才能完成。

我如何检查文件的比特率是否高于 128Kbps,并仅在高于 128Kbps 时才将其转换为 128Kbps。

答案1

使用ffprobe

#!/bin/bash

for file in *.mp3
do
    brate=$(ffprobe "$file" |& grep -Eo 'bitrate: [0-9]+' | cut -d' ' -f2)
    if [[ "$brate" -gt 128 ]]
    then
        newname=$(basename "$file" -smaller.mp3)
        ffmpeg -i "$file" -acodec libmp3lame -ac 2 -ab 128k -ar 44100 "${newname}.mp3"
    fi
done

相关内容