Advertisement
Guest User

Michael Pedersen / Convert Video To MP4

a guest
Nov 24th, 2010
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.81 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. if [ $# -ne 1 ]; then
  4.    echo Usage: $0 '<source>'
  5.    exit 1
  6. fi
  7.  
  8. test -e $1 || { echo No such file $1. Aborting. ; exit 1 ; }
  9.  
  10. export TMPNAME=`echo $1 | sed -e 's/\..*$//'`
  11.  
  12. export MAXWIDTH=800
  13. export MAXHEIGHT=480
  14.  
  15. export VHEIGHT=`mplayer -ao null -vo null -frames 0 -identify $1 2>/dev/null | grep ^ID_VIDEO_HEIGHT | sed -e 's/ID_VIDEO_HEIGHT=//'`
  16. export VWIDTH=`mplayer -ao null -vo null -frames 0 -identify $1 2>/dev/null | grep ^ID_VIDEO_WIDTH | sed -e 's/ID_VIDEO_WIDTH=//'`
  17. if [ ${VWIDTH} -ne ${MAXWIDTH} ]; then
  18.     export SF=`echo "scale=4; ${MAXWIDTH}/${VWIDTH}" | bc`
  19.     export VWIDTH=`echo ${VWIDTH}'*'${SF} | bc | sed -e 's/\..*$//'`
  20.     export VHEIGHT=`echo ${VHEIGHT}'*'${SF} | bc | sed -e 's/\..*$//'`
  21. fi
  22. if [ ${VHEIGHT} -gt ${MAXHEIGHT} ]; then
  23.     export SF=`echo "scale=4; ${MAXHEIGHT}/${VHEIGHT}" | bc`
  24.     export VWIDTH=`echo ${VWIDTH}'*'${SF} | bc | sed -e 's/\..*$//'`
  25.     export VHEIGHT=`echo ${VHEIGHT}'*'${SF} | bc | sed -e 's/\..*$//'`
  26. fi
  27.  
  28. export VKBPS=2000
  29. export AKBPS=44100
  30. export MPLAYER_VERBOSE="all=0:mencoder=1:statusline=5"
  31. export X264OPTS="-x264encopts bitrate=$VKBPS:frameref=8:bframes=0:b_adapt:weight_b:partitions=all:8x8dct:me=umh:subq=6:trellis=2:threads=auto:analyse=all:pass="
  32. export FAACOPTS="-faacopts br=192:mpeg=4:object=2 -channels 2 -srate $AKBPS"
  33. export MISCOPTS="-ofps 24000/1001 -vf harddup -vf scale=${VWIDTH}:${VHEIGHT},expand=${MAXWIDTH}:${MAXHEIGHT} -msglevel $MPLAYER_VERBOSE"
  34. export PASSLOGFILE="div2pass_$1.log"
  35.  
  36. trap cleanup INT
  37.  
  38. echo '***********************************'
  39. echo Converting $1 to mp4
  40. echo '***********************************'
  41.  
  42. for pass in 1 2; do
  43.     echo '***********************************'
  44.     echo Pass $pass
  45.     echo '***********************************'
  46.     test -e "$2" && rm "$2"
  47.     mencoder "$1" -passlogfile "$PASSLOGFILE" -o "$TMPNAME.avi"  -ovc x264 $X264OPTS$pass -sws 2 -oac faac $FAACOPTS $MISCOPTS
  48.     done
  49.  
  50. echo '***********************************'
  51. echo Splitting A/V streams
  52. echo '***********************************'
  53. mplayer "$TMPNAME.avi" -dumpaudio -dumpfile "$TMPNAME.aac" 2>/dev/null
  54. mplayer "$TMPNAME.avi" -dumpvideo -dumpfile "$TMPNAME.h264" 2>/dev/null
  55.  
  56. echo '***********************************'
  57. echo Merging to MP4 Container
  58. echo '***********************************'
  59. test -e "$TMPNAME.mp4" && rm -f "$TMPNAME.mp4"
  60. mp4creator -force3GPCompliance -create="$TMPNAME.h264" -rate=23.976 "$TMPNAME.mp4"
  61. mp4creator -force3GPCompliance -create="$TMPNAME.aac" -interleave -optimize "$TMPNAME.mp4"
  62.  
  63. cleanup() {
  64.     for file in "$PASSLOGFILE" "$PASSLOGFILE.mbtree" "$TMPNAME.avi" "$TMPNAME.aac" "$TMPNAME.h264" ; do
  65.     test -e $file && rm $file
  66.     done
  67. }
  68. cleanup
  69.  
  70. echo '***********************************'
  71. echo All work completed for ${TMPNAME}.mp4
  72. echo '***********************************'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement