Bash - 直到循环和计数器问题

时间:2017-04-11 22:54:41

标签: bash counter

我正在编写一个脚本来使用ffmpeg压缩视频文件并尝试创建一个until循环,直到copression ratio超过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

基本上我想:

  • 检查原始/压缩ratio
  • 如果ratio&lt; 1.5
  • 添加&#34; 1&#34;到了 参数${crf}(恒定速率因子)并再次压缩
  • ...继续执行此操作until此比率超过1.5

由于某些原因,如果我运行脚本,它会在每次迭代时向CRF添加2而不是1,并且脚本永远不会退出重新压缩。 我错过了一些重要的东西吗?

0 个答案:

没有答案