サンプリング周波数を変えずにテンポとピッチを変える rubberband


今まではテンポ(再生速度)を変えるには atempo を、ピッチ(高低)を変えるには asetrate を使っていたが、rubberbandasetrate で変わる周波数を変えずにピッチとテンポを変えることができる。

rubberband は別途ライブラリをインストールしないと使えないのと、現在は 64bit に未対応である。

標準フィルタを使う場合
【ffmpeg】倍速再生できる動画にエンコードする

基本コマンド

2倍速再生にする(映像は2倍速にはならない)
ffplay input -af rubberband=tempo=2

映像も2倍速再生にする
ffplay input -vf setpts=1/2*PTS -af rubberband=tempo=2
ffplay input -vf setpts=1/2*PTS -af atempo=2

公式ドキュメント:FFmpeg Filters Documentation : rubberband

インストールする

$ git clone git://github.com/lachs0r/rubberband rubberband
$ cd rubberband
$ make && make install

これでインストールできるが、Makefile の冒頭に PREFIX でインストール場所を指定できる。XhmikosR’s Builds を使っている場合は cc がなくエラーが出るので MSYS/mingw/bin/gcc.exe を MSYS/mingw/bin/cc.exe にコピー&リネームする。

ffmpeg の configure オプションには
--enable-gpl --enable-librubberband --pkg-config-flags="--static" をつける。

インストールしたライブラリを適宜移動して rubberband.pc の上部を適宜以下のように書き換える

prefix=/mingw/i686-w64-mingw32
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

ffmpeg と ffplay のバイナリサンプル:ffmepg_3.3_rubberband.7z

オプション

詳細にオプションが指定できるが説明は省略。

  • tempo[double]
    テンポ(音声再生速度)指定
    既定値:1
    範囲:0.01 から 100 まで
  • pitch[double]
    ピッチ(音の高さ)指定
    既定値:1
    範囲:0.01 から 100 まで
  • transients[int]
    • crisp。既定値
    • mixed
    • smooth
  • detector[int]
    • compound。既定値
    • percussive
    • soft
  • phase[int]
    • laminar。既定値
    • independent
  • window[int]
    • standard。既定値
    • short
    • long
  • smoothing[int]
    • off。既定値
    • on
  • formant[int]
    • shifted。既定値
    • preserved
  • pitchq[int]
    • quality。既定値
    • speed
    • consistency
  • channels[int]
    • apart。既定値
    • together

追記
バイナリを配布した。2017年4月20日

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)