Назад | Перейти на главную страницу

% d в имени файла в Bash

Я использую ffmpeg для преобразования нескольких jpg в файл mp4, и, похоже, он отлично работает, создается video.mp4. это команда, которую я использую:

ffmpeg -r 0.1 -i uploads/image%d.jpg uploads/video.mp4

У меня есть эти файлы в моем каталоге загрузок

image1.jpg
image2.jpg
image3.jpg
image4.jpg

Я нашел этот пример в быстром поиске в Google. Я немного изменил его, но изображение% d.jpg осталось прежним. Предполагается, что каждое изображение зацикливается и помещается в mp4. Однако я обнаружил, что здесь не последний файл.

Как% d увеличивается на единицу и впоследствии захватывает здесь каждый файл? Почему он не захватывает последний файл? Когда я удаляю 4-е изображение, загружаются только первые два изображения, поэтому последнее изображение по какой-то причине просто не включается.

Любые комментарии о том, как это работает, были бы действительно полезны, спасибо!

ffmpeg знает, что% d означает один числовой символ, и поэтому увеличивает список файлов. Таким образом, это делает ffmpeg, а не оболочка - это важно, чтобы изображения располагались последовательно.

Обратите внимание, что если ваши числовые суффиксы состоят из более чем одной цифры - например, от image001.jpg до image110.jpg, то вам необходимо сообщить ему об этом:

ffmpeg -r 0.1 -i uploads/image%03d.jpg uploads/video.mp4

«% 03d» означает 3-значное число, дополненное нулями слева (например, 005). «% 05d» будет означать 5-значное число, заполненное нулями слева (например, 00044).

Также обратите внимание, что у вас не может быть пробелов в числах, поэтому переименуйте, если вы это сделаете.

Подробнее о форматировании числа здесь: http://www.pixelbeat.org/programming/gcc/format_specs.html

если вы знаете диапазон, вы можете сделать что-то вроде

 ffmpeg -r 0.1 -i uploads/image{1..4}.jpg uploads/video.mp4

НАСКОЛЬКО МНЕ ИЗВЕСТНО, %d принадлежит ffmpeg, а не bash. Я проверил вашу команду, и она отлично работает. Убедитесь, что у третьего изображения нет пробелов в начале имени файла.