Pull to refresh

Перекодирование видео с xvid/divx/mpeg/и др. видео форматы в flash h264(video)+aac(audio) в два прохода

Простой скрипт для перекодирования xvid/divx/mpeg/и др. видео форматы в flash h264(video)+aac(audio) в два прохода.

качество видео задается переменной VIDEO_BITRATE
запускать: convert-x264.sh <VIDEO_FILE>, convert-x264.sh — это то, что ниже, <VIDEO_FILE> — исходный видео файл

#!/bin/sh

mplayer=/usr/src/video/mplayer/mplayer
mencoder=/usr/src/video/mplayer/mencoder
MP4Box=/usr/src/video/gpac/bin/gcc/MP4Box
faac=/usr/bin/faac

FILENAME=$1
# framerate: ntsc=29.97, pal=25, film=23.976
FPS="23.976"
#
AUDIO_BITRATE=56
# 320x240 pixels - 400kbps - 3MB/minute
# 480x360 pixels - 700kbps - 5MB/minute
# 720x540 pixels - 1000kbps - 7.5MB/minute
VIDEO_BITRATE=400
#
# Very high quality (6fps ; 0dB)
# subq=6:partitions=all:8x8dct:me=umh:frameref=5:bframes=3:b_pyramid:weight_b
# High quality (13fps ; -0.89dB)
# subq=5:8x8dct:frameref=2:bframes=3:b_pyramid:weight_b
# Fast (17fps ; -1.48dB)
# subq=4:bframes=2:b_pyramid:weight_b
#
OPTIONS_PASS_1="-passlogfile ${FILENAME%.*}-${VIDEO_BITRATE}_temp.log -ovc x264 -x264encopts bitrate=$VIDEO_BITRATE:threads=auto:subq=6:partitions=all:8x8dct:me=umh:frameref=5:bframes=3:b_pyramid:weight_b:pass=1 -vf harddup -ofps $FPS -of rawvideo -nosound"
OPTIONS_PASS_2="-passlogfile ${FILENAME%.*}-${VIDEO_BITRATE}_temp.log -ovc x264 -x264encopts bitrate=$VIDEO_BITRATE:threads=auto:subq=6:partitions=all:8x8dct:me=umh:frameref=5:bframes=3:b_pyramid:weight_b:pass=2 -vf harddup -ofps $FPS -of rawvideo -nosound"
#
START_DATE=`date`
echo ""
echo ""
echo "* * * Start Date $START_DATE * * *"
echo ""
echo ""
echo "* * * Removing temporary files ... * * *"
#if [[ -f "${FILENAME%.*}"_temp* ]] ; then rm -f "${FILENAME%.*}-${VIDEO_BITRATE}_temp*" ; fi
echo ""
echo ""
echo "* * * Starting video encoding pass 1 ... * * *"
echo ""
echo ""
if [ -f $FILENAME ] ; then
if [[ ! -f "${FILENAME%.*}-${VIDEO_BITRATE}_temp.log" ]] ; then
EXEC="$mencoder $FILENAME -o /dev/null $OPTIONS_PASS_1"
echo $EXEC
$EXEC
if [ $? -ne 0 ] ; then
echo ""
echo "* * * Error: Last execution return not zero value: $?! Exiting! * * *"
exit 1
fi
else
echo ""
echo "* * * 1ST PASS ALREADY ENCODED ... * * *"
fi
else
echo ""
echo "* * * Error: File $FILENAME doesn't exists! * * *"
exit 1
fi
echo ""
echo ""
echo "* * * Starting video encoding pass 2 ... * * *"
echo ""
echo ""
if [ -f $FILENAME ] ; then
if [[ ! -f "${FILENAME%.*}-${VIDEO_BITRATE}_temp.h264" ]] ; then
EXEC="$mencoder $FILENAME -o ${FILENAME%.*}-${VIDEO_BITRATE}_temp.h264 $OPTIONS_PASS_2"
echo $EXEC
$EXEC
if [ $? -ne 0 ] ; then
echo ""
echo "* * * Error: Last execution return not zero value: $?! Exiting! * * *"
exit 1
fi
else
echo ""
echo "* * * 2ND PASS ALREADY ENCODED ... * * *"
fi
else
echo ""
echo "* * * Error: File $FILENAME doesn't exists! * * *"
exit 1
fi
echo ""
echo ""
echo "* * * Extracting Audio to a 48khz WAV file ... * * *"
echo ""
echo ""
if [ -f $FILENAME ] ; then
if [[ ! -f "${FILENAME%.*}-${VIDEO_BITRATE}_temp.wav" ]] ; then
EXEC="$mplayer $FILENAME -af resample=48000:0:2,volnorm=2:0.25 -ao pcm:fast:waveheader:file=${FILENAME%.*}-${VIDEO_BITRATE}_temp.wav -vc null -vo null -benchmark"
echo $EXEC
$EXEC < /dev/null
if [ $? -ne 0 ] ; then
echo ""
echo "* * * Error: Last execution return not zero value: $?! Exiting! * * *"
exit 1
fi
else
echo ""
echo "* * * AUDIO STREAM ALREADY DUMPED * * *"
fi
else
echo ""
echo "* * * Error: File $FILENAME doesn't exists!"
exit 1
fi
echo ""
echo ""
echo "* * * Encoding Audio to HE-AAC plus file ... * * *"
echo ""
echo ""
if [ -f "${FILENAME%.*}-${VIDEO_BITRATE}_temp.wav" ] ; then
if [[ ! -f "${FILENAME%.*}-${VIDEO_BITRATE}_temp.m4a" ]] ; then
EXEC="$faac -b ${AUDIO_BITRATE} -w ${FILENAME%.*}-${VIDEO_BITRATE}_temp.wav -o ${FILENAME%.*}-${VIDEO_BITRATE}_temp.m4a"
echo $EXEC
$EXEC
if [ $? -ne 0 ] ; then
echo ""
echo "* * * Error: Last execution return not zero value: $?! Exiting! * * *"
exit 1
fi
else
echo ""
echo "* * * AUDIO STREAM ALREADY ENCODED * * *"
fi
else
echo ""
echo "* * * Error: File ${FILENAME%.*}-${VIDEO_BITRATE}_temp.wav doesn't exists! * * *"
exit 1
fi
echo ""
echo ""
echo "* * * Generating final MP4 container ... * * *"
echo ""
echo ""
echo "* * * Adding video to MP4 container ... * * *"
if [ -f "${FILENAME%.*}-${VIDEO_BITRATE}_temp.h264" ] ; then
EXEC="$MP4Box -add ${FILENAME%.*}-${VIDEO_BITRATE}_temp.h264#video:fps=$FPS ${FILENAME%.*}-${VIDEO_BITRATE}.m4v"
echo $EXEC
$EXEC
if [ $? -ne 0 ] ; then
echo ""
echo "* * * Error: Last execution return not zero value: $?! Exiting! * * *"
exit 1
fi
else
echo ""
echo "* * * Error: File ${FILENAME%.*}-${VIDEO_BITRATE}_temp.h264 doesn't exists! * * *"
exit 1
fi
echo ""
echo ""
echo "* * * Adding audio to MP4 container ... * * *"
if [ -f "${FILENAME%.*}-${VIDEO_BITRATE}_temp.m4a" ] ; then
EXEC="$MP4Box -add ${FILENAME%.*}-${VIDEO_BITRATE}_temp.m4a#audio ${FILENAME%.*}-${VIDEO_BITRATE}.m4v"
echo $EXEC
$EXEC
if [ $? -ne 0 ] ; then
echo ""
echo "* * * Error: Last execution return not zero value: $?! Exiting! * * *"
exit 1
fi
else
echo ""
echo "* * * Error: File ${FILENAME%.*}-${VIDEO_BITRATE}_temp.m4a doesn't exists! * * *"
exit 1
fi
echo ""
echo ""
echo "* * * Removing temporary files ... * * *"
echo ""
echo ""
rm "${FILENAME%.*}-${VIDEO_BITRATE}_temp*"

END_DATE=`date`
echo ""
echo ""
echo "* * * End Date $END_DATE * * *"
echo ""
echo ""
exit 0
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.