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));做完成