Advertisement
Guest User

daniel

a guest
Feb 10th, 2012
386
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.46 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # list of programs we depend on
  4. progs="xdpyinfo grep head sed ffmpeg pacat parec sox"
  5.  
  6. # check for programs we depend on
  7. result=0
  8. for prog in $progs
  9. do
  10. type -p $prog > /dev/null
  11. if (( $? != 0 )); then
  12. echo "Error: Cannot find required program '$prog'"
  13. result=1
  14. fi
  15. done
  16. if (( $result != 0 )); then
  17. exit 1
  18. fi
  19.  
  20. screenSize="1280x1024" # default if we cant detect it
  21. screenOffset="0,0" # default to top-left corner
  22. frameRate="24" # default frame rate
  23. baseName="speed_art" # default base filename for capture
  24.  
  25. # attempt to detect the dimension of the screen for the default
  26. dimensions=`xdpyinfo | grep 'dimensions:' | head -1 | \
  27. sed -e 's/^.* \([0-9]\+x[0-9]\+\) pixels.*$/\1/'`
  28. if [[ "$dimensions" =~ [0-9]+x[0-9]+ ]]; then
  29. screenSize=$dimensions
  30. fi
  31.  
  32. # collect command line settings
  33. while getopts 'hs:o:t:p' param ; do
  34. case $param in
  35. s)
  36. screenSize="$OPTARG"
  37. ;;
  38. o)
  39. screenOffset="$OPTARG"
  40. ;;
  41. t)
  42. timeToRecord="$OPTARG"
  43. ;;
  44. *)
  45. echo ""
  46. echo "$0 - records screencast"
  47. echo ""
  48. echo "$0 [options] [base-filename]"
  49. echo ""
  50. echo "options:"
  51. echo " -h show brief help"
  52. echo " -s <size> screensize to record as <width>x<height>"
  53. echo " -o <offset> offset off recording area as <xoffset>,<yoffset>"
  54. echo " -t <time> time to record (in seconds)"
  55. echo ""
  56. exit 0
  57. ;;
  58. esac
  59. done
  60.  
  61. shift $(( $OPTIND - 1 ))
  62.  
  63. # determine basename of files
  64. if [ -n "$1" ] ; then
  65. baseName="$1"
  66. fi
  67.  
  68. echo ""
  69. echo "Size = $screenSize"
  70. echo "Offset = $screenOffset"
  71. echo "Rate = $frameRate"
  72. echo "Filename = $baseName"
  73.  
  74. # get ready to start recording
  75. echo ""
  76. if [ -n "$timeToRecord" ]; then
  77. echo "Preparing to capture for $timeToRecord seconds."
  78. else
  79. echo "Preparing to capture."
  80. echo "Press ENTER when finished capturing."
  81. fi
  82. sleep 3
  83. echo ""
  84.  
  85. # start playing silence to make sure there is always audio flowing
  86. pacat /dev/zero &
  87. pidSilence=$!
  88.  
  89. # starts recording video using x11grab to make mpeg2video
  90. ffmpeg -y -an \
  91. -s "$screenSize" -r "$frameRate" -f x11grab -i :0.0+"$screenOffset" \
  92. -s "$screenSize" -r "$frameRate" -aspect 4:3 -vcodec mpeg2video -sameq \
  93. -f mpeg2video "$baseName.mpeg" &
  94. pidVideo=$!
  95.  
  96. # starts recording raw audio
  97. parec --format=s16le --rate=44100 --channels=2 $baseName.raw &
  98. pidAudio=$!
  99.  
  100. echo ""
  101. echo "Video recording started with process ID $pidVideo"
  102. echo "Audio recording started with process ID $pidAudio"
  103. echo ""
  104.  
  105. # wait for recording to be done, either by timer or user hitting enter
  106. if [ -n "$timeToRecord" ]; then
  107. sleep "$timeToRecord"
  108. else
  109. read nothing
  110. fi
  111.  
  112. # stop recordings
  113. echo ""
  114. echo "Terminating recordings ..."
  115. kill -15 $pidVideo $pidAudio
  116. kill -15 $pidSilence
  117. wait
  118.  
  119. # filter and normalize the audio
  120. echo ""
  121. echo "Filtering and normalizing sound ..."
  122. sox --norm -s -b 16 -L -r 44100 -c 2 "$baseName.raw" "$baseName.wav" highpass 65 lowpass 12k
  123.  
  124. # encode video and audio into avi file
  125. echo ""
  126. echo "Encoding to final avi ..."
  127. ffmpeg -isync -i "$baseName.wav" -i "$baseName.mpeg" -acodec mp2 -ab 192k -vcodec copy "$baseName.avi"
  128.  
  129. # convert to ogg - to turn on uncomment next three lines
  130. #echo""
  131. #echo "convert to theora"
  132. #ffmpeg2theora "$baseName.avi" -o "$baseName.ogv"
  133.  
  134. # convert avi to flv - to turn on uncomment next three lines
  135. #echo""
  136. #echo "convert to theora"
  137. # ffmpeg -i "$baseNamee.avi" -ab 56 -ar 44100 -b 200 -r 15 -s 320x240 -f flv "$baseNamee.flv"
  138.  
  139. echo ""
  140. echo "DONE! Final media written in file $baseName.avi"
  141.  
  142. echo ""
  143. exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement