7 FPSで撮影した画像から30 FPSでビデオをエンコードする方法


21

私はビデオエンコーディングについてまったく知識がなく、OpenGLで記述されたアプリケーションがあり、生成されたフレームをpng画像に保存しています。私のアプリのフレームは7 FPSであり、それらからビデオを作成しようとしています。

その目的のために、私はこのようにffmpegを使用します

ffmpeg -framerate 30 -i img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4

これはこのサイトから取られたものですが、30 FPSでアニメーションを表示するビデオを作成することが可能かどうか疑問に思っていましたか?



-framerateパラメータを微調整するだけで、目的の結果が得られます。
nullptr

回答:


21

私は同じことをするために以下のコードを使用しています。

ffmpeg -framerate 30 -i img%03d.png -c:v libx264 -pix_fmt yuv420p -crf 23 output.mp4

コマンドの内訳:

ffmpeg             <- call ffmpeg
  -framerate 30    <- set the input framerate to 30
  -i img%03d.png   <- read PNG images with filename img001, img002, img003, etc..
                     img can be changed to another prefix
                     %03d can be changed to %04d for 0001, %05d for 00001 formats, etc...
  -c:v libx264     <- Set the codec to libx264
  -pix_fmt yuv420p <- Set the pixel format to planar YUV 4:2:0, 12bpp
  -crf 23          <- set the Constant Rate Factor to 23 (default value)
  -output.mp4      <- the output filename

これは、30 fps(-framerate 30オプション)で入力を読み取り、23(オプション)の一定のレート係数libx264持つコーデックを使用してエンコードします。-crf 23


26

考慮すべきフレームレートは2つあります。入力と出力です。

デフォルトでは、入力フレームレートは25であり、特に指定しない限り、出力は入力と同じフレームレートを使用します。

入力と出力で同じフレームレート

入力出力を同じフレームレートにしたい場合は、入力フレームレートを指定するだけです。この例では、30000/1001(NTSCビデオ)のフレームレートを設定します。

ffmpeg -framerate 30000/1001 -i input output.mp4
  • あるいは、この例でntsc30000/1001、の代わりにを使用できますが、29.97正確または正確ではないため使用しないでください。他のフレームレートエイリアスを参照してください。

  • デフォルトの入力フレームレートは25であり、出力フレームレートのみを設定すると、補正のためにフレームがドロップまたは複製されます。そのため、この状況で入力フレームレートが設定されます。

入力と出力で異なるフレームレート

入力フレームレートと出力フレームレートを変えたい場合があります。たとえば、特定のレートでフレームを入力し、フレームを複製またはドロップして、出力が異なるフレームレートになるようにすることができます。出力形式コンテナ、プレーヤー、および/またはデバイスとの互換性の問題により、これを行うことができます。

ffmpeg -framerate 10 -i input -r 25 output.mp4
  • この例では、フレームは10から25に複製されます。コンソール出力は、フレームがドロップされているか複製されているかを示します。

  • 画像ファイルのデマルチプレクサの使用-framerate、出力フレームレートを用いて設定されている間-r

  • -pix_fmt yuv420pH.264ビデオを出力している場合、状況によってはオプションを追加するffmpeg必要があります(必要な場合はコンソール出力で警告が表示されます)。これは、すべてのプレーヤーと互換性のあるクロマサブサンプリングスキームを使用します。


2
ffmpegバージョン3.2.2が教えてくれます。Option framerate not found.:-(
erik

はい、あなたは正しいです。しかし、それでもこのオプション-framerateは存在しません。一連の画像を特定のフレームレートのビデオに変換することとはまったく関係がないため、コメントを削除します。
エリック

4
@erik -framerateは存在します。画像およびrawvideoデマルチプレクサとx11grabやv4l2などの一部の入力デバイスで使用されます。
llogan

1
オプションはどこに-framerate文書化されていますか?man ffmpegページを読みましたが、見つかりませんでした。おそらく、ポインター?
Atcold

1
OK、それを見つけました... FFMPEG-DEVICES(1)
Atcold

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.