ビデオのエンコードについてまったく知識がなく、OpenGLで記述されたアプリケーションがあります。生成したフレームをpng
画像に保存しています。私のアプリのフレームは7FPSで、それらからビデオを作成しようとしています。
そのために、次のようなffmpegを使用します
ffmpeg -framerate 30 -i img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
このサイトからを取得しましたが、アニメーションを表示するビデオを作成できるかどうか疑問に思いました。 30 FPSで?
コメント
回答
同じことを行うために以下のコードを使用しています。
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
オプション)、libx264
コーデックを使用してエンコードします。一定のレート係数は23(-crf 23
オプション)。
回答
考慮すべきフレームレートは入力と出力の2つです。
デフォルトでは入力フレームレートは25です。 、および特に指定しない限り、出力は入力と同じフレームレートを使用します。
入力と出力に同じフレームレート
入力する場合との出力は同じフレームレートになり、入力フレームレートを指定するだけです。この例では、フレームレートを30000/1001(NTSCビデオ)に設定します。
ffmpeg -framerate 30000/1001 -i input output.mp4
-
または、この例では、次を使用できます。
30000/1001
の代わりにntsc
を使用しますが、29.97
は正確ではないため、使用しないでください。正解です。他のフレームレートエイリアスを参照してください。 -
デフォルトの入力フレームレートは25であるため、出力フレームレートのみを設定すると、フレームがドロップまたは複製されて補正されます。そのため、この状況では入力フレームレートが設定されます。
入力のフレームレートが異なるおよび出力
入力フレームレートと出力フレームレートを異ならせたい場合があります。たとえば、特定のレートでフレームを入力してから、フレームを複製またはドロップして、出力にフレームレートが異なります。出力フォーマットコンテナ、プレーヤー、デバイスとの互換性の問題があるため、これを行うことをお勧めします。
-
この例では、フレームが複製されて10から25になります。コンソール出力は、フレームがドロップされているか複製されているかを示します。
-
画像ファイルデマルチプレクサは
-framerate
を使用しますが、出力フレームレートは-r
を使用して設定されます。 -
-pix_fmt yuv420p
オプションを追加する必要がある場合がありますH.264ビデオを出力している場合の状況(ffmpeg
コンソール出力は必要に応じて警告します)。これは、すべてのプレーヤーと互換性のあるクロマサブサンプリングスキームを使用します。
コメント
- ffmpegバージョン3.2.2教えてくれます:
Option framerate not found.
🙁 - はい、その通りです。それでも、オプション
-framerate
は存在しません。一連の画像を特定のフレームレートのビデオに変換することとは実際には関係がないため、コメントを削除します。 - @erik
-framerate
'は、画像とrawvideoのデマルチプレクサ、およびx11grabやv4l2などの一部の入力デバイスで使用されます。 - オプションが文書化されていますか?'
man ffmpeg
ページを読みましたが、'見つかりません。ポインタはありますか? - OK、見つかりました…
FFMPEG-DEVICES(1)
。
回答
ffmpeg -framerate 30 -i img%03d.png output.mp4
後半には十分ですffmpegのtバージョン。
コメント
-
-pix_fmt yuv420p
を忘れないでください。そうしないと、ファイルが作成される可能性があります。多くのソフトウェアツールが'好きではないこと: trac.ffmpeg.org/ticket/8856
回答
あなたはビデオ補間について話している。ビデオ補間なしで7fpsを30fpsにする方法はありません…基本的には、ビデオを作成する過程で、最初から30fpsを取得する必要があります…ビデオ補間には多くのリソースと時間がかかるため、アーティファクトでいっぱいになります。アドビを使って、単発の写真を短編映画にできると聞きましたが、そこでは多くの手作業が必要です…
-framerate
パラメータを微調整するだけで、目的の結果が得られます。