トップ «前の日記(2009年04月29日) 最新 次の日記(2009年05月06日)» 編集

Masa's blog

検索キーワード:

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枚に納める事も可能。