FFmpegで音程(ピッチ)を上げる/下げる
FFmpegで音程(ピッチ)を調節する方法です。
ややロボットっぽい音声にはなりますので、その点はご留意ください。
構文
MP3ファイルの音程を少し上げる例です。
ffmpeg -i 入力.mp3 -af asetrate=44100*130/100,atempo=100/130 出力.mp3
上記2箇所の「130」となっている部分を上下させます。この2箇所の数値は同じにしてください。
オリジナルの音程が「100」で、
一番高い音程が「200」で、
一番低い音程が「50」ですので、
その範囲で指定します。
上記は、サンプリングレートが「44100Hz」(44.1KHz)の場合の例です。
サンプリングレートは必ず入力ファイルと同じにしてください。
サンプリングレートが分からない場合は、MediaInfoOnlineのページを開き、「参照」をクリックし、ファイルを選択し、下部の結果の「Audio」の「Sampling rate」の値をご確認ください。「44.1kHz」なら「44100」にします。
ページに広告があるのでご注意ください。
「-af asetrate=〜,atempo=〜」の、
「-af」は、「オーディオのフィルタを指定する」という意味で、
「asetrate=〜」は、「出力サンプリングレートを指定する」という意味で、
「atempo=〜」は、「音声のテンポを指定する」という意味です。
「asetrate」により音程が変更されますが、音声の長さ(時間)も変更されてしまいますので、「atempo」で元の長さ(時間)に戻しています。
動画ファイルの場合は、構文の入力ファイルの後に「-c:v copy」というオプションを付けると、映像データをそのままコピーしてくれます。再エンコードしないので高速です。ただ、出力ファイル形式が違うと出来ない場合もあります。
オプションの解説
もう少し詳しいオプションの解説です。公式の翻訳の抜粋です。
asetrate
PCMデータを変更せずに出力サンプルレートを設定します。
これによりスピードとピッチが変化します。
デフォルトは「44100 Hz」です。
atempo
音声のテンポを調整します。
指定されていない場合、「1.0」となります。
テンポは「0.5〜100.0」の範囲でなければなりません。
「2」より大きいテンポでは、それらをブレンドするのではなく。いくつかのサンプルをスキップすることに注意してください。
何らかの理由でこれが問題になる場合は、必要なプロダクトテンポを達成するためにテンポの複数のインスタンスをデイジーチェーン接続することが常に可能です。
備考
FFmpegは仕様変更が激しいので、上記でうまく行かなくなった場合は、公式ドキュメントをご確認ください。
FFmpegフィルタのドキュメント
https://ffmpeg.org/ffmpeg-filters.html
FFmpegのドキュメント
https://ffmpeg.org/ffmpeg.html