ab_compare_daala.sh 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. #!/bin/bash
  2. set -e
  3. while getopts 's:v:bk:d:E:D:y:n:' OPTIONS; do
  4. case $OPTIONS in
  5. s) SIZE="$OPTARG";;
  6. v) V="$OPTARG";;
  7. b) B_MODE='true';;
  8. k) KEYINT="$OPTARG";;
  9. # -b is whether or not we are running this script to produce images that
  10. # are for the secondary Daala in an a-b comparison, as opposed to the
  11. # first.
  12. d) DAALA_ROOT="$OPTARG";;
  13. E) ENCODER_EXAMPLE="$OPTARG";;
  14. D) DUMP_VIDEO="$OPTARG";;
  15. Y) Y4M2PNG="$OPTARG";;
  16. n) FRAMES="$OPTARG";;
  17. esac
  18. done
  19. shift $(($OPTIND - 1))
  20. if [[ -n "$V" && -n "$SIZE" ]]; then
  21. echo "Both quality setting and size specified."
  22. exit 1
  23. fi
  24. if [[ -z "$V" && -z "$SIZE" ]]; then
  25. echo "Neither quality setting and size specified."
  26. exit 1
  27. fi
  28. if [ -z "$DAALA_ROOT" ]; then
  29. DAALA_ROOT=.
  30. fi
  31. if [ -z "$ENCODER_EXAMPLE" ]; then
  32. ENCODER_EXAMPLE=$DAALA_ROOT/examples/encoder_example
  33. fi
  34. if [ -z "$DUMP_VIDEO" ]; then
  35. DUMP_VIDEO=$DAALA_ROOT/examples/dump_video
  36. fi
  37. if [ -z "$Y4M2PNG" ]; then
  38. Y4M2PNG=$DAALA_ROOT/tools/y4m2png
  39. fi
  40. if [ ! -x "$ENCODER_EXAMPLE" ]; then
  41. echo "Example encoder not found at '$ENCODER_EXAMPLE.'"
  42. exit 1
  43. fi
  44. if [ ! -x "$DUMP_VIDEO" ]; then
  45. echo "Video dumper not found at '$DUMP_VIDEO'."
  46. exit 1
  47. fi
  48. if [ ! -x "$Y4M2PNG" ]; then
  49. echo "Y4M2PNG not found at '$Y4M2PNG'."
  50. exit 1
  51. fi
  52. if [ -z "$FRAMES" ]; then
  53. FRAMES=1
  54. fi
  55. if [ -z "$KEYINT" ]; then
  56. KEYINT=256
  57. fi
  58. FILE=$1
  59. BASENAME=$(basename "$FILE")
  60. if [ -n "$V" ]; then
  61. echo "$FILE"
  62. $ENCODER_EXAMPLE -v $V "$FILE" -o "$BASENAME-$V.ogv" 2> /dev/null
  63. $DUMP_VIDEO -o "$BASENAME-$V.ogv.y4m" "$BASENAME-$V.ogv" 2> /dev/null
  64. if [ $FRAMES -eq 1 ]; then
  65. $Y4M2PNG -o "$BASENAME-$V.ogv.png" "$BASENAME-$V.ogv.y4m"
  66. rm "$BASENAME-$V.ogv.y4m"
  67. fi
  68. else
  69. # With Daala, the lowest quantizer number yields the highest quality and
  70. # vice versa. Here, MAX_QUALITY produces the best looking image, so it's the
  71. # lowest number.
  72. MAX_QUALITY=0
  73. MIN_QUALITY=511
  74. while (( $MIN_QUALITY - $MAX_QUALITY > 1 )); do
  75. QUALITY=$(( ($MIN_QUALITY + $MAX_QUALITY) / 2 ))
  76. if [ "$B_MODE" == 'true' ]; then
  77. OGV_FILE="$BASENAME-b-$QUALITY.ogv.tmp"
  78. else
  79. OGV_FILE="$BASENAME-$QUALITY.ogv.tmp"
  80. fi
  81. $ENCODER_EXAMPLE -v $QUALITY "$FILE" -k $KEYINT -o "$OGV_FILE" 2> /dev/null
  82. OGV_SIZE=$(stat -c %s "$OGV_FILE")
  83. if (($OGV_SIZE > $SIZE)); then
  84. MAX_QUALITY=$QUALITY
  85. MAX_QUALITY_SIZE=$OGV_SIZE
  86. else
  87. MIN_QUALITY=$QUALITY
  88. MIN_QUALITY_SIZE=$OGV_SIZE
  89. fi
  90. done
  91. if [ $MIN_QUALITY -eq 511 ]; then
  92. if [ "$B_MODE" == 'true' ]; then
  93. FILENAME="$BASENAME-b-$MIN_QUALITY.ogv.tmp"
  94. else
  95. FILENAME="$BASENAME-$MIN_QUALITY.ogv.tmp"
  96. fi
  97. $ENCODER_EXAMPLE -v $MIN_QUALITY "$FILE" -k $KEYINT -o "$FILENAME" 2> /dev/null
  98. MIN_QUALITY_SIZE=$(stat -c %s "$FILENAME")
  99. fi
  100. if [ $MAX_QUALITY -eq 0 ]; then
  101. if [ "$B_MODE" == 'true' ]; then
  102. FILENAME="$BASENAME-b-$MAX_QUALITY.ogv.tmp"
  103. else
  104. FILENAME="$BASENAME-$MAX_QUALITY.ogv.tmp"
  105. fi
  106. $ENCODER_EXAMPLE -v $QUALITY "$FILE" -k $KEYINT -o "$FILENAME" 2> /dev/null
  107. MAX_QUALITY_SIZE=$(stat -c %s "$FILENAME")
  108. fi
  109. if (( $MAX_QUALITY_SIZE - $SIZE < $SIZE - $MIN_QUALITY_SIZE )); then
  110. VPX_SIZE=$MAX_QUALITY_SIZE
  111. BEST_QUALITY=$MAX_QUALITY
  112. else
  113. BEST_QUALITY=$MIN_QUALITY
  114. VPX_SIZE=$MIN_QUALITY_SIZE
  115. fi
  116. if [ "$B_MODE" == 'true' ]; then
  117. BEST_FILE="$BASENAME-b-$BEST_QUALITY.ogv"
  118. else
  119. BEST_FILE="$BASENAME-$BEST_QUALITY.ogv"
  120. fi
  121. mv "$BEST_FILE.tmp" "$BEST_FILE"
  122. $DUMP_VIDEO -o "$BEST_FILE.y4m" "$BEST_FILE" 2>/dev/null
  123. if [ $FRAMES -eq 1 ]; then
  124. $Y4M2PNG -o "$BEST_FILE.png" "$BEST_FILE.y4m"
  125. rm "$BASENAME"-*.ogv.tmp "$BEST_FILE.y4m"
  126. else
  127. rm "$BASENAME"-*.ogv.tmp
  128. fi
  129. fi