ffmpeg : set fps

はじめに

oFのofVideoPlayerを使う時、再生する動画によってCPU占有率が大幅に異なる現象が発生。vjなど、Realtime operationをする際、各Processは、30%からmaxでも40%くらいに抑えたいので、動画再生にCPU占有率が奪われるのは避けたい所です。

調査の結果、元動画のFrameRateによって、CPU占有率が異なることがわかりました。

ofSetFrameRate(30);

とすれば、元動画に関わらず同じ動作になると思ってた。と言うことで、素材となる元動画を予め、例えば30fpsなどに落としておきたいことが多々あります。

今回は、そのためのtips.

How to

ffmpegを使います。-r optionを使ってfpsを設定しますが、-rは、挿入位置によって意味が異なる(input or output)ので注意が必要です。

私の場合、outputのfpsを変更したいことが多いので、だいたい以下の感じです。

ffmpeg -i source.avi -s 1280x720 -aspect 16:9 -r 30 dest.mp4

変換してやると、無事 ofVideoPlayer を使ったprocessのCPU 占有率も落ちました。

ffmpeg -r option (公式Document)

> 入力オプションとしての r

入力ファイルの前に指定する。総フレーム数はそのままに1秒あたりのフレームレートを指定するので、オリジナルよりフレームレートが少なければ映像時間が長く、多ければ映像時間が短くなる

コマンド例

ffmpeg -r 30 -i input.mkv -vcodec utvideo output.mkv

> 出力オプションとしての r

入力ファイルの後に指定する。オリジナルよりフレームレートが少なければ間引く、多ければオリジナルのまま。動画時間は変わらない

コマンド例

ffmpeg -i input.mkv -r 30 -vcodec utvideo output.mkv

参考URL

* FFMPEG でのフレームレート設定の違い
上記URLにある、-r 意外のoption(framerate=30 など)は、ffmpegにはじかれてしまった。version違いだろうか?


もしよろしければ、サポートをお願いします! 頂いたサポートは、Creatorとしての活動費に充てさせて頂きます。