Приветствую и приветствую всех,

Я пытаюсь создать анимацию, используя imagemagick через:

convert -delay 80 -loop 0 *.png ani.gif

Логика заключается в нахождении всех файлов .png, за исключением того, что имена файлов не перечислены численно. Это приводит к тому, что последовательность анимации будет плохо построена.

например

-a---         3/17/2015   8:36 PM      14147 26.png
-a---         3/17/2015   8:37 PM      13904 260.png
-a---         3/17/2015   8:37 PM      13981 261.png
-a---         3/17/2015   8:37 PM      13863 262.png
-a---         3/17/2015   8:37 PM      14026 263.png
-a---         3/17/2015   8:37 PM      14023 264.png
-a---         3/17/2015   8:37 PM      14038 265.png
-a---         3/17/2015   8:37 PM      13913 266.png
-a---         3/17/2015   8:37 PM      14003 267.png
-a---         3/17/2015   8:37 PM      14000 268.png
-a---         3/17/2015   8:37 PM      13887 269.png
-a---         3/17/2015   8:36 PM      14025 27.png

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

set dircmd=/o:d

Как я мог получить это так, чтобы файлы были внутренне перечислены как:

-a---         3/17/2015   8:36 PM      14147 26.png
-a---         3/17/2015   8:36 PM      14025 27.png
-a---         3/17/2015   8:37 PM      13904 260.png
-a---         3/17/2015   8:37 PM      13981 261.png
-a---         3/17/2015   8:37 PM      13863 262.png
-a---         3/17/2015   8:37 PM      14026 263.png
-a---         3/17/2015   8:37 PM      14023 264.png
-a---         3/17/2015   8:37 PM      14038 265.png
-a---         3/17/2015   8:37 PM      13913 266.png
-a---         3/17/2015   8:37 PM      14003 267.png
-a---         3/17/2015   8:37 PM      14000 268.png
-a---         3/17/2015   8:37 PM      13887 269.png

Тогда, когда команда конвертирования запущена, правильная последовательность будет нажата в GIF?

1 ответ1

1

Предположительно ваша программа конвертирования сортирует файлы в алфавитном порядке по имени, когда вы используете подстановочный знак. Самое простое решение - переименовать файлы с нулевым заполнением, чтобы имена файлов сортировались в правильном числовом порядке.

Я написал гибридную утилиту JScript/batch под названием JREN.BAT, которая может использовать замену регулярных выражений для переименования файлов. Это чистый скрипт, который запускается изначально на любой машине с Windows начиная с XP.

JREN.BAT делает решение чрезвычайно простым (при условии, например, что у вас еще нет существующего 027.png, который конфликтует с 27.png):

jren "^\d+(?=\.png)" "lpad($0,'000')" /j

После выполнения команды файл с именем 5.png станет 005.png, а 27.png - 027.png. Ваша исходная команда конвертирования должна затем обрабатывать файлы в правильном порядке.

Используйте jren /? чтобы получить полную документацию по множеству опций, доступных для JREN.BAT


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

@echo off
setlocal enableDelayedExpansion
for /f "delims=" %%F in (
  'dir /b /a-d ???.png ^| findstr "^[0-9][0-9]*\.png$" /i'
) do (
  set "num=000%%~nF"
  ren "%%F" "!num:~-3!%%~xF"
)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .