avconv: конвертировать последовательность изображений со случайными именами в видео

У меня есть файлы с именами вроде alice.png, bob.png, charlie.png (их сотни), и я хотел бы сделать из них видео. Я пытаюсь

 avconv -i alice.png -i bob.png -i charlie.png -r 25 -b:v 12M -y out.mp4

но я получаю только первое изображение в фильме, остальное игнорируется.

Существует множество руководств по использованию -i %03d.png и подобных подстановочных знаков, но есть ли способ обойтись без них, передав эти файлы в командной строке? mencoder был вариант mf://alice.png,bob.png,charlie.png, поэтому я ищу что-то подобное.

Запись имен файлов во внешний файл также будет в порядке.


person eudoxos    schedule 28.01.2015    source источник
comment
В конечном итоге вы переполнитесь командной строкой (см. пересмотреть свои требования.   -  person SirDarius    schedule 28.01.2015
comment
@SirDarius: я знаю, ты прав. Список разрешенных внешних файлов.   -  person eudoxos    schedule 28.01.2015
comment
Ваш вопрос здесь не по теме, но по теме для суперпользователя. Я проголосовал за то, чтобы перенести его туда, поэтому, пожалуйста, не публикуйте повторно. В любом случае, вы используете avconv или ffmpeg?   -  person slhck    schedule 28.01.2015
comment
Меня устраивает переход на SU, как это сделать? Я хотел бы поддерживать как ffmpeg, так и avconv, если синтаксис тот же, но если нет, то предпочтительнее avconv (похоже, он более широко доступен в дистрибутивах).   -  person eudoxos    schedule 30.01.2015
comment
однако эта ситуация меняется, ffmpeg возвращается в дистрибутивы, см. lwn.net/Articles/607591 для получения дополнительной информации.   -  person SirDarius    schedule 03.02.2015
comment
Спасибо, но, пожалуйста, не могли бы вы перенести вопрос или ответить на него?   -  person eudoxos    schedule 03.02.2015


Ответы (1)


Для этого вам нужно сначала создать жесткие ссылки, а затем удалить их. Без такого подхода невозможно сделать то, что вы хотите.

Сделайте следующее:

  1. Создайте временный каталог.
  2. Выполнить ln -t DIR file1 file2 file3 ...
  3. Перейдите в этот каталог и запустите скрипт sequential-rename (см. ниже)
  4. Измените его и используйте обычный трюк %00d для преобразования этих ссылок.
  5. Удалите временный каталог.

последовательное переименование

#!/bin/sh
# Sequential rename - rename screen shot images sequentially
#http://www.askdavetaylor.com/sequentially_rename_files_linux_mac_script.html

SAVEIFS=$IFS
IFS=$(echo -en "\n\b")

if [ $# -ne 1 ] ; then
  echo "Usage: $(basename $0) replacement-pattern-"
  exit 1
fi

pattern="$1"
count="1"

for filename in $(ls * | sort)
do
  if [ $count -eq 1000 ]; then
    eval "rename \"s/^$pattern(\\\\d\\\\d\\\\d)\\\\.jpeg/${pattern}0\\\\1.jpeg/g\" $pattern???.jpeg"
  fi
  if [ $count -eq 100 ]; then
    eval "rename \"s/^$pattern(\\\\d\\\\d)\\\\.jpeg/${pattern}0\\\\1.jpeg/g\" $pattern??.jpeg"
  fi
  if [ $count -eq 10 ]; then
    eval "rename \"s/^$pattern(\\\\d)\\\\.jpeg/${pattern}0\\\\1.jpeg/g\" $pattern?.jpeg"
  fi
  newname="${pattern}${count}.jpeg"
  echo "renaming \"$filename\" to $newname"
  mv "$filename" "$newname"
  count=$(( $count + 1 ))
done

IFS=$SAVEIFS

exit 0
person v010dya    schedule 22.04.2015
comment
В конце концов я получил символические ссылки в выделенном временном каталоге, который тоже работает. - person eudoxos; 25.04.2015
comment
@eudoxos Да, символические ссылки тоже будут работать, но они будут немного медленнее, и для этого замедления нет причин. - person v010dya; 25.04.2015
comment
Жесткие ссылки не работают в файловых системах, нет ничего идеального. Штраф за скорость теоретический. - person eudoxos; 25.04.2015
comment
@eudoxos Хорошо, если по какой-то причине вы должны работать с разными файловыми системами, думаю, это имеет смысл. Я не могу придумать для этого никакого варианта использования, если только вы не боялись столкнуться с проблемой слишком длинного имени файла или что-то в этом роде. - person v010dya; 25.04.2015
comment
Вариант использования: иметь код, который работает везде, где пользователь его запускает, и иметь временную папку в обычных местах (например, /tmp). - person eudoxos; 25.04.2015