Преобразование кадров PNG в видео на 1 FPS

У меня есть видеокадры в формате PNG на 1 FPS, и я пытаюсь преобразовать их в видео с помощью ffmpeg.

Если я сделаю что-то вроде этого:

ffmpeg -i data/input-%4d.png data/output.mp4

Я получаю видео с частотой 25 кадров в секунду, что в основном очень быстрое переключение ввода (которое фиксируется при 1FPS).

Если я попробую:

ffmpeg -i data/input-%4d.png -r 1 data/output.mp4

Я получаю то, что VLC не хочет играть 🙂

Теперь, если я возьму первое видео (FF один) и применил фильтр, чтобы замедлить его (например, -filter:v 'setpts=24.0*PTS' ), я могу заставить его играть как 1 видео FPS, но Конечно, цена – это размер файла. Думаю, это создает кучу повторяющихся кадров.

Итак, вопрос в том, как создать видео, которое имеет ровно 1 FPS и на самом деле играет с такой скоростью? Формат вывода, кстати, для меня не так важен.

3 Solutions collect form web for “Преобразование кадров PNG в видео на 1 FPS”

Если вы хотите, чтобы однострочный FFMPEG генерировал видеоролик, воспроизводимый со скоростью 1 кадр в секунду, то вы должны указать кадры для ввода и вывода, например:

ffmpeg -r 1 -i data / input-% 4d.png -pix_fmt yuv420p -r 10 data / output.mp4

-r 1 означает, что видео будет воспроизводиться на 1 из исходных изображений в секунду.
-r 10 означает, что видео будет воспроизводиться со скоростью 10 кадров в секунду.

(Здесь есть -pix_fmt yuv420p , чтобы обеспечить совместимость с широким спектром программ воспроизведения. Здесь требуется, например, для воспроизведения видео в проигрывателе Windows Media.)

Я тестировал много разных выходных кадров, и 10, кажется, самое низкое число, которое вы можете использовать, которое все равно будет воспроизводить видео, которое будет играть VLC.

Конечно, команда выше означает, что каждое исходное изображение умножается, но это более простой метод, чем «замедление», о котором вы говорили, и в зависимости от кодека он может не создавать видео намного больше, чем истинный 1-FPS видео.

Чтобы проверить это, я только что выпустил настоящий видеоролик с 1-FPS, который вышел до 2,24 килобайта. Затем я выпустил видео с теми же изображениями ввода, но вывел на 24 FPS, и он вышел до 5,76 kiB. Это чуть более, чем вдвое больше, и почти в 24 раза больше. 🙂

Что, если вы слегка увеличите свой второй пример следующим образом:

 $ ffmpeg -r 1 -i data/input-%4d.png -c:v libx264 out.mp4 

-r 1 должен появиться перед .png-файлами, а не после.

Из документации FFmpeg :

Как правило, параметры применяются к следующему указанному файлу. Поэтому порядок важен, и вы можете иметь одну и ту же опцию в командной строке несколько раз. Каждое вхождение затем применяется к следующему входному или выходному файлу.

Используйте оба параметра -framerate и -r

Например, чтобы иметь окончательное видео, которое выглядит как 1FPS:

 ffmpeg -framerate 1 -pattern_type glob -i '*.png' \ -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4 

Это похоже на то, что говорит https://unix.stackexchange.com/a/86945/32558 , но мне нужно -framerate вместо -r чтобы он работал.

Это упоминается в вики по адресу: http://trac.ffmpeg.org/wiki/Slideshow#Framerates

Он устанавливает выходную частоту кадров до 30 , которую VLC может обрабатывать, и копирует каждое изображение 30 раз, так что выходное видео оказывается равным 1 FPS. См. Также: https://stackoverflow.com/questions/19267443/playback-issues-in-vlc-with-low-fps-video-from-images-using-ffmpeg

Затем VLC может воспроизводить видео в обычном режиме.

Протестировано на Ubuntu 16.10, VLC 2.2.4, ffmpeg 3.0.5, в каталоге с 10 PNG.

  • ffmpeg усекает пути на выходе, если при запуске на bash задействованы точки
  • Слияние двух видео с использованием FFMPEG бок о бок без черной части сверху и снизу
  • Клей FFMPEG MPEG TS
  • x11grab с другого сервера отображения
  • Как использовать sox или ffmpeg для определения интервалов молчания в длинном звуковом файле и их замены нулями (например, подавление фонового шума)?
  • Autotools неправильно определяет мою архитектуру. Как обращаться?
  • ffmpeg: reencode и повторно поток сетевого потока с более низким битрейтом
  • Как подключить вывод ffmpeg?
  • 2-кратное кодирование с помощью ffmpeg сразу
  • как конвертировать MOD-файл MOD без потери качества в современный популярный формат для телевизора
  • как установить avxsynth на centos?
  • Interesting Posts

    Повторное нажатие клавиш, которые генерируют несколько кодов сканирования

    Пользователи, прошедшие аутентификацию через AD, больше не запрашивают пароль

    Перезапись диска перед шифрованием

    Могу ли я сделать диск O / S READ ONLY и предотвратить запись метаданных?

    Как настроить путь Дарт? (ОБНОВЛЕНО Еще нужна помощь)

    Как эти параметры qemu для перенаправления stdout работают?

    Ссылка на предыдущий вывод команды / содержимое экрана терминала в текущей командной строке

    Соответствует ли «parallel -jobs 10», что будет выполняться ровно 10 заданий?

    Как передать параметры POST для открытия веб-страницы в браузере?

    Поиск файлов, имеющих подтвержденный дубликат в том же каталоге, рекурсивно

    Скрипт для проверки файловой системы только для чтения

    bash + Есть ли что-то вроде log4j для скрипта bash?

    Crontab не работает

    Как Xserver может определить, какое устройство является мышью или клавиатурой?

    Linux Bluetooth-драйвер для Lenovo ThinkPad T470s

    Linux и Unix - лучшая ОС в мире.