Набор 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.
Вы могли генерировать метку времени с даты и проверки на промежуток между каждым файлом. Одной проблемой, как уже упомянуто в комментариях, является переход на летнее время – предположение, что дата/времена является конкретной локалью.
Используя 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
mv
и т.д. Скопируйте набор файлов к тестовой папке перед вводом в эксплуатацию ;). Также отметьтеmv
вместоrm
на обработанных изображениях. Вы могли бы хотеть вручную проверить получающееся видео прежде, чем удалить их. – Runium 12.06.2013, 00:46