Як кодувати відео зі швидкістю 30 кадрів в секунду із зображень, зроблених у 7 FPS


21

Я не маю жодних знань про кодування відео, у мене є додаток, написане на OpenGL, і я зберігаю кадри, створені у pngзображеннях. Кадри з мого додатка мають 7 кадрів в секунду, і я намагаюся створити відео з них.

Для цього я використовую 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 кадрів в секунду ( -framerate 30опція) і кодує його за допомогою libx264кодека з коефіцієнтом постійної швидкості 23 ( -crf 23опція).


26

Слід враховувати дві частоти кадрів: вхід і вихід.

За замовчуванням частота кадрів вводу становить 25, а вихід буде використовувати ту саму частоту кадрів, що і вхід, якщо ви не скажете це інше.

Однакова частота кадрів для введення та виводу

Якщо ви хочете, щоб вхід і вихід мали однакову частоту кадрів, тоді просто надайте частоту кадрів вводу. Цей приклад встановить частоту кадрів 30000/1001 (відео NTSC):

ffmpeg -framerate 30000/1001 -i input output.mp4
  • Крім того, у цьому прикладі ви можете використовувати ntscзамість цього 30000/1001, але не використовувати його, 29.97оскільки це не точно або правильно. Дивіться інші псевдоніми частоти кадрів .

  • Оскільки частота кадрів за замовчуванням становить 25, і якщо ви встановите лише частоту кадрів на виході, кадри будуть відкинуті або дублюватись для компенсації. Ось чому частота вхідних кадрів встановлюється в цій ситуації.

Різна частота кадрів для введення та виводу

Іноді ви можете хотіти, щоб частота кадрів вводу та частота вихідних кадрів відрізнялися. Наприклад, ви можете ввести кадри з певною швидкістю, а потім дублювати або відкидати кадри, щоб вихід має іншу частоту кадрів. Ви можете зробити це через проблеми сумісності з контейнером вашого вихідного формату, плеєром та / або пристроєм:

ffmpeg -framerate 10 -i input -r 25 output.mp4
  • У цьому прикладі кадри будуть дублюватись, щоб перейти від 10 до 25. Вихід з консолі підкаже вам, чи кадри випадають чи дублюються.

  • Файл зображення демуксера використовує -framerate, тоді як частота вихідних кадрів встановлюється за допомогою -r.

  • Можливо, вам доведеться додати -pix_fmt yuv420pпараметр, якщо ви виводите відео H.264 ( ffmpegвихід консолі попередить вас про необхідність). Для цього буде використана схема підсистеми кольоровості, сумісна з усіма гравцями.


2
ffmpeg версія 3.2.2 повідомляє мені: Option framerate not found.:-(
erik

Так, ти правий. Але все-таки варіант -framerateвже не існує. Я видалю свій коментар, оскільки він насправді не має нічого спільного з перетворенням серії зображень у відео з певним кадром.
erik

4
@erik -framerateіснує. Його використовують деміксери зображень та rawvideo та деякі пристрої введення, такі як x11grab та v4l2.
логікан

1
Де варіант -framerateдокументально задокументований? Я прочитав man ffmpegсторінку, але не зміг її знайти. Будь-який вказівник, можливо?
Atcold

1
Добре, знайшов його ... FFMPEG-DEVICES(1).
Atcold

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.