gpt4 book ai didi

bash - 使用目录中最近的 7 个 jpg 文件制作 gif (ffmpeg)

转载 作者:行者123 更新时间:2023-12-04 22:53:07 26 4
gpt4 key购买 nike

我有一个在 cron 上运行的 bash 脚本,用于截取我的 cctv 每天 1x 的屏幕截图,以进行年度延时摄影。一切正常,我得到了 YTD sofar.gif从第一个屏幕截图到最后一个屏幕截图——现在已经很长了。我想添加一行来制作 last7days.gif所以我可以获得更短的每周 gif 等。

我已经搜索了这个网站和网络,可以使用以下命令列出终端中最新的 7 个文件:ls -1t | head -n 9 | tail -n 7 (这将删除最后修改的 .gif 和 .mov )但我不知道如何将 7 个文件名的垂直列表转换为变量以使用这些文件名制作 gif

# runs from a cronjob. saves live screenshot from CCTV to jpg, then updates the year-to-date movie

if [ $# -ne 1 ]
then
echo "Usage: `basename $0` OUTDIR"
exit 65
fi

doexit=0

start=$(date +%s)
end=$(date +%s)

outdir=${1%/}
mkdir $outdir
echo "Capturing image..."

counter=$(date +"%Y_%m_%d_%H-%M-%S");
file=$outdir/$counter.jpg

if response=$(curl --silent --write-out %{http_code} --max-time 600 'URL REDACTED' -o $file) ; then
echo "Captured & saved $file!"
else
echo "Failed to capture $file"
fi

ffmpeg -hide_banner -loglevel panic -pattern_type glob -i $outdir/'*.jpg' $outdir/sofar.mov -y
ffmpeg -hide_banner -loglevel panic -pattern_type glob -i $outdir/'*.jpg' $outdir/sofar.gif -y

exit 1

目前,最后几行使用每个图像文件创建一个 .gif,这仅是因为它们与文件名中的日期一起保存。

我想添加一行以仅使用最近的 7 张图片创建 .gif

最佳答案

在 shell 中进行 globbing,然后你可以获取任何你想要的子集:

#!/usr/bin/env bash
# ^^^^- NOT /bin/sh; array support is required.

shopt -s nullglob
files=( "$outdir"/*.jpg )
file_count=${#files[@]}

if (( ${#files[@]} == 0 )); then
echo "ERROR: No files found" >&2; exit 1;
elif (( ${#files[@]} > 7 )); then
files=( "${files[@]:$(( ${#files[@]} - 7 ))}" )
fi

input_args=( )
for f in "${files[@]}"; do
input_args+=( -i "$f" )
done

ffmpeg "${input_args[@]}" "$outdir/sofar.gif"

关于bash - 使用目录中最近的 7 个 jpg 文件制作 gif (ffmpeg),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57048376/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com