Я хотел бы сделать интервальный фильм в определенном диапазоне. Сценарий работает, пока не сделает фильм. Вот сценарий:

    read -p "Von welchem Zeitraum soll der Zeitrafferfilm sein? (JJJJMMTT): " begin
begin=$begin

read -p "Bis wann soll der Film gehen? (JJJJMMTT)" end
end=$end                   

if [ ! -d Zeitraffer ]

then
echo "Ordner Zeitraffer erzeugt"

/bin/mkdir Zeitraffer

fi

sleep 3

cp *$begin-1200*.jpg ./Zeitraffer

while [ $begin != $end ] 

do

begin=`date +"%Y%m%d" -d "$begin +1 day"`

    echo "Kopiere Bild Schedule_$begin-1200*.jpg in den Zeitrafferordner"

        cp *$begin-1200*.jpg ./Zeitraffer

done  

  cd Zeitraffer
    echo "Erzeuge Zeitraffer$begin"-"$end.avi"

  $(ffmpeg -r 12 -pattern_type glob -i "*.jpg" -c:v libx264 Zeitraffer$begin"-"$end.avi)

Одна из переменных «$ begin» меняет свое значение из-за копирования диапазона изображений во временную папку. Диапазон изображений правильный, но название фильма с интервальной съемкой будет $(ffmpeg -r 12 -pattern_type glob -i "*.jpg" -c:v libx264 Zeitraffer$begin"-"$end.avi) Логически " $ begin "также получает значение" $ end ", поэтому файл выглядит, например, следующим образом: Zeitraffer20150131-20150131.avi Есть ли способ использовать первое приглашение также в качестве фиксированного значения, чтобы я мог использовать его в конце, чтобы сделать фильм ? Это должно выглядеть как Zeitraffer20150101-20150131.avi

2 ответа2

0

Во-первых, команды begin=$begin и end=$end вообще ничего не делают, поэтому теряйте их. Во-вторых, вместо того, чтобы увеличивать $begin при прохождении цикла, создайте другую переменную (например, $current) для дня, в котором она в данный момент работает; установите значение $begin в начале и остановите, когда оно будет равно $end:

current=$begin
cp *$current-1200*.jpg ./Zeitraffer

while [ $current != $end ]; do

    current=`date +"%Y%m%d" -d "$current +1 day"`
    ...
0

Спасибо! Это сработало. Теперь это выглядит так:

   #!/bin/bash

read -p "Von welchem Zeitraum soll der Zeitrafferfilm sein? (JJJJMMTT): " begin
begin=$begin

read -p "Bis wann soll der Film gehen? (JJJJMMTT)" end
end=$end                   

if [ ! -d Zeitraffer ]

then
echo "Ordner Zeitraffer erzeugt"

/bin/mkdir Zeitraffer

fi

current=$begin

  cp *$current-1200*.jpg ./Zeitraffer

while [ $current != $end ]; do

    current=`date +"%Y%m%d" -d "$current +1 day"`

    echo "Kopiere Bild Schedule_$current-1200*.jpg in den Zeitrafferordner"

    cp *$current-1200*.jpg ./Zeitraffer
done  

  cd Zeitraffer
    echo "Erzeuge Zeitraffer$begin"-"$end.avi"

  $(ffmpeg -r 12 -pattern_type glob -i "*.jpg" -c:v libx264 Zeitraffer$begin"-"$end.avi)  
rm *.jpg # Löscht die temporär kopierten Bilder
echo "Temporäre Bilder wurden gelöscht."

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