ab_compare_x265.sh 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #!/bin/bash
  2. set -e
  3. if [ -z $DAALA_ROOT ]; then
  4. DAALA_ROOT=.
  5. fi
  6. if [ -z $X265_ROOT ] || [ ! -d $X265_ROOT ]; then
  7. echo "Please set X265_ROOT to the location of your x265 hg checkout"
  8. exit 1
  9. fi
  10. if [ -z "$ENCODER_EXAMPLE" ]; then
  11. ENCODER_EXAMPLE=$DAALA_ROOT/examples/encoder_example
  12. fi
  13. if [ -z "$DUMP_VIDEO" ]; then
  14. DUMP_VIDEO=$DAALA_ROOT/examples/dump_video
  15. fi
  16. if [ -z "$X265" ]; then
  17. export X265=$X265_ROOT/build/linux/x265
  18. fi
  19. if [ -z "$Y4M2PNG" ]; then
  20. Y4M2PNG=$DAALA_ROOT/tools/y4m2png
  21. fi
  22. if [ ! -x "$ENCODER_EXAMPLE" ]; then
  23. echo "Executable not found ENCODER_EXAMPLE=$ENCODER_EXAMPLE"
  24. echo "Do you have the right DAALA_ROOT=$DAALA_ROOT"
  25. exit 1
  26. fi
  27. if [ ! -x "$DUMP_VIDEO" ]; then
  28. echo "Executable not found DUMP_VIDEO=$DUMP_VIDEO"
  29. echo "Do you have the right DAALA_ROOT=$DAALA_ROOT"
  30. exit 1
  31. fi
  32. if [ ! -x "$X265" ]; then
  33. echo "Executable not found X265=$X265"
  34. echo "Do you have the right X265_ROOT=$X265_ROOT"
  35. exit 1
  36. fi
  37. if [ ! -x "$Y4M2PNG" ]; then
  38. echo "Executable not found Y4M2PNG=$Y4M2PNG"
  39. echo "Do you have the right DAALA_ROOT=$DAALA_ROOT"
  40. exit 1
  41. fi
  42. if [ -z $V ]; then
  43. V=29
  44. fi
  45. for FILE in $@; do
  46. echo $FILE
  47. BASENAME=$(basename $FILE)
  48. $ENCODER_EXAMPLE -v $V $FILE -o $BASENAME-$V.ogv 2> /dev/null
  49. $DUMP_VIDEO -o $BASENAME-$V.ogv.y4m $BASENAME-$V.ogv 2> /dev/null
  50. $Y4M2PNG -o $BASENAME-$V.ogv.png $BASENAME-$V.ogv.y4m
  51. OGV_SIZE=$(stat -c %s $BASENAME-$V.ogv)
  52. WIDTH=$(head -1 $FILE | cut -d\ -f 2 | tr -d 'W')
  53. HEIGHT=$(head -1 $FILE | cut -d\ -f 3 | tr -d 'H')
  54. QSTR="--crf=\$x"
  55. for i in {51..1}; do
  56. X265_FILE=$BASENAME-$i.x265.tmp
  57. $X265 -r $X265_FILE.y4m $(echo $QSTR | sed 's/\$x/'$i'/g') -o $X265_FILE $FILE 2> /dev/null > /dev/null
  58. X265_SIZE=$(stat -c %s $X265_FILE)
  59. if (($X265_SIZE > $OGV_SIZE)); then
  60. if [[ -z $X265_LAST_SIZE ]]; then
  61. mv $X265_FILE $BASENAME-$i.x265
  62. mv $X265_FILE.y4m $BASENAME-$i.x265.y4m
  63. else
  64. if (($X265_SIZE - $OGV_SIZE < $OGV_SIZE - $X265_LAST_SIZE)); then
  65. mv $X265_FILE $BASENAME-$i.x265
  66. mv $X265_FILE.y4m $BASENAME-$i.x265.y4m
  67. else
  68. mv $X265_LAST_FILE $BASENAME-$i.x265
  69. mv $X265_LAST_FILE.y4m $BASENAME-$i.x265.y4m
  70. fi
  71. fi
  72. $Y4M2PNG -o $BASENAME-$i.x265.png $BASENAME-$i.x265.y4m
  73. rm $BASENAME-$i.x265.y4m
  74. break
  75. fi
  76. X265_LAST_SIZE=$X265_SIZE
  77. X265_LAST_FILE=$X265_FILE
  78. done
  79. rm $BASENAME-*.x265.tmp $BASENAME-*.x265.tmp.y4m $BASENAME-$V.ogv.y4m
  80. done