実は私、最近MineCraftの実況動画とか生放送とか見るのにはまっていて、何人かの投稿者を継続して見ています(めいさん、keiさん、きゆみやまさん、じゃりみちさん、てりぃさん等)。
そのなかにミッカさんという投稿主さん、スペランカーでスカイブロック侵攻の人といった方が伝わるかもしれませんが、が居ます。
その方の生放送を見ていて、「倍速編集時に音が高くなるのをどうにかできないか?」という話になり、ぐぐって初めて私は「音程の調整」というプラグインを知りました。
その後いろいろありながら、拡張編集の倍速の限界である8倍速に「音程の調整」プラグインが対応しました。というわけで使い方やらを書いていきます。使い方がちとトリッキーなんだよね、紹介せざるを得ないよね。
導入方法
- http://milk-tea.myvnc.com/blog/adiary.cgi/0192
にアクセスし、
以下から音程調整プラグインをダウンロードします。
PitchControl.zip - ダウンロードしたzipを解凍する
- aviutlのプラグインフォルダに入れる
注意事項
- このプラグインは出力(エンコード)するときに効果を書けます。編集中はプラグインの効果を感じることができません。
しかし、下記の手順を守れば正しく調整できます。 - 作者様曰く
x264guiExを使用してMP4ファイルを出力する場合は、qaac/refalac (AAC/ALACエンコーダ)が必要です。AviUtilで音声速度を変更するとAACの規格外の周波数になります。
このため周波数変換に対応しているAACエンコーダーが必要となります。
NeroAacEncを使用すると出力時にエラーになります。
使用方法(拡張編集無使用)
ここでは1.5倍速編集をします。数値は適当に読み替えてください。
- まずは普通に動画を読み込みます。
この時読み込んだ映像が正しく再生されるか確認して下さい。 - 「設定」→「フレームレートの変更」で「20fps <- 30fps (2/3)」を選択します。
- 「編集」→「再生速度の情報を変更」を選択します。
入力枠の下の数値が読み込んだ動画の情報です。これの1.5倍の値を入力します。
- ようやく本題です。
「設定」→「音程の調整の設定」で
150と入力します。
チェックを入れるのをお忘れなく
- あとは出力して終わり。上記注意事項をよく見てください。
使用方法(拡張編集無使用)
ここでは4.0倍速編集をします。数値は適当に読み替えてください。
- まずはふつーに読み込みます。
-
- 「フィルタ」→音程の調整のチェックが外れているか
- 「設定」→「フレームレートの変更」→なし、が選択されているか
- 「フィルタ」→音程の調整のチェックが外れているか
- 普通に動画を分割して倍速編集する。
- ようやく本題。
タイムライン右クリック→「フィルターオブジェクトの追加」→音程の調整
をクリック。
ダイアログが出てくるが、ここでは設定できないので要注意!
- フィルターオブジェクトの長さを倍速編集部分に合わせる。
- 「設定」→「音程の調整の設定」で
400と入力し、必ずチェックを外します。
拡張編集のダイアログではなく、本体側の設定で数値を指定するのがポイントです。
Infomation for Developer
作者様のブログでのやりとりを要約して、自分の見解や予想を混ぜて下記に記します
入力された「速度」パラメーターが内部でどう処理されているか、ですが、作者様曰く
音程変更のフィルタに入力する数値はセントという単位です。
セントは音程を示す単位で、1オクターブが1200セントと定義されています。
使用してる音程変更フィルタの仕様では-1200~1200セントで音程の変更ができます。
(中略)とりあえず2倍速再生までは正常に対応できる・・・と言うことになります。
とりあえず上記の理論なんですけど、-1200以上の値を設定しても意外にも動作してしまっています。
それで、具体的にどうやってセントに変換しているか、は、教えていただいたソースコードを見ることにしましょう。
filter.h(AviUtl SDK for AviUtl version 0.99i4 以降)
typedef struct { //前略 int *track; //トラックバーの設定値郡へのポインタ (AviUtl側で設定されます) //後略 } FILTER;
source.cpp(Pitch_Control_003)
FILTER* fp; //中略 int nPitch = 0; double fRate = (double)fp->track[0] / 100.0; if(fRate >= 1.0 && fRate <= 1.5) { nPitch = ((fRate - 1.0) / 0.5) * -800; } else if(fRate > 1.5 && fRate <= 2.0) { nPitch = (((fRate - 1.5) / 0.5) * -400) - 800; } else{ nPitch = (int)(-1734.0 * log(fRate) + 1.9172110909451); }
つまりどうなっているかというと、X = 再生速度 / 100, Pitch = セントと定義すると、
- X < 1.0
- Pitch = -1734 logeX + 1.9172110909451
- 1.0 =< X =< 1.5
- Pitch = -1600(X - 1)
- 1.5 < X =< 2.0
- Pitch = -800(X - 1.5) - 800
- 2.0 < X
- Pitch = -1734 logeX + 1.9172110909451
となっています。ここで下のグラフを見て欲しいのですが、
1.0 =< X =< 2.0 の範囲で、プログラムでは1次式になっていますが、これはlogの式の近似式ではないか、と予想できます。
リンク
- [AviUtl]AviUtlで倍速ビデオを作成する方法
http://milk-tea.myvnc.com/blog/adiary.cgi/0155 - [AviUtl]AviUtlで倍速ビデオを作成する方法(拡張編集)
http://milk-tea.myvnc.com/blog/adiary.cgi/0192 - AviUtl_Pitch_Control_002_calc.xlsx
https://1drv.ms/x/s!Aq2AEiq89cYUpCIo21zZCDdJJoy-