Команда преобразования не соблюдает порядок

У меня есть определенное количество файлов PNG с именем 1.png, 2.pngи т.д. и нужно сделать анимацию с ними. я использую convert -delay 20 *.png animation.gif,

В первый раз, когда я его использовал, оказалось, что созданная анимация начиналась с 10, затем 11, затем 12, вплоть до 19, а затем до 2! Это логично, но я этого не хочу. Так что я сделал, чтобы изменить имена 01.png, 02.png,

Это было хорошо в начале. Теперь я хочу сделать gif с большим количеством изображений (тысяч), и проблема в том, что, когда он идет 10, например, он достигает 100! Я не могу изменять имена вручную, потому что все это является частью скрипта, и пользователь выбирает, сколько png он хочет. Итак, как решить?

1 ответ

Решение

Это не имеет ничего общего с convert команда - ваша оболочка расширяет шаблон глобуса *.png перед передачей в команду, и делает это в лексическом порядке сортировки LC_COLLATE определяется как часть тока системы locale,

К сожалению, трудно получить числовое упорядочение в оболочке bash (что, как я полагаю, вы используете): если вы не против переключиться на zsh есть возможность использовать числовой префикс

convert -delay 20 *.png(n) animation.gif

Для дальнейшего обсуждения, см., Например, этот связанный Q & A Glob с числовым порядком

Другие вопросы по тегам