avconv - Передача списка путей к изображениям

Я хочу написать скрипт, который будет генерировать замедленное видео на основе набора путей к файлам изображений. Я понимаю, что вы можете выполнить что-то вроде этого:

avconv -r 15 -i %04d.JPG -s hd480 -vcodec libx264 time-lapse.mp4

Это будет искать файлы в каталоге на основе шаблона имени файла 0000.JPG, 0001.JPG и т. д. Однако я пытаюсь выяснить, есть ли способ передать его в списке имен файлов в порядке Я хочу обработать? Моя идеальная ситуация заключается в том, что я могу выполнить некоторый запрос к БД, чтобы получить список путей к файлам изображений в хронологическом порядке, а затем передать их в команду avconv и заставить ее генерировать видео на лету. У меня есть определенная структура папок для моих изображений, поэтому в идеале я не хотел бы копировать необходимые файлы во временный каталог, чтобы иметь возможность правильно назвать их, а затем обработать.


person John F.    schedule 01.01.2013    source источник


Ответы (3)


Это также единственный способ заставить его работать (трюк image2pipe у меня не сработал).

  1. Создайте папку только с изображениями, которые вы хотите использовать в своем фильме.

  2. Переименуйте файлы (не забудьте предварительно сделать резервную копию изображений на случай ошибки)

    aa=0;for i in `ls`; do mv $i `printf "%04d" $aa`.png; aa=$(($aa+1));done
    
  3. Запустить avconv

    avconv -f image2 -i %04d.png -b 2500k -codec mpeg4 Heligyro.avi
    
person Louis Gagnon    schedule 23.10.2014

В итоге я передал ls для создания ссылок, а затем отрисовал их.

x=0; for i in $(ls -t *JPG); do counter=$(printf %05d $x); ln -s "$i" "$counter".jpg; x=$(($x+1)); done
person Rich    schedule 13.02.2013

Я делаю таймлапс-видео на основе изображений с моей камеры видеонаблюдения. Камера сортирует файлы JPG в папки по дате, а затем в подпапки по часам.

Это сглаживает, переименовывает и отправляет результат в avconv.

#!/bin/bash

SOURCE_DIR="/home/ftp/camera/$1"
TIMELAPSE_DIR="/home/ftp/camera/timelapse-batch"
FRAME_DELAY=50

ls -1 $SOURCE_DIR |

        while read DAY;
        do
                echo "=================================================================";
                echo "| >>> Processing $SOURCE_DIR/$DAY";

                cd $SOURCE_DIR/$DAY;

                echo "| >>> Flattening...";

                find $SOURCE_DIR/$DAY -mindepth 2 -type f -exec mv -t $SOURCE_DIR/$DAY -i '{}' +

                echo "| >>> Frame Count: $(ls -1 | wc -l)";

                echo "| >>> Converting...";

                echo "-----------------------------------------------------------------";

                #gets list of images, renames them to a format that avconv expects, then runs avconv
                ls |
                        grep jpg |
                        awk -v name=$1 'BEGIN{a=0}{printf "mv %s " name "%04d.JPG\n" , $0, a++}' |
                        bash && avconv -y -r $FRAME_DELAY -i $1%4d.JPG -r $FRAME_DELAY -vcodec libx264 -q:v 4  -vf scale=iw:ih $TIMELAPSE_DIR/$DAY"_"$1.mp4;

                echo "-----------------------------------------------------------------";
                echo "| >>> Done!";
                echo "=================================================================";
                echo -e "\n\n\n\n";

        done
person Richard Bettridge    schedule 02.06.2018