ab_compare_x264.sh 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #!/bin/bash
  2. set -e
  3. if [ -z $DAALA_ROOT ]; then
  4. DAALA_ROOT=.
  5. fi
  6. if [ -z $X264_ROOT ] || [ ! -d $X264_ROOT ]; then
  7. echo "Please set X264_ROOT to the location of your x264 git clone"
  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 "$X264" ]; then
  17. export X264=$X264_ROOT/x264
  18. fi
  19. if [ -z "$YUV2YUV4MPEG" ]; then
  20. YUV2YUV4MPEG=$DAALA_ROOT/tools/yuv2yuv4mpeg
  21. fi
  22. if [ -z "$Y4M2PNG" ]; then
  23. Y4M2PNG=$DAALA_ROOT/tools/y4m2png
  24. fi
  25. if [ ! -x "$ENCODER_EXAMPLE" ]; then
  26. echo "Executable not found ENCODER_EXAMPLE=$ENCODER_EXAMPLE"
  27. echo "Do you have the right DAALA_ROOT=$DAALA_ROOT"
  28. exit 1
  29. fi
  30. if [ ! -x "$DUMP_VIDEO" ]; then
  31. echo "Executable not found DUMP_VIDEO=$DUMP_VIDEO"
  32. echo "Do you have the right DAALA_ROOT=$DAALA_ROOT"
  33. exit 1
  34. fi
  35. if [ ! -x "$X264" ]; then
  36. echo "Executable not found X264=$X264"
  37. echo "Do you have the right X264_ROOT=$X264_ROOT"
  38. exit 1
  39. fi
  40. if [ ! -x "$YUV2YUV4MPEG" ]; then
  41. echo "Executable not found YUV2YUV4MPEG=$YUV2YUV4MPEG"
  42. echo "Do you have the right DAALA_ROOT=$DAALA_ROOT"
  43. exit 1
  44. fi
  45. if [ ! -x "$Y4M2PNG" ]; then
  46. echo "Executable not found Y4M2PNG=$Y4M2PNG"
  47. echo "Do you have the right DAALA_ROOT=$DAALA_ROOT"
  48. exit 1
  49. fi
  50. if [ -z $V ]; then
  51. V=29
  52. fi
  53. for FILE in $@; do
  54. echo $FILE
  55. BASENAME=$(basename $FILE)
  56. $ENCODER_EXAMPLE -v $V $FILE -o $BASENAME-$V.ogv 2> /dev/null
  57. $DUMP_VIDEO -o $BASENAME-$V.ogv.y4m $BASENAME-$V.ogv 2> /dev/null
  58. $Y4M2PNG -o $BASENAME-$V.ogv.png $BASENAME-$V.ogv.y4m
  59. OGV_SIZE=$(stat -c %s $BASENAME-$V.ogv)
  60. WIDTH=$(head -1 $FILE | cut -d\ -f 2 | tr -d 'W')
  61. HEIGHT=$(head -1 $FILE | cut -d\ -f 3 | tr -d 'H')
  62. QSTR="--preset placebo --crf=\$x"
  63. for i in {51..1}; do
  64. X264_FILE=$BASENAME-$i.x264.tmp
  65. $X264 --dump-yuv $X264_FILE.yuv $(echo $QSTR | sed 's/\$x/'$i'/g') -o $X264_FILE $FILE 2> /dev/null > /dev/null
  66. X264_SIZE=$(stat -c %s $X264_FILE)
  67. if (($X264_SIZE > $OGV_SIZE)); then
  68. if [[ -z $X264_LAST_SIZE ]]; then
  69. mv $X264_FILE $BASENAME-$i.x264
  70. mv $X264_FILE.yuv $BASENAME-$i.x264.yuv
  71. else
  72. if (($X264_SIZE - $OGV_SIZE < $OGV_SIZE - $X264_LAST_SIZE)); then
  73. mv $X264_FILE $BASENAME-$i.x264
  74. mv $X264_FILE.yuv $BASENAME-$i.x264.yuv
  75. else
  76. mv $X264_LAST_FILE $BASENAME-$i.x264
  77. mv $X264_LAST_FILE.yuv $BASENAME-$i.x264.yuv
  78. fi
  79. fi
  80. $YUV2YUV4MPEG $BASENAME-$i.x264 -w$WIDTH -h$HEIGHT -an0 -ad0 -c420mpeg2
  81. $Y4M2PNG -o $BASENAME-$i.x264.png $BASENAME-$i.x264.y4m
  82. rm $BASENAME-$i.x264.yuv $BASENAME-$i.x264.y4m
  83. break
  84. fi
  85. X264_LAST_SIZE=$X264_SIZE
  86. X264_LAST_FILE=$X264_FILE
  87. done
  88. rm $BASENAME-*.x264.tmp $BASENAME-*.x264.tmp.yuv $BASENAME-$V.ogv.y4m
  89. done