Converter script bash -ban

Kaptam egy csomó .mpg videót. Csak mivel ebben nem igazán lehet tekerni, gondoltam újra convertálom őket .mp4-be, ezért csináltam egy kis scriptet.
Gondolom, más is hasznát veszi:

#!/bin/bash

FILE=( `echo $1 | sed -e 's/^\(.*\)\(\.[a-z]*\)$/\1 \2/i'` )
TMP="/tmp/`printf "%x\n" $[$RANDOM*$RANDOM]`"

function audioDump() {
mplayer -msglevel all=1 $1 -dumpaudio -dumpfile $2
}

function videoDump() {
mplayer -msglevel all=1 $1 -dumpvideo -dumpfile $2
}

function audioConvert() {
if [ ! -f "$TMP-audio.wav" ]; then
mplayer -msglevel all=1 $1 -ao pcm:file="$TMP-audio.wav"
fi

if [ ! -f "$TMP-rawaudio.aac" ] && [ -f "$TMP-audio.wav" ]; then
faac -c 48000 -b 192k -o "$TMP-rawaudio.aac" "$TMP-audio.wav"
fi
rm "$TMP-audio.wav"
}

function videoConvert() {
if [ ! -f "$TMP-firstpass.log" ]; then
# pass 1
mencoder -msglevel all=0 -mc 0 -noskip -ofps 25 -ovc x264 -x264encopts turbo=1:keyint=125:bitrate=2500:vbv_maxrate=5000:vbv_bufsize=660:cabac:direct_pred=auto:me=umh:me_range=16:scenecut=40:qcomp=0.6:qp_min=10:qp_max=51:qp_step=4:bframes=8:b_adapt:weight_b:b_pyramid:partitions=all:8x8dct:nofast_pskip:threads=auto:mixed_refs:chroma_me:pass=1 -nosound -passlogfile "$TMP-firstpass.log" -of rawvideo -o /dev/null $1
fi

if [ ! -f "$TMP-rawvideo.h264" ]; then
# pass 2
mencoder -msglevel all=0 -mc 0 -noskip -ofps 25 -ovc x264 -x264encopts turbo=1:keyint=125:bitrate=2500:vbv_maxrate=5000:vbv_bufsize=660:cabac:direct_pred=auto:me=umh:me_range=16:scenecut=40:qcomp=0.6:qp_min=10:qp_max=51:qp_step=4:bframes=8:b_adapt:weight_b:b_pyramid:partitions=all:8x8dct:nofast_pskip:threads=auto:mixed_refs:chroma_me:pass=2 -nosound -passlogfile "$TMP-firstpass.log" -of rawvideo -o "$TMP-rawvideo.h264" $1
fi

if [ -e "$TMP-rawvideo.h264" ] && [ -e "$TMP-rawaudio.aac" ]; then
MP4Box -lang HUN -add "$TMP-rawaudio.aac" -add "$TMP-rawvideo.h264" "${FILE[0]}.mp4"
fi
}

function audio() {
IN="$1"
OUT="$TMP-audio.pcm"

audioDump $IN $OUT
audioConvert $OUT

rm $OUT
}

function video() {
IN="$1"
OUT="$TMP-video${FILE[1]}"

videoDump $IN $OUT
videoConvert $OUT

rm $OUT
}

audio $1 &
video $1

rm "$TMP-firstpass.log" "$TMP-rawaudio.aac" "$TMP-rawvideo.h264"

Ha esetleg van optimalizálási javaslatod csak nyugottan!

Hozzászólások

Nem tudom, kell-e a kétmenetes kódolás.
Szóval, én így egyszerűsíteném:

mkdir mp4_konyvtar ;for i in *.mpg ; do mencoder "$i" -oac faac -faacopts br=192:mpeg=4:object=2:raw \
-channels 2 -srate 48000 -ovc x264 -x264encopts \
crf=18:nofast_pskip:nodct_decimate:nocabac:global_header:threads=4 -of lavf \
-lavfopts format=mp4 -o "mp4_konyvtar/$i.mp4"; done