ubuntu: ลองแปลงไฟล์ภาพเป็นวิดีโอ

ลองทำสคริปต์แปลงไฟล์ภาพเป็นวิดีโอ
วิธีใช้คือเข้าไปในไดเรคทอรี่ของไฟล์ภาพ แล้วสั่งรันโปรแกรมตรง ๆ
$ sudo aptitude install imagemagick mjpegtools
$ vi d.mkvid

#!/bin/bash
#REQUIRED PACKAGE: imagemagick mjpegtools
#VIDEO VARIABLE
SCREEN="720x576"	#DVD-PAL=720x576 DVD-NTSC=720x480
BACKGROUND="black"
FRAMERATE="25"	#PAL=25 NTSC=29.97
LOOP="75"	#STILL IMAGE FOR 3 SEC x FRAMERATE
FADEFRAME="50"	#FADE FOR 2 SEC x FRAMERATE

#PROGRAM VARIABLE
MAINFILE="main.m2v"
WORKDIR="temp"
IMGSKEL="[Jj][Pp][Gg]"

#-------------FUNCTION---------------- 
#MAKING AVI FROM JPG
fMakeAvi() {
  echo -n "Make AVI $1 ... "
  jpeg2yuv -v 0 -f $FRAMERATE -j $1 -I p -n 1 -l $LOOP | yuv2lav -o $1.avi
}

#MAKE CROSS FADE BETWEEN AVI FRAME 
fMakeFade() {
  echo -n "Make fade $1 $2 ... "
  ypipe -v 0 "lav2yuv -v 0 -o -$FADEFRAME $1.avi" "lav2yuv -v 0 -f $FADEFRAME $2.avi" | transist.flt -o 0 -O 255 -d $FADEFRAME | yuv2lav -v 0 -o $1$2.avi
}

#MAKING M2V FROM AVI
fMakeM2V() {
  echo -n "Make M2V $1 ... "
  lav2yuv -v 0 $1.avi | mpeg2enc -v 0 -o $1.m2v
}

#-------------BEGIN MAIN--------------
#DETERMINE FIRST FILE
FIRSTJPG=`echo *$IMGSKEL | cut -d \  -f 1`

#CREATE WORKING DIRECTORY
if [ -d $WORKDIR ]; then
  echo "Directory $WORKDIR existed, exit 1"
  exit 1;
fi 
mkdir $WORKDIR 

#MAKE JPG FILE SUITABLE FOR VIDEO BY USING imagemagick:montage
for i in *$IMGSKEL; do 
  montage -geometry $SCREEN -background $BACKGROUND -quality 100 $i $WORKDIR/$i
done

#CHANGE TO WORKING DIRECTORY
pushd $WORKDIR

#MAKE AVI FOR FIRST JPG FILE
fMakeAvi $FIRSTJPG
#MAKE M2V FROM FIRST AVI FILE
fMakeM2V $FIRSTJPG
#ADD FIRST M2V TO MAIN
cat $FIRSTJPG.m2v > $MAINFILE
#DELETE FIRST M2V
rm $FIRSTJPG.m2v
echo ""

LASTFILE=$FIRSTJPG

for i in *$IMGSKEL ; do 
  if [ $i != $FIRSTJPG ] ; then
    #MAKE AVI FOR THIS FILE
    fMakeAvi $i
    #MAKE FADE BETWEEN LAST FILE AND THIS FILE
    fMakeFade $LASTFILE $i
    #MAKE M2V FOR THIS FILE
    fMakeM2V $i
    #MAKE M2V FOR FADE FILE
    fMakeM2V $LASTFILE$i
    #KEEP AVI OF THIS FILE
    #DELETE AVI OF LAST FILE
    rm $LASTFILE.avi
    #DELETE AVI OF FADE FILE
    rm $LASTFILE$i.avi
    #ADD M2V TO MAIN MPEG
    cat $LASTFILE$i.m2v >> $MAINFILE	#ADD FADE
    cat $i.m2v >> $MAINFILE		#ADD THIS FILE
    #DELETE M2V OF THIS FILE
    rm $i.m2v
    #DELETE M2V OF FADE FILE
    rm $LASTFILE$i.m2v
    #REASSIGN LAST FILE TO THIS FILE
    LASTFILE=$i
    echo ""
  fi ;
done
#DELETE AVI OF LAST FILE
rm $LASTFILE.avi

mv $MAINFILE ..
popd
#rm -rf $WORKDIR

$ chmod 755 d.mkvid

ใช้งานได้แล้ว แต่ยังมีข้อเสียอยู่คือ แปลงเป็น avi โดยไม่จำเป็น
ขอศึกษาต่ออีกหน่อยครับ
ท่านใดพอมีความรู้ ช่วยแนะนำด้วยนะครับ :)

อ้างอิง

ปรับปรุงการแปลงไฟล์ภาพเป็นวิดีโอ

ปรับปรุงโปรแกรมจากครั้งก่อน ลดขั้นตอนการแปลงเป็น AVI

โจทย์คือ จะแปลงภาพนิ่งจากกล้องถ่ายภาพ ไปเป็นไฟล์วิดีโอ เพื่อนำไปเขียนเป็น VCD/SVCD/DVD

$ vi d.mkvid2

#!/bin/bash
#REQUIRED PACKAGE: imagemagick mjpegtools
#VIDEO VARIABLE
SCREEN="720x576"	#DVD-PAL=720x576 DVD-NTSC=720x480
BACKGROUND="black"
FRAMERATE="25"	#PAL=25 NTSC=29.97
LOOP="75"	#STILL IMAGE FOR 3 SEC x FRAMERATE
FADEFRAME="50"	#FADE FOR 2 SEC x FRAMERATE

#PROGRAM VARIABLE
MAINFILE="main.m2v"
WORKDIR="temp"
IMGSKEL="[Jj][Pp][Gg]"

#-------------FUNCTION---------------- 
#MAKING AVI FROM JPG
fMakeM2V() {
  echo -n "Make AVI $1 ... "
  jpeg2yuv -v 0 -f $FRAMERATE -j $1 -I p -n 1 -l $LOOP | mpeg2enc -v 0 -o $1.m2v
}

#MAKE CROSS FADE BETWEEN AVI FRAME 
fMakeFadeM2V() {
  echo -n "Make fade $1 $2 ... "
  ypipe -v 0 "jpeg2yuv -v 0 -f $FRAMERATE -j $1 -I p -n 1 -l $FADEFRAME" \
"jpeg2yuv -v 0 -f $FRAMERATE -j $2 -I p -n 1 -l $FADEFRAME" \
| transist.flt -o 0 -O 255 -d $FADEFRAME | mpeg2enc -v 0 -o $1$2.m2v
}

#-------------BEGIN MAIN--------------
#DETERMINE FIRST FILE
FIRSTJPG=`echo *$IMGSKEL | cut -d \  -f 1`

#CREATE WORKING DIRECTORY
if [ -d $WORKDIR ]; then
  echo "Directory $WORKDIR existed, exit 1"
  exit 1;
fi 
mkdir $WORKDIR 

#MAKE JPG FILE SUITABLE FOR VIDEO BY USING imagemagick:montage
for i in *$IMGSKEL; do 
  montage -geometry $SCREEN -background $BACKGROUND -quality 100 $i $WORKDIR/$i
done

#CHANGE TO WORKING DIRECTORY
pushd $WORKDIR

#MAKE M2V FROM FIRST AVI FILE
fMakeM2V $FIRSTJPG
#ADD FIRST M2V TO MAIN
cat $FIRSTJPG.m2v > $MAINFILE
#DELETE FIRST M2V
rm $FIRSTJPG.m2v
echo ""

LASTFILE=$FIRSTJPG

for i in *$IMGSKEL ; do 
  if [ $i != $FIRSTJPG ] ; then
    #MAKE M2V FOR THIS FILE
    fMakeM2V $i
    #MAKE M2V FOR FADE FILE
    fMakeFadeM2V $LASTFILE $i
    #ADD M2V TO MAIN MPEG
    cat $LASTFILE$i.m2v >> $MAINFILE	#ADD FADE
    cat $i.m2v >> $MAINFILE		#ADD THIS FILE
    #DELETE M2V OF THIS FILE
    rm $i.m2v
    #DELETE M2V OF FADE FILE
    rm $LASTFILE$i.m2v
    #REASSIGN LAST FILE TO THIS FILE
    LASTFILE=$i
    echo ""
  fi ;
done

mv $MAINFILE ..
popd
#rm -rf $WORKDIR

$ chmod 755 d.mkvid2
ใช้งานด้วยการสร้างไดเรกทอรี่ที่บรรจุไฟล์ jpg อยู่ แล้ว cd ไปที่ไดเรกทอรี่นั้น
หลังจากนั้นก็สั่งรันโปรแกรมตรง ๆ ในไดเรกทอรี่
โปรแกรมจะสร้างไฟล์ main.m2v ออกมา เป็นไฟล์ภาพอย่างเดียว

ถ้าต้องการใส่เสียงเข้าไปด้วย
สมมุติถ้าต้นฉบับเป็น mp3
แปลง mp3 เป็น wav ด้วย mpg321
$ mpg321 sound.mp3 -w sound.wav

แปลง wav เป็น mp2 ด้วย mp2enc
$ cat sound.wav | mp2enc -v 0 -V -o main.mp2
(ถ้ามีหลายไฟล์ ใช้ cat sound1.wav sound2.wav | ... )

นำมาเชื่อมกันเป็นไฟล์วิดีโอแบบมีเสียงด้วย mplex
$ mplex -f 8 -M main.m2v main.mp2 -o main.mpg

ตอนนี้เราสามารถเอาไฟล์ main.mpg ไปเขียนเป็น DVD ได้แล้ว