Как создать видео с изображений с помощью FFmpeg?

Можно ли использовать ffmpeg создания видео из набора последовательностей, где число не начинается с нуля?

Например, у меня есть несколько изображений [test_100.jpg, test_101.jpg, test_102.jpg, …, test_200.jpg], и я хочу конвертировать их в видео. Я пробовал следующую команду, но она не работала (кажется, номер должен начинаться с нуля):

Ffmpeg -i test_% d.jpg -vcodec mpeg4 test.avi

Любой совет?

Нет необходимости переименовывать файлы при использовании переключателя -start_number :

 ffmpeg -start_number n -i test_%d.jpg -vcodec mpeg4 test.avi 

Где n – начало последовательности неподвижных изображений.

Обратите внимание, что это будет работать до тех пор, пока последовательность не будет прервана после ее запуска. Если есть пробелы, и вы хотите, чтобы все включенные снимки, то для заполнения пробелов может потребоваться перенумерация.

Есть некоторые другие переключатели, которые вы можете найти полезными.

Я использую следующий один вкладыш для получения более низкой частоты кадров и сжатия изображений и получения меньшего результирующего видео:

 ffmpeg.exe -f image2 -framerate 25 -pattern_type sequence -start_number 1234 -r 3 -i Imgp%04d.jpg -s 720x480 test.avi 

Параметр -r 3 устанавливает частоту кадров результирующего видео на 3 кадра в секунду, чтобы я мог видеть их по-прежнему в течение короткого периода времени. Опция -s масштабировать изображения до требуемого разрешения для управления размером результирующего видео.

(В оболочке Windows замените -i Imgp%04d.jpg на -i "Imgp%%04d.jpg" . Кредит для этого Майку Фицпатрику https://superuser.com/a/344178/153054 )

Вы можете использовать этот ниже фрагмент кода:

  cat *.jpg | ffmpeg -f image2pipe -r 1 -vcodec mjpeg -i - -vcodec libx264 out.mp4 

Вы можете найти пример скрипта в документации ffmpeg :

3.2 Как кодировать отдельные изображения в видеоролики?

Если у вас есть большое количество изображений для переименования, вы можете использовать следующую команду для облегчения бремени. Команда, использующая синтаксис оболочки bourne, символически связывает все файлы в текущем каталоге, которые соответствуют * jpg, в /tmp' directory in the sequence of img001.jpg', `img002.jpg 'и так далее.

 x=1; for i in *jpg; do counter=$(printf %03d $x); ln "$i" /tmp/img"$counter".jpg; x=$(($x+1)); done 

Затем запустите:

 ffmpeg -f image2 -i /tmp/img%03d.jpg /tmp/a.mpg 

Насколько я знаю, вы не можете запустить последовательность в случайных числах (я не помню, если вы должны начать ее с 0 или 1), плюс, она не может иметь пробелов, если это так, ffmpeg будет считать, что последовательность завершена и Прекратите добавлять больше изображений.

Кроме того, как указано в комментариях к моему ответу, помните, что вам нужно указать ширину вашего индекса. Подобно:

Изображение% 03d.jpg

И если вы используете индексный тип% 03d, вам нужно заполнить ваши имена файлов 0, например:

Image001.jpg image002.jpg image003.jpg

и т.п.

Из документов ffmpeg:

Использование шаблона glob

Ffmpeg также поддерживает бэширование в стиле bash (* представляет любое количество символов).

Это полезно, если ваши изображения являются последовательными, но не обязательно в последовательном порядке, как в предыдущих примерах.

 ffmpeg -r 1 -pattern_type glob -i 'test_*.jpg' -c:v libx264 out.mp4 

Итак, до тех пор, пока ваши файлы отсортированы, использование -pattern_type glob переключателя -pattern_type glob должно работать на вас.

Я согласен с Франциско, но в качестве обходного пути вы можете просто написать быстрый скрипт для перемещения или создания символических ссылок на файлы с порядковыми номерами, которые нужны ffmpeg. Затем скрипт может вызвать ffmpeg, а затем удалить ссылки или переместить файлы обратно в исходное местоположение.

Погляди

 x=1; for i in *jpg; do counter=$(printf %03d $x); ln "$i" /tmp/img"$counter".jpg; x=$(($x+1)); done 

Я использовал flv-кодировщик, так как мое видео собиралось в флеш-плеере (Jwplayer)

Ffmpeg -i% d.jpg -vcodec flv test.flv

Вы можете сделать это с помощью convert -morph :

 convert *.jpg -delay 10 -morph 10 %05d.jpg 

Из документации кажется, что вы можете просто использовать *

 For example, for creating a video from filenames matching the glob pattern foo-*.jpeg: ffmpeg -f image2 -pattern_type glob -framerate 12 -i 'foo-*.jpeg' -s WxH foo.avi 

В качестве примечания, чтобы улучшить качество, скорость / fps может быть важна (например, сначала указывая очень низкую / высокую частоту кадров, а затем переходите от второго фильтра, который сделает нормальное замедленное видео?)

Я знаю, что это старый вопрос, но я нашел его в Google, ища тот же ответ. Ни один из ответов здесь не удовлетворил меня полностью, поэтому я сделал больше поиска и чтения, и это команда, которую я придумал для своей собственной проблемы.

 cat {0032..1501}*.png | ffmpeg -f image2pipe -framerate 5 -i - -s 720x480 test2.avi 

Причина, по которой я буду использовать такую ​​команду, это …

  1. Cat и -f image2pipe дают вам лучший контроль над тем, какие изображения вы используете. Например, он позволяет использовать функции bash, такие как расширение скобок, и другие команды, такие как grep, для точной настройки результатов, если вы выберете.
  2. Меньше переключений для запоминания.
  3. Я рекомендую НЕ использовать -r, а вместо этого использовать -фрагментировать. По моему опыту -r чаще всего отбрасывает кадры.
  4. Менее сложный, нет ненужных переключателей в использовании, и он будет работать как есть. Вы можете добавить дополнительную сложность (например, указать кодировщик) и точную настройку в соответствии с вашими потребностями.
  • Можно ли установить ACL в точке монтирования sysfs?
  • Нулевое заполнение и случайное заполнение
  • Правила udev не работают с небольшим числом
  • Доступ к окну Windows из Linux
  • Интернет-киоск для мотеля?
  • Не удается загрузить с USB - даже если BIOS установлен правильно
  • Использование рабочего стола в качестве поддельной веб-камеры на Linux
  • Есть ли поддержка Linux для TRIM на дисках SSD?
  • Может ли Bitlocker использоваться в двойной системе загрузки с Windows на одном диске, Linux на другом?
  • Как я могу рекурсивно скопировать файлы с расширением файла, сохраняя структуру каталогов?
  • Как настроить Linux на использование другого DNS-сервера для определенного домена?
  • Давайте будем гением компьютера.