2012年07月31日 Encoding script for Panasonic Viera with miniDLNA [長年日記]
_ This is a encoding script that make miniDLNA can provide movie files for Panasonic Viera as DLNA client.
_ convert2dlna_mpegts.sh
This script convert any movie into mpegts(H.264, AC-3).
#! /bin/sh
#
if [ "X$1" = "X-h" -o "X$1" = "X--help" ]
then
echo "Usage : $0 -ix input_x_resolution -iy input_y_resolution [-2] [-s start_time] [ -e elaps_time] [-iax input_aspect_x] [-iay input_aspect_y] [-oax output_aspect_x] [-oay output_aspect_y] [-ab audio_bitrate] [-vb video_bitrate] [-fps frame_per_second] [-o output] inputs [-h|--help] "
echo ""
echo " -ix input_x_resolution : input x resolution"
echo " -iy input_y_resolution : input y resolution"
echo " -2 : 2-pass encoding(default none)"
echo " -s start_time : start position time"
echo " -e elaps_time : elaps(pass) time"
echo " -iax input_aspect_x : input x aspect (default ix)"
echo " -iay input_aspect_y : input y aspect (default iy)"
echo " -oax output_aspect_x : output x aspect (default 16)"
echo " -oay output_aspect_y : output y aspect (default 9)"
echo " -ab audio_bitrate : audio bitrate(Kbps) (default 600)"
echo " -vb video_bitrate : video bitrate(Kbps) (default 128)"
echo " -fps frame_per_second : frame per second (default 30000/1001)"
echo " -o output : output file (default convert2dlna.m2t)"
echo " inputs : input file names separated by space"
exit 0
fi
#
ix=""; export ix
iy=""; export iy
pass="1"
start=""
elaps=""
iax=""; export iax
iay=""; export iay
oax=16; export oax
oay=9; export oay
ab=128
vb=600
fps="30000/1001"
output="convert2dlna.m2t"
#
while [ $# != 0 ]
do
case $1 in
-ix )
shift
ix="$1"
;;
-iy )
shift
iy="$1"
;;
-2 )
pass="2"
;;
-s )
shift
start="-ss $1"
;;
-e )
shift
elaps="-endpos $1"
;;
-iax )
shift
iax="$1"
;;
-iay )
shift
iay="$1"
;;
-oax )
shift
oax="$1"
;;
-oay )
shift
oay="$1"
;;
-ab )
shift
ab="$1"
;;
-vb )
shift
vb="$1"
;;
-fps )
shift
fps="$1"
;;
-o )
shift
output="$1"
;;
* )
input="${input} $1"
;;
esac
shift
done
#
if [ "X${ix}" = "X" ]
then
echo "-ix(input x resolution) is not specified."
exit 1
fi
#
if [ "X${iy}" = "X" ]
then
echo "-iy(input y resolution) is not specified."
exit 1
fi
#
if [ "X${iax}" = "X" ]
then
iax=${ix}
fi
#
if [ "X${iay}" = "X" ]
then
iay=${iy}
fi
#
sx_sy_ex_ey=`cat /dev/null |\
awk 'BEGIN{
ix = ENVIRON["ix"];
iy = ENVIRON["iy"];
iax = ENVIRON["iax"];
iay = ENVIRON["iay"];
oax = ENVIRON["oax"];
oay = ENVIRON["oay"];
if ((ix / iy) == (iax / iay)){
ilx = ix;
ily = iy;
}else if ((ix / iy) < (iax / iay)){
ily = iy;
ilx = iy * iax / iay;
}else{
ilx = ix;
ily = ix * iay / iax;
}
scalex = ilx;
scaley = ily;
if ((ilx / ily) == (oax / oay)){
expandx = ilx;
expandy = ily;
}else if ((ilx / ily) < (oax / oay)){
expandy = ily;
expandx = ily * oax / oay;
}else{
expandx = ilx;
expandy = ilx * oay / oax;
}
printf("%d %d %d %d\n", scalex, scaley, expandx, expandy);
}'`
#
sx=`echo ${sx_sy_ex_ey}|cut -d ' ' -f1`
sy=`echo ${sx_sy_ex_ey}|cut -d ' ' -f2`
ex=`echo ${sx_sy_ex_ey}|cut -d ' ' -f3`
ey=`echo ${sx_sy_ex_ey}|cut -d ' ' -f4`
#
function menc() {
pass=$1
filename=$2
if [ "X${pass}" = "X0" ]
then
vp=""
else
vp="pass=${pass}:"
fi
mencoder \
${start} ${elaps} \
-of lavf -lavfopts format=mpegts \
-ofps ${fps} \
-oac lavc -lavcopts acodec=ac3:abitrate=${ab}:aspect=${oax}/${oay} \
-ovc x264 -x264encopts ${vp}bitrate=${vb} \
-vf scale=${sx}:${sy},expand=${ex}:${ey},harddup \
-o ${filename} \
${input}
}
#
if [ "X${pass}" = "X1" ]
then
menc 0 ${output}
else
menc 1 /dev/null
menc 2 ${output}
fi
_ ffmpeg-1.1.1
I built ffmpeg-1.1.1 with following configuration.
./configure --enable-shared \ --enable-libopencore-amrnb --enable-version3 \ --enable-libopencore-amrwb \ --enable-libmp3lame \ --enable-libfaac --enable-nonfree \ --enable-libx264 --enable-gpl
_ convert2dlna_mp4.sh
This script convert any movie into mp4(H.264, AAC).
#! /bin/sh
#
if [ "X$1" = "X-h" -o "X$1" = "X--help" ]
then
echo "Usage : $0 [-2] [-s start_time] [ -e elaps_time] [-sz size] [-a AX:AY] [-ab audio_bitrate] [-vb video_bitrate] [-fps frame_per_second] [-o output] inputs [-h|--help] "
echo ""
echo " -2 : 2-pass encoding(default none)"
echo " -s start_time : start position time = hh:mm:ss(default none)"
echo " -e elaps_time : elaps(pass) time second(default none)"
echo " -sz size : size for output = XSIZExYSIZE(default same as input)"
echo " -a aspect : aspect ratio for output = X:Y(default same as input)"
echo " -ab audio_bitrate : audio bitrate(Kbps) (default 128)"
echo " -vb video_bitrate : video bitrate(Kbps) (default 600)"
echo " -fps frame_per_second : frame per second (default 30000/1001)"
echo " -o output : output file (default convert2dlna.mp4)"
echo " input : input file name"
exit 0
fi
#
pass="1"
start=""
elaps=""
size=""
aspect=""
ab=128
vb=600
fps="30000/1001"
output="convert2dlna.mp4"
#
while [ $# != 0 ]
do
case $1 in
-2 )
pass="2"
;;
-s )
shift
start="-ss $1"
;;
-e )
shift
elaps="-t $1"
;;
-sz )
shift
size="-s $1"
;;
-a )
shift
aspect="-aspect $1"
;;
-ab )
shift
ab="$1"
;;
-vb )
shift
vb="$1"
;;
-fps )
shift
fps="$1"
;;
-o )
shift
output="$1"
;;
* )
input="$1"
;;
esac
shift
done
#
function menc() {
pass=$1
filename=$2
if [ "X${pass}" = "X0" ]
then
vp=""
else
vp="-pass ${pass}"
fi
ffmpeg \
-y \
${start} ${elaps} \
-i ${input} \
-f mp4 \
-vcodec h264 -b ${vb}k ${aspect} ${size} ${vp} \
-acodec aac -ab ${ab}k -strict -2 -absf aac_adtstoasc \
-r ${fps} \
${filename}
}
#
if [ "X${pass}" = "X1" ]
then
menc 0 ${output}
else
menc 1 /dev/null
menc 2 ${output}
fi
[ツッコミを入れる]