Сценарий потребности: последний JPEGs к видео, затем удалите старый JPEGs

Набор multilib_policy=best в Вашем yum.conf это принимает значение по умолчанию ко 'всем' так, что это устанавливает и i386 и x86_64 пакеты. При установке его на 'лучший', это только установит i386, если будет версия № x86_64.

Из страницы справочника CentOS 5 yum.conf:

multilib_policy - Can be set to ’all’ or ’best’. All means
install all possible arches for any package you  want  to
install.  Therefore yum install foo will install foo.i386
and foo.x86_64 on x86_64, if it is available. Best  means
install the best arch for this platform, only.
3
09.06.2013, 03:52
1 ответ

Вы могли генерировать метку времени с даты и проверки на промежуток между каждым файлом. Одной проблемой, как уже упомянуто в комментариях, является переход на летнее время – предположение, что дата/времена является конкретной локалью.

Используя stat вместо имен файлов, поскольку основа могла помочь на этом. Но, то усиление зависит от того, как файлы загружаются (если метки времени сохраняются и т.д.),

Как начальная точка (это стало намного длиннее затем предназначенный) Вы могли попробовать что-то вроде этого:

#!/bin/bash

declare -a fa_tmp=()    # Array holding tmp files with jpg collections.
declare dd=""           # Date extracted form file name.
declare -i ts=0         # Time stamp from date.
declare -i pre=0        # Previous time stamp.
declare -i lim=2        # Limit in seconds triggering new collection.
fmt_base='+%F-%H_%M_%S' # Format for date to generate video file name.

# Perhaps better using date from file-name:
# export TZ=UTC
# stat --printf=%Y $f

# Loop all jpg files
for f in *.jpg; do
    # Extract date, optionally use mktime() with gawk.
    # This assumes XX_XX_DATETIME_XXX... by split on underscore.
    dd=$(printf "$f" | tr '_' ' ' | awk '{
    printf("%d-%02d-%02d %02d:%02d:%02d",
        substr($3,  1, 4),
        substr($3,  5, 2),
        substr($3,  7, 2),
        substr($3,  9, 2),
        substr($3, 11, 2),
        substr($3, 13, 2))
    }')

    # Create time stamp from date.
    ts=$(date +%s -d "$dd")

    # If duration is greater then lim, create new tmp file.
    if ((ts - pre > lim)); then
        f_tmp="$(mktemp)"
        fa_tmp+=("$f_tmp")
        # First line in tmp file is first time stamp.
        printf "%s\n" "$ts" >> "$f_tmp"
    fi

    # Add filename to current tmp file.
    printf "%s\n" "$f" >> "$f_tmp"

    # Previous is current.
    pre="$ts"
done

declare -i i=1
# Loop tmp files.
for f_tmp in "${fa_tmp[@]}"; do
    printf "PROCESSING: %s\n---------------------------\n" "$f_tmp"
    base=""
    i=1

    # Rename files.
    while read -r img; do
        # First line is time stamp and is used as base for name.
        if [[ "$base" == "" ]]; then
            base=$(date "$fmt_base" -d "@$img")
            continue
        fi
        # New image name.
        iname=$(printf "%s-%04d.jpg" "$base" "$i")
        echo "mv '$img' => '$iname'"
        mv "$img" "$iname"
        ((++i))
    done <"$f_tmp"

    # Generate video.
    if ffmpeg -f image2 \
        -framerate 3 \
        -pattern_type sequence \
        -start_number 1 \
        -i "$base-%04d.jpg" \
        -vcodec mpeg4 \
        -r 6 \
        "$base.mp4"; then

        # Iff success, move jpg's to backup folder.
        mkdir "$base"
        mv $base-*.jpg "$base"
    else
        printf "FAILED:\n" >&2
        ls $base-*.jpg >&2
    fi

    # Remove tmp file.
    rm "$f_tmp"
done
2
27.01.2020, 21:28
  • 1
    WOW! Это удивительно, я никогда не мог бы предложить решение как это! Я не могу дождаться, чтобы испытать его. Огромное спасибо! Я отправлю назад с обновлением! –  nLinked 12.06.2013, 00:21
  • 2
    @nLinked: Надеюсь, что это работает, как предназначено. mp4 поколение с ffmpeg было только быстрым мэшапом, который, вероятно, может быть лучше. Вы, возможно, также включили бы еще некоторую проверку ошибок mv и т.д. Скопируйте набор файлов к тестовой папке перед вводом в эксплуатацию ;). Также отметьте mv вместо rm на обработанных изображениях. Вы могли бы хотеть вручную проверить получающееся видео прежде, чем удалить их. –  Runium 12.06.2013, 00:46
  • 3
    Еще раз спасибо, Sukminder, и для того, чтобы занять время для создания его для меня. Это работает блестяще. Я все еще играю вокруг с настройками и подстройкой. Это была реальная справка! –  nLinked 15.06.2013, 21:56

Теги

Похожие вопросы