FFMPEG — конвертация png-файлов в видеофайлы

FFMPEG — конвертация png-файлов в видеофайлы

У меня есть около 10 тыс. PNG-файлов, которые я хотел бы преобразовать в видео.

Отпоиск в ИнтернетеЯ наткнулся на ffmpeg и решил выполнить следующую команду:

ffmpeg -f image2 -r 25 -i img/* -vcodec libx264 -crf 22 video.mp4

Во-первых, выполнение этой команды выдало приглашение File 'img/00001.png' already exists. Overwrite ? [y/N], что кажется мне немного странным, поскольку, насколько я понимаю, команда не должна изменять сами изображения, а просто создавать новый video.mp4файл?

В любом случае, я не хотел нажимать y10 тысяч раз, поэтому я сделал резервную копию своих изображений и изменил команду:

ffmpeg -f image2 -r 25 -i img/* -vcodec libx264 -crf 22 -y video.mp4

Теперь программа вроде бы нормально работает с 254 изображениями, но затем выдает ошибку:

[png @ 0x7facf0503800] ff_frame_thread_encoder_init failed
Error initializing output stream 255:0 -- Error while opening encoder for output stream #255:0 - maybe incorrect parameters such as bit_rate, rate, width or height
Conversion failed!

На всякий случай добавилполный файл журнала здесь. И, для пущей убедительности,вот пример из изображенийЯ хочу конвертировать. Также,вот печально известный кадр 255, на котором программа вылетает.

решение1

ffmpeg требует, чтобы каждый входной файл имел свой собственный -iаргумент, поэтому при запуске -i img/*ваша оболочка расширит подстановочный знак до серии изображений, которые ffmpeg, в свою очередь, будет читать только какодинвходное изображение, но 10k (минус один) выходных изображений. Другими словами, ffmpeg увидит:

ffmpeg … -i img/00000.png img/00001.png …

что говорит ему использовать 00000.pngкак вход и 00001.pngкак выход. Фактически, вы перезапишете все ваши файлы 00001.pngсодержимым . Поэтому я надеюсь 00254.png , 00000.pngчто у вас есть их резервная копия.

После того, как вы восстановите исходные входные файлы, проверьте команду еще раз. Вы не использовали %dподстановочный знак для указания номеров изображений (который был показан в связанном ответе). Поэтому используйте:

ffmpeg -f image2 -framerate 25 -i img/%05d.png -vcodec libx264 -crf 22 video.mp4

Для получения более подробной информации посетитеРуководство по слайд-шоу. Там вы также найдете различные варианты указания списка входных файлов (например, с помощью шаблона glob, аналогичного тому, что вы пытались сделать).

решение2

Тыможеттакже используйте подстановочные знаки звездочки, но список файлов необходимо заключить в кавычки, чтобы предотвратить расширение, как в ответе@slhck, и вам нужна дополнительная опция, pattern_typeчтобы указать ему использовать подстановку.

ffmpeg -f image2 -r 25 -pattern_type glob -i 'img/*.png' -vcodec libx264 -crf 22 video.mp4

Связанный контент