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としての活動費に充てさせて頂きます。