7 FPS'de çekilen görüntülerden 30 FPS'de bir video nasıl kodlanır


21

Video kodlama hakkında hiçbir bilgim yok, OpenGL'de yazılmış bir uygulamam var ve oluşturduğu kareleri pnggörüntülere kaydediyorum. Uygulamamın kareleri 7 FPS'de ve onlardan bir video oluşturmaya çalışıyorum.

Bu amaçla ffmpeg kullanıyorum

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

Bu siteden hangisi alındı , ancak 30 FPS'de animasyonu gösteren bir videonun mümkün olup olmadığını merak ediyordum.



-framerateİstediğiniz sonuçları elde etmek için sadece parametreyi düzeltin .
nullptr

Yanıtlar:


21

Aynı şeyi yapmak için aşağıdaki kodu kullanıyorum.

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

Komutu yıkmak:

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

Bu, girişi 30 fps'de ( -framerate 30isteğe bağlı) okur ve bunu 23'lük sabit oran faktörü ( seçenek) libx264ile codec kullanarak kodlar .-crf 23


26

Dikkate alınması gereken iki kare hızı vardır: giriş ve çıkış.

Varsayılan olarak giriş kare hızı 25'tir ve çıkış, aksi belirtilmedikçe giriş ile aynı kare hızını kullanır.

Giriş ve çıkış için aynı kare hızı

Giriş ve çıkışların aynı kare hızına sahip olmasını istiyorsanız , o zaman sadece giriş kare hızını sağlayın. Bu örnek, 30000/1001 (NTSC video) kare hızını ayarlayacaktır:

ffmpeg -framerate 30000/1001 -i input output.mp4
  • Alternatif olarak, bu örnekte, ntscyerine kullanabilirsiniz 30000/1001, ancak 29.97bu doğru veya doğru olmadığı için kullanmayın . Diğer kare hızı takma adlarına bakın .

  • Varsayılan giriş kare hızı 25 olduğundan ve yalnızca bir çıkış kare hızını ayarlarsanız, telafi etmek için kareler düşürülür veya çoğaltılır. Giriş kare hızı bu durumda ayarlanır nedeni budur.

Giriş ve çıkış için farklı kare hızı

Bazen, giriş kare hızının ve çıktı kare hızının farklı olmasını isteyebilirsiniz. Örneğin, kareleri belirli bir hızda girmek isteyebilir ve ardından çıktının farklı bir kare hızına sahip olması için kareleri çoğaltabilir veya bırakabilirsiniz. Bunu, çıkış formatı kabınız, oynatıcınız ve / veya cihazınızla uyumluluk sorunları nedeniyle yapmak isteyebilirsiniz:

ffmpeg -framerate 10 -i input -r 25 output.mp4
  • Bu örnekte, kareler 10 ila 25 arasında olacak şekilde çoğaltılacaktır. Konsol çıktısı, karelerin düşürülüp çoğaltıldığını size söyleyecektir.

  • Görüntü dosyası demuxer kullanımları -framerate, çıkış kare hızı kullanılarak ayarlanır iken -r.

  • -pix_fmt yuv420pH.264 video çıktısı alıyorsanız seçeneği bazı durumlarda eklemeniz gerekebilir (gerekirse, ffmpegkonsol çıktısı sizi uyaracaktır). Bu, tüm oyuncularla uyumlu bir kroma alt örnekleme şeması kullanacaktır.


2
ffmpeg sürüm 3.2.2 bana şunları söylüyor: Option framerate not found.:-(
erik

Evet haklısın. Ancak yine de seçenek -framerateartık mevcut değil. Bir dizi görüntüyü belirli bir kare hızına sahip bir videoya dönüştürmekle ilgisi olmadığı için yorumumu sileceğim.
erik

4
@ erik -frameratevar. Görüntü ve rawvideo demuxers ve x11grab ve v4l2 gibi bazı giriş aygıtları tarafından kullanılır.
lgagan

1
Seçenek nerede -frameratebelgelenmiştir? man ffmpegSayfayı okudum ama bulamadım. Herhangi bir işaretçi, belki?
Atcold

1
Tamam, buldum ... FFMPEG-DEVICES(1).
Atcold

1
ffmpeg -framerate 30 -i img%03d.png output.mp4  

ffmpeg'in son sürümünde yeterli olacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.