Cara menyandikan video pada 30 FPS dari gambar yang diambil pada 7 FPS

21

Saya tidak memiliki pengetahuan apa pun tentang pengkodean video, saya memiliki aplikasi yang ditulis dalam OpenGL dan saya menyimpan frame yang dihasilkannya menjadi pnggambar. Frame dari aplikasi saya ada di 7 FPS dan saya mencoba membuat video dari itu.

Untuk itu saya menggunakan ffmpeg seperti ini

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

yang diambil dari situs ini , namun saya bertanya-tanya apakah mungkin untuk memiliki video yang menunjukkan animasi pada 30 FPS?

BRabbit27
sumber
Hanya men-tweak -framerateparameter untuk mendapatkan hasil yang diinginkan.
nullptr

Jawaban:

21

Saya menggunakan kode di bawah ini untuk melakukan hal yang sama.

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

Meruntuhkan perintah:

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

Ini membaca input pada 30 fps ( -framerate 30opsi) dan mengkodekannya menggunakan libx264codec dengan faktor laju konstan 23 ( -crf 23opsi).

Saaru Lindestøkke
sumber
26

Ada dua frame rate yang perlu dipertimbangkan: input dan output.

Secara default rate frame input adalah 25, dan output akan menggunakan frame rate yang sama dengan input kecuali Anda memberi tahu sebaliknya.

Frame rate yang sama untuk input dan output

Jika Anda ingin input dan output memiliki frame rate yang sama, maka cukup berikan frame rate input. Contoh ini akan menetapkan kecepatan bingkai 30000/1001 (video NTSC):

ffmpeg -framerate 30000/1001 -i input output.mp4
  • Atau, dalam contoh ini, Anda bisa menggunakan ntscalih-alih 30000/1001, tetapi jangan gunakan 29.97karena itu tidak akurat atau benar. Lihat alias laju bingkai lainnya .

  • Karena frame rate input default adalah 25, dan jika Anda hanya menetapkan frame rate output, maka frame akan turun atau digandakan untuk mengkompensasi. Itulah sebabnya frame rate input diatur dalam situasi ini.

Frame rate berbeda untuk input dan output

Kadang-kadang Anda mungkin ingin frame rate input dan frame rate output berbeda. Misalnya, Anda mungkin ingin memasukkan frame pada kecepatan tertentu, dan kemudian menduplikasi atau menjatuhkan frame sehingga output memiliki frame rate yang berbeda. Anda mungkin ingin melakukan ini karena masalah kompatibilitas dengan wadah format output, pemutar, dan / atau perangkat Anda:

ffmpeg -framerate 10 -i input -r 25 output.mp4
  • Dalam contoh ini frame akan diduplikasi untuk beralih dari 10 menjadi 25. Output konsol akan memberi tahu Anda jika frame sedang dijatuhkan atau diduplikasi.

  • The file gambar demuxer penggunaan -framerate, sementara frame rate output diatur menggunakan -r.

  • Anda mungkin harus menambahkan -pix_fmt yuv420popsi dalam beberapa keadaan jika Anda menghasilkan video H.264 ( ffmpegoutput konsol akan memperingatkan Anda jika memang perlu). Ini akan menggunakan skema subsampling kroma yang kompatibel dengan semua pemain.

llogan
sumber
2
ffmpeg versi 3.2.2 memberi tahu saya: Option framerate not found.:-(
erik
Ya kamu benar. Namun demikian opsi -frameratetidak ada lagi. Saya akan menghapus komentar saya, karena tidak ada hubungannya dengan mengubah serangkaian gambar ke video dengan framerate tertentu.
erik
4
@ erik -frameratememang ada. Ini digunakan oleh demuxers gambar dan video mentah dan beberapa perangkat input seperti x11grab dan v4l2.
Logan
1
Di mana opsi ini -frameratedidokumentasikan? Saya sudah membaca man ffmpeghalamannya, tetapi saya tidak dapat menemukannya. Pointer apa saja, mungkin?
Atcold
1
OK, menemukannya ... FFMPEG-DEVICES(1).
Atcold
1
ffmpeg -framerate 30 -i img%03d.png output.mp4  

akan cukup dalam versi terbaru dari ffmpeg.

Tessaracter
sumber