ffmpegで音楽ファイルの音量を調整する
ffmpegで音楽ファイルの音量を調整するには以下のコマンドを実行します。
ffmpeg -i input.mp3 -c:v copy -af volume=0.3 -y output.mp3
調整前の音楽ファイルがこちら
調整後がこちらになります
確かに音量が変化していますね。volumeで設定している0.3の部分が音量を調整する数字です。今回は0.3を指定しているので、音が0.3倍くらいになっているということです。あくまで元のファイルに対しての相対的な音量調整であり絶対的な音量調整ではないことに注意しましょう。またファイル名にスペースが含まれている場合はエラーになってしまいます。あらかじめスペースは取り除いておきましょう。
Pythonのsubprocessで実行する場合は以下のようになります。
#音量調整
import subprocess
import os
#変換対象
sound = 'sound/sound.mp3'
#ボリュームをどの程度調整したいか 例:半分にしたい →0.5
VolumeControl = '0.3'
subprocess.run('ffmpeg -i '+ sound +' -c:v copy -af volume='+ VolumeControl +' -y '+ os.path.splitext(sound)[0] +'_VolumeControl.mp3')
ちなみに、音楽ファイルだけでなく動画ファイルの音量調整も同じ方法で行います。
デシベルで設定する場合
FFmpeg の volumeフィルターでは、音量をデシベル(dB)単位で指定することができます。その場合、volumeフィルタにdBをつけた値を設定します。
ffmpeg -i input.mp3 -c:v copy -af volume=-10dB -y output.mp3
デシベルは、音の強さを表す対数単位です。例えば、音量を 10 dB 上げると、音量が約 3.16 倍に、逆に、音量を 10 dB 下げると、音量が約 0.316 倍になります。デシベル値の計算方法は
変化率=常用対数(log10)×20
となります。例えば、音量を2倍にする場合の計算は以下のようになります。2の常用対数(log10)は約 0.3です。0.3×20 = 6、つまり設定するデシベル値は 0.5 = 6dB となります。逆に音量を半分にする場合、0.5の常用対数(log10)は-0.3です。0.3×20 = 6、つまり設定するデシベル値は 0.5 = 6dB となります。
常用対数はPythonでは以下のように計算できます。
import math
db = format(math.log10(0.3)*20, '.2f')
print(db)
上記のコードを実行すると-10.46という結果になります。つまり、volume=-10.46dB(約10)を設定すると先ほどと同じ0.3倍ほどに調整することができます。
フォルダ内のファイルをまとめて処理する場合
最後に、まとめて音楽ファイルを変換する方法を紹介します。変換元のフォルダに音楽ファイルを入れておき、実行すると出力先フォルダに音量調節後のファイルが保存されます。
#フォルダ内の音楽ファイルを一括で音量調整
import subprocess
import os
import glob
#変換元フォルダ
target_dir ='sound/'
#変換先フォルダ
output_dir = 'VolumeControl'
#ボリュームをどの程度調整したいか 例:半分にしたい →0.5
VolumeControl = '0.5'
sounds = glob.glob(target_dir + '*.mp3')
print(sounds)
for sound in sounds:
print( output_dir + os.path.splitext(os.path.basename(sound))[0])
subprocess.run('ffmpeg -i '+ sound +' -c:v copy -af volume='+ VolumeControl +
' -y '+ output_dir + '/' + os.path.splitext(os.path.basename(sound))[0] +'_VolumeControl.mp3')
このコードではフォルダ内のmp3ファイルを取得して変換を行っています。ほかの拡張子のファイルを扱いたいときは10行目のmp3の文字を該当する拡張子に変換しましょう。
以上がffmpeg×Pythonで音量調整を行う方法でした。
コメント