У меня есть около 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
файл?
В любом случае, я не хотел нажимать y
10 тысяч раз, поэтому я сделал резервную копию своих изображений и изменил команду:
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