Bash-until循环和计数器问题
我正在编写一个脚本,使用Bash-until循环和计数器问题,bash,counter,Bash,Counter,我正在编写一个脚本,使用ffmpeg压缩视频文件,并尝试创建一个till循环,该循环运行直到压缩比超过1.5 代码如下: for f in "$@"; do BASE=${f%.*} filesize_compressed=$(stat --format=%s "${BASE}_${suffix}.mp4") filesize_original=$(stat --format=%s "${BASE}.mp4") filesize_compressed_mb=$(
ffmpeg
压缩视频文件,并尝试创建一个till
循环,该循环运行直到压缩比超过1.5
代码如下:
for f in "$@"; do
BASE=${f%.*}
filesize_compressed=$(stat --format=%s "${BASE}_${suffix}.mp4")
filesize_original=$(stat --format=%s "${BASE}.mp4")
filesize_compressed_mb=$(echo "scale=2; ${filesize_compressed} / 1024 / 1024" | bc)
filesize_original_mb=$(echo "scale=2; ${filesize_original} / 1024 / 1024" | bc)
echo -e "Compressed file size: "$(basename "${BASE}_${suffix}.mp4")" ${filesize_compressed_mb} MB"
echo -e "Original file size: "$(basename "${BASE}.mp4")" ${filesize_original_mb} MB"
compression_ratio=$(echo "scale=2; ${filesize_original} / ${filesize_compressed}" | bc)
echo -e "Compression ratio: ${compression_ratio}"
if (( $(echo "${compression_ratio} < 1.5" | bc) )); then
until (( $(echo "${compression_ratio} > 1.49" | bc) )); do
echo -e "Trying ffmpeg compression with CRF: "$(("${crf}"++))""
echo -e "Deleting "${BASE}_${suffix}.mp4""
rm -f "${BASE}_${suffix}.mp4"
ffmpeg -i "${f}" -y -f mp4 -c:a "${ca}" -b:a "${ba}" -c:v "${cv}" -crf "$(("${crf}"++))" -preset "${preset}" -map_metadata 0 "${f%.*}_${suffix}.mp4"
done
fi
done
“$@”中f的;做
基数=${f%.*}
filesize_compressed=$(stat--format=%s“${BASE}{suffix}.mp4”)
filesize_original=$(stat--format=%s“${BASE}.mp4”)
filesize_compressed_mb=$(echo“scale=2;${filesize_compressed}/1024/1024”| bc)
filesize_original_mb=$(echo“scale=2;${filesize_original}/1024/1024”| bc)
echo-e“压缩文件大小:”$(basename“${BASE}{suffix}.mp4”)“${filesize\u Compressed\u mb}mb”
echo-e“原始文件大小:”$(basename“${BASE}.mp4”)“${filesize\u Original\u mb}mb”
压缩比=$(echo“scale=2;${filesize_original}/${filesize_compressed}”bc)
echo-e“压缩比:${Compression_ratio}”
如果($(回波${compression_ratio}<1.5”| bc));然后
直到($(回波${compression_ratio}>1.49”| bc));做
echo-e“尝试使用CRF进行ffmpeg压缩:$(${CRF}”+)”
echo-e“删除“${BASE}{suffix}.mp4”
rm-f“${BASE}{suffix}.mp4”
ffmpeg-i“${f}”-y-f mp4-c:a“${ca}”-b:a“${ba}”-c:v“${cv}”-crf“$(“${crf}”+)”-预设“${preset}”-map_元数据0“${f%.}{suffix}.mp4”
完成
fi
完成
基本上,我正在努力:
- 检查原始/压缩<代码>比率<代码>
- 如果
比率<1.5
- 将“1”添加到
参数
${crf}
(恒定速率因子)并再次压缩
- 。。。继续执行此操作,直到比率超过1.5
出于某种原因,如果我运行脚本,它会在每次迭代中向CRF添加2而不是1,并且脚本永远不会退出重新压缩。
我遗漏了一些重要的东西吗?这可能与您在每次迭代中执行两次$(“${crf}”+)
有关吗?但我很惊讶它并没有失败。要增加变量crf
,您需要执行$(crf++)
好的,一个在echo中,另一个在实际命令中。我将从echo中删除一个并测试它。谢谢您可以删除if
语句;如果压缩比已经足够大,则不会输入until
循环。或者只使用while
循环,例如while($(echo“${compression\u ratio}<1.5”| bc));做完成