2009年05月03日 DVD to VCD(VIDEO CD) [長年日記]
_ DVD to VCD(VIDEO CD)
私のメインのデスクトップ機にはDVD-ROMドライブは付いているが、DVD-R等に書きこみ出来るドライブは付いていない(今時なのだが)。なぜなら、それは私がSCSI至上主義を貫いているからに他ならない。
SCSIのDVD-Rドライブなどは(しかも内蔵に限る)は、めったに手に入らない。
さっさと、そんな主義はとっぱらって、数千円のIDE接続のドライブを手に入れれば良いだけの事なのだが、今さらこのマシン(Pentium-II 375MHZ)に投資するのも、なんだかなぁ...というところ。
そんな事で、今までもDVDを焼くときはmpeg4にして、データとしてCD-Rに焼いているのだが、当然パソコンでないと視聴できない。
そんな状況を少しでも(努力のみで)向上させるために、DVDを(懐かしの)Video CDとして焼くスクリプトを作った。当然、MAX70分から80分程度のソースに限るのだが。まぁ、うちのブラウン管テレビで視聴する分には充分(と言ってみる)。
#! /bin/sh
if [ "X$1" = "X-h" -o "X$1" = "X--help" ]
then
echo "Usage : dvd2vcd.sh [-rw] [-s hh:mm:ss] [ -e hh:mm:ss] [-a ax:ay] [-t title] [-c chapter] [-vb vbitrate] [-ab abitrate] [-f fps] [-al audio_lang] [-sl subtitle_lang]"
echo ""
echo " -rw : CD-RW"
echo " -s start_time : start position time"
echo " -e end_time : pass time"
echo " -a ax:ay : source aspect(default 16:9)"
echo " -t title : title number(default 1)"
echo " -c chapter : chapter(default 1)"
echo " -vb vbitrate : video bitrate (kbit) (default 1150)"
echo " -ab abitrate : audio bitrate (kbit) (default 224)"
echo " -f fps : frame per second(default 24)"
echo " -al audio_lang : audio language (default ja,en)"
echo " -ai audio_id : audio id"
echo " -sl subtitle_lang : subtitle language (default none)"
echo " -si subtitle_id : subtitle id "
exit 0
fi
#
resample=44100
expand=352:240
packetsize=2324
#
vbitrate=1150
abitrate=224
ofps=24
aspect=16:9
#
rw=no
start=""
end=""
title="1"
chapter="1"
alang="ja"
aid=""
slang=""
sid=""
#
while [ $# != 0 ]
do
case $1 in
-rw )
rw=yes
;;
-s )
shift
start="-ss $1"
;;
-e )
shift
end="-endpos $1"
;;
-a )
shift
aspect=$1
;;
-t )
shift
title="$1"
;;
-c )
shift
chapter="$1"
;;
-vb )
shift
vbitrate="$1"
;;
-ab )
shift
abitrate="$1"
;;
-f )
shift
ofps="$1"
;;
-al )
shift
alang="$1"
;;
-ai )
shift
aid="$1"
;;
-sl )
shift
slang="$1"
;;
-si )
shift
sid="$1"
;;
esac
shift
done
#
ex=`echo ${expand} | cut -d: -f1`
ey=`echo ${expand} | cut -d: -f2`
ax=`echo ${aspect} | cut -d: -f1`
ay=`echo ${aspect} | cut -d: -f2`
sy=`expr ${ex} \* ${ay} / ${ax}`
if [ ${sy} -gt ${ey} ]
then
sy=${ey}
sx=`expr ${ey} \* ${ax} / ${ay}`
else
sx=${ex}
fi
#
if [ "X${alang}" = "X" ]
then
alang_opt=""
else
alang_opt="-alang ${alang}"
fi
#
if [ "X${aid}" = "X" ]
then
aid_opt=""
else
aid_opt="-aid ${aid}"
fi
#
if [ "X${slang}" = "X" ]
then
slang_opt=""
else
slang_opt="-slang ${slang}"
fi
#
if [ "X${sid}" = "X" ]
then
sid_opt=""
else
sid_opt="-sid ${sid}"
fi
#
function menc() {
vpass=$1
filename=$2
mencoder dvd://${title} -chapter ${chapter} \
${start} ${end} \
${alang_opt} ${aid_opt} \
${slang_opt} ${sid_opt} \
-afm libmad, \
-vfm ffmpeg, \
-af resample=${resample} \
-vf scale=${sx}:${sy},expand=${expand} \
-oac lavc \
-ovc lavc \
-lavcopts vcodec=mpeg1video:vbitrate=${vbitrate}:vhq:vpass=${vpass}:acodec=mp2:abitrate=${abitrate} \
-ofps ${ofps} \
-of mpeg \
-mpegopts format=xvcd:size=${packetsize} \
-o ${filename}
}
#
menc 1 /dev/null
menc 2 /tmp/dvd2vcd.$$.tmp.mpg
#
vcdimager --cue-file=/tmp/dvd2vcd.$$.tmp.cue \
--bin-file=/tmp/dvd2vcd.$$.tmp.bin \
/tmp/dvd2vcd.$$.tmp.mpg
#
if [ ${rw} = yes ]
then
cdrdao blank -n --speed 8 --device 0,3,0
fi
cdrdao write -n --speed 8 --device 0,3,0 /tmp/dvd2vcd.$$.tmp.cue
#
rm -f /tmp/dvd2vcd.$$.tmp.*
mencoderでDVDをmpeg1形式に変換し、vcdimagerでmpeg1形式からVIDEO CD形式に変換する。最後に、それをcdrdaoでCD-Rに焼けば完成。
cdrdaoの--device指定は(当然)環境によって異なるので注意すること。
VIDEO-CDの規格上はmpeg1のビットレートは1150Kbps(以下?)、音声のビットレートは224Kbps(固定?)という事なのだが、うちのDVDプレーヤー(Panasonic NV-VHD1)では規定ビットレート以下であれば再生できた(ただし、表示される進行時間が早く進んで行くが...)。いわゆる規格外VCDということになるのだろうが、とりあえず画質の低下を我慢すれば2時間の映画を無理矢理CD-R1枚に納める事も可能。