ffmpegでフレーム補間する方法を詳しく解説します。変更したい動画のフレームレートを変更したり、30fpsから60fpsにフレームレートを増やしたりすることができます。具体的にはffmpegコマンドで、minterpolateオプションを使用します。
また、ffmpegでよく使うコマンド一覧やインストール方法については、以下が参考になります。
目次
ffmpegでフレームレートを変更する方法
まずは、動画ファイルのフレームレートを変更するコマンドを試してみたいと思います。以下の例では、動画ファイルinputMovie.mp4
を30fpsから60fpsにフレーム補間し、最後にoutputMovie.mp4
に出力するコマンドです。
bash1 2 3 4 5 6
| $ ffmpeg \ -i inputMovie.mp4 \ -vf "minterpolate=60:2:0:1:8:16:32:0:1:5" \ -c:v mpeg4 \ -q:v 1 \ outputMovie.mp4
|
コマンドが長くなるので改行していますが、各オプションは次の通りです。
オプション | 説明 |
-i | 入力ファイルの指定 |
-vf | エフェクトの内容を指定(後述) |
-c:v | 動画のコーデックの指定 |
-q:v | JPEG画像の品質(1〜32)。値が低いほど高画質になる |
ffmpegでフレーム補間する:minterpolate
続いてフレーム補間を行う例を解説します。ffmpegで60fpsにフレーム補間するには-vf "minterpolate=60"
を指定します。
その他のフレーム補間のオプションは、かなり複雑なのですが、以下の記事で解説されているような内容を指定することができます。
ニコラボ
ffmpeg でフレーム補間する minterpolate
minterpolateオプションによるフレーム補間について詳しく解説されています。
注意点としては、ffmpegのフレーム補間処理は非常に時間が掛かるので注意が必要です。
私の端末では30秒、30fpsの4K動画で60fpsのフレーム補間するために2時間かかりました(^^;)恐らく30fpsから120fpsに補間するのには8時間かかるかと思います。動画のサイズが小さければ、補間の処理時間も短くなりそうですが、かなり負荷が高いですね…。
ffmpeg -vf minterpolateで発生するエラー
また、一部の動画でフレーム補間を行おうとすると、以下のようなエラーが表示される事がありました。
bash1 2 3 4 5 6 7 8 9
| $ ffmpeg -i inputMovie.mp4 -vf "minterpolate=60:2:0:1:8:16:32:0:1:5" -c:v mpeg4 -q:v 1 outputMovie.mp4 (略) ffmpeg version 3.3.1 Copyright (c) 2000-2017 the FFmpeg developers built with Apple LLVM version 8.0.0 (clang-800.0.42.1) (略) [Parsed_minterpolate_0 @ 0x7fd01250c6a0] Failed to configure input pad on Parsed_minterpolate_0 Error reinitializing filters! Failed to inject frame into filter network: Cannot allocate memory Error while processing the decoded data for stream
|
手元のSony α7RIIの4K QFHD(3840x2160) 100p
で撮影した動画で、上記のようなエラーが発生しました。
こういったケースでは一度、前述したようなリサイズ処理を行った後で、改めてフレーム補間を行ってみると上手くいきました。パッドに原因があるようですが、詳細は分かりませんでした。