ffmpegを使用してオーディオファイルを指定されたビットレートにバッチ変換しますが、そのビットレートより高い場合にのみ可能

ffmpegを使用してオーディオファイルを指定されたビットレートにバッチ変換しますが、そのビットレートより高い場合にのみ可能

私のディレクトリには多くのオーディオファイルがあり、いくつかは128Kbpsで、いくつかはより高いです。

スペースを節約するために、128Kbpsより高いビットレートを128Kbpsに変換したいと思います。そのためにシェルスクリプトを書いてみました。

#!/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

関連情報