ลองทำสคริปต์แปลงไฟล์ภาพเป็นวิดีโอ
วิธีใช้คือเข้าไปในไดเรคทอรี่ของไฟล์ภาพ แล้วสั่งรันโปรแกรมตรง ๆ
$ 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 ได้แล้ว