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

そのために、次のようなffmpegを使用します

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

このサイトからを取得しましたが、アニメーションを表示するビデオを作成できるかどうか疑問に思いました。 30 FPSで?

コメント

  • 同様の質問手動
  • -framerateパラメータを微調整するだけで、目的の結果が得られます。

回答

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

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を取得する必要があります…ビデオ補間には多くのリソースと時間がかかるため、アーティファクトでいっぱいになります。アドビを使って、単発の写真を短編映画にできると聞きましたが、そこでは多くの手作業が必要です…

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です