Index: trunk/install/perl/ipodtranscode.pl =================================================================== --- trunk/install/perl/ipodtranscode.pl (リビジョン 70) +++ trunk/install/perl/ipodtranscode.pl (リビジョン 83) @@ -1,14 +1,10 @@ #!/usr/bin/perl -#usage ipodtranscode.pl /path/to/mpeg2.m2p mp4filenamestring /path/to/mpeg2/tid.localized/mp4/ PID [aspect] +#usage ipodtranscode.pl # # Anime recording system foltia # http://www.dcc-jpl.com/soft/foltia/ # -# # iPod MPEG4/H.264トラコン # ffmpegを呼び出して変換 -# ffmpegはiPodパッチあて版を想定している -# ffmpegの作り方は -# http://www.dcc-jpl.com/diary/ddata2006/02A.html#20060215-00 # # DCC-JPL Japan/foltia project @@ -18,5 +14,4 @@ use DBD::Pg; use Jcode; - $path = $0; @@ -25,19 +20,17 @@ push( @INC, "$path"); } - require "foltialib.pl"; -#引き数がアルか? -$recch = $ARGV[0] ; -if ($recch eq "" ){ - #引き数なしで実行されたら、終了 - print "usage ipodtranscode.pl /path/to/mpeg2.m2p mp4filenamestring /path/to/mpeg2/tid.localized/mp4/ PID [aspect]\n"; - exit; -} - -$inputmpeg2 = $ARGV[0]; -$mp4filenamestring = $ARGV[1]; -$mp4outdir = $ARGV[2]; -$pid = $ARGV[3]; -$aspect = $ARGV[4]; + + +# 二重起動の確認! +$processes = &processfind("ipodtranscode.pl"); +#$processes = $processes + &processfind("ffmpeg"); + +if ($processes > 1 ){ +&writelog("ipodtranscode processes exist. exit:"); +exit; +}else{ +#&writelog("ipodtranscode.pl Normal launch."); +} #DB初期化 @@ -46,5 +39,49 @@ $dbh = DBI->connect($data_source,$DBUser,$DBPass) ||die $DBI::error;; - +# タイトル取得 +#トラコンフラグがたっていてステータス50以上150未満のファイルを古い順にひとつ探す +# 数数える +#$DBQuery = "SELECT count(*) FROM foltia_subtitle, foltia_program, foltia_m2pfiles +#WHERE filestatus >= $FILESTATUSRECEND AND filestatus < $FILESTATUSTRANSCODECOMPLETE AND foltia_program.tid = foltia_subtitle.TID AND foltia_program.PSP = 1 AND foltia_m2pfiles.m2pfilename = foltia_subtitle.m2pfilename "; +#$sth = $dbh->prepare($DBQuery); +#$sth->execute(); +#@titlecount= $sth->fetchrow_array; +&writelog("ipodtranscode starting up."); + +$counttranscodefiles = &counttranscodefiles(); +if ($counttranscodefiles == 0){ + &writelog("ipodtranscode No MPEG2 files to transcode."); + exit; +} +sleep 30; + +while ($counttranscodefiles >= 1){ + +$DBQuery = "SELECT foltia_subtitle.pid,foltia_subtitle.tid,foltia_subtitle.m2pfilename,filestatus,foltia_program.aspect ,foltia_subtitle.countno +FROM foltia_subtitle, foltia_program, foltia_m2pfiles +WHERE filestatus >= $FILESTATUSRECEND AND filestatus < $FILESTATUSTRANSCODECOMPLETE AND foltia_program.tid = foltia_subtitle.TID AND foltia_program.PSP = 1 AND foltia_m2pfiles.m2pfilename = foltia_subtitle.m2pfilename +ORDER BY enddatetime ASC +LIMIT 1 "; + +$sth = $dbh->prepare($DBQuery); +$sth->execute(); +@dbparam = $sth->fetchrow_array; +#print "$dbparam[0],$dbparam[1],$dbparam[2],$dbparam[3],$dbparam[4],$dbparam[5]\n"; +&writelog("ipodtranscode DEBUG $DBQuery"); +&writelog("ipodtranscode DEBUG $dbparam[0],$dbparam[1],$dbparam[2],$dbparam[3],$dbparam[4],$dbparam[5]"); +$pid = $dbparam[0]; +$tid = $dbparam[1]; +$inputmpeg2 = $recfolderpath."/".$dbparam[2]; # path付き +$mpeg2filename = $dbparam[2]; # pathなし +$filestatus = $dbparam[3]; +$aspect = $dbparam[4];# 16,1 (超額縁),4,3 +$countno = $dbparam[5]; +$mp4filenamestring = &mp4filenamestringbuild($pid); + +&writelog("ipodtranscode DEBUG mp4filenamestring $mp4filenamestring"); +#展開ディレクトリ作成 +$pspdirname = &makemp4dir($tid); +$mp4outdir = $pspdirname ; +# 実際のトラコン # タイトル取得 if ($pid ne ""){ @@ -82,38 +119,226 @@ } -# アスペクト比 -if ($aspect == 16){ -$cropopt = " -croptop 70 -cropbottom 60 -cropleft 8 -cropright 14 -aspect 1.7777 "; -}else{ -$cropopt = " -croptop 8 -cropbottom 8 -cropleft 8 -cropright 14 "; -} + +if ($filestatus <= $FILESTATUSRECEND){ +} + +if ($filestatus <= $FILESTATUSWAITINGCAPTURE){ +#なにもしない +} + +if ($filestatus <= $FILESTATUSCAPTURE){ +#unlink +# Starlight breaker向けキャプチャ画像作成 +if (-e "$toolpath/perl/captureimagemaker.pl"){ + &writelog("ipodtranscode Call captureimagemaker $mpeg2filename"); +&changefilestatus($pid,$FILESTATUSCAPTURE); + system ("$toolpath/perl/captureimagemaker.pl $mpeg2filename"); +&changefilestatus($pid,$FILESTATUSCAPEND); +} +} + +if ($filestatus <= $FILESTATUSCAPEND){ +# サムネイル作る +&makethumbnail(); +&changefilestatus($pid,$FILESTATUSTHMCREATE); +} + +if ($filestatus <= $FILESTATUSWAITINGTRANSCODE){ +} + +$filenamebody = $inputmpeg2 ; +$filenamebody =~ s/.m2t$|.ts$|.m2p$|.mpg$//gi; +#デジタルかアナログか +if ($inputmpeg2 =~ /m2t$|ts$/i){ + #print "MPEG2-TS\n"; + + +if ($filestatus <= $FILESTATUSTRANSCODETSSPLITTING){ + unlink("${filenamebody}_tss.m2t"); + unlink("${filenamebody}_HD.m2t"); +} +if ($filestatus <= $FILESTATUSTRANSCODEFFMPEG){ + + # H.264出力 + $trcnmpegfile = $inputmpeg2 ; + # アスペクト比 + if ($aspect == 1){#超額縁 + $cropopt = " -croptop 150 -cropbottom 150 -cropleft 200 -cropright 200 "; + }elsif($aspect == 4){#SD + $cropopt = " -croptop 6 -cropbottom 6 -cropleft 8 -cropright 8 "; + }else{#16:9 + $cropopt = " -croptop 6 -cropbottom 6 -cropleft 8 -cropright 8 "; + } + # クオリティごとに + if (($trconqty eq "")||($trconqty == 1)){ + $ffmpegencopt = " -s 360x202 -deinterlace -r 24.00 -vcodec libx264 -g 300 -b 330000 -level 13 -loop 1 -sc_threshold 60 -partp4x4 1 -rc_eq 'blurCplx^(1-qComp)' -refs 3 -maxrate 700000 -async 50 -f h264 $filenamebody.264"; + }elsif($trconqty == 2){ + $ffmpegencopt = " -s 480x272 -deinterlace -r 29.97 -vcodec libx264 -g 300 -b 400000 -level 13 -loop 1 -sc_threshold 60 -partp4x4 1 -rc_eq 'blurCplx^(1-qComp)' -refs 3 -maxrate 700000 -async 50 -f h264 $filenamebody.264"; + }elsif($trconqty == 3){#640x352 + $ffmpegencopt = " -s 640x352 -deinterlace -r 29.97 -vcodec libx264 -g 100 -b 600000 -level 13 -loop 1 -sc_threshold 60 -partp4x4 1 -rc_eq 'blurCplx^(1-qComp)' -refs 3 -maxrate 700000 -async 50 -f h264 $filenamebody.264"; + } + &changefilestatus($pid,$FILESTATUSTRANSCODEFFMPEG); + &writelog("ipodtranscode ffmpeg $filenamebody.264"); + system ("ffmpeg -y -i $trcnmpegfile $cropopt $ffmpegencopt"); + + #もしエラーになったらTsSplitする + if (! -e "$filenamebody.264"){ + &changefilestatus($pid,$FILESTATUSTRANSCODETSSPLITTING); + unlink("${filenamebody}_tss.m2t"); + unlink("${filenamebody}_HD.m2t"); + if (-e "$toolpath/perl/tool/tss.py"){ + &writelog("ipodtranscode tss $inputmpeg2"); + system("$toolpath/perl/tool/tss.py $inputmpeg2"); + + }else{ + # TsSplit + &writelog("ipodtranscode TsSplitter $inputmpeg2"); + system("wine $toolpath/perl/tool/TsSplitter.exe -EIT -ECM -EMM -SD -1SEG -WAIT2 $inputmpeg2"); + } + if(-e "${filenamebody}_tss.m2t"){ + $trcnmpegfile = "${filenamebody}_tss.m2t"; + }elsif (-e "${filenamebody}_HD.m2t"){ + $trcnmpegfile = "${filenamebody}_HD.m2t"; + }else{ + &writelog("ipodtranscode ERR NOT Exist ${filenamebody}_HD.m2t"); + $trcnmpegfile = inputmpeg2 ; + } + #再ffmpeg + &changefilestatus($pid,$FILESTATUSTRANSCODEFFMPEG); + &writelog("ipodtranscode ffmpeg retry $filenamebody.264"); + system ("ffmpeg -y -i $trcnmpegfile $cropopt $ffmpegencopt"); + } + #もしエラーになったらcropやめる + if (! -e "$filenamebody.264"){ + #再ffmpeg + &changefilestatus($pid,$FILESTATUSTRANSCODEFFMPEG); + &writelog("ipodtranscode ffmpeg retry no crop $filenamebody.264"); + system ("ffmpeg -y -i $trcnmpegfile $ffmpegencopt"); + } +} +if ($filestatus <= $FILESTATUSTRANSCODEWAVE){ + # WAVE出力 + unlink("${filenamebody}.wav"); + &changefilestatus($pid,$FILESTATUSTRANSCODEWAVE); + &writelog("ipodtranscode mplayer $filenamebody.wav"); + system ("mplayer $trcnmpegfile -vc null -vo null -ao pcm:file=$filenamebody.wav:fast"); + +} +if ($filestatus <= $FILESTATUSTRANSCODEAAC){ + # AAC変換 + unlink("${filenamebody}.aac"); + &changefilestatus($pid,$FILESTATUSTRANSCODEAAC); + if (-e "$toolpath/perl/tool/neroAacEnc"){ + if (-e "$filenamebody.wav"){ + &writelog("ipodtranscode neroAacEnc $filenamebody.wav"); + system ("$toolpath/perl/tool/neroAacEnc -br 128000 -if $filenamebody.wav -of $filenamebody.aac"); + }else{ + &writelog("ipodtranscode ERR Not Found $filenamebody.wav"); + } + }else{ + #print "DEBUG $toolpath/perl/tool/neroAacEnc\n\n"; + &writelog("ipodtranscode faac $filenamebody.wav"); + system ("faac -b 128 -o $filenamebody.aac $filenamebody.wav "); + } + +} +if ($filestatus <= $FILESTATUSTRANSCODEMP4BOX){ + # MP4ビルド + unlink("${filenamebody}.base.mp4"); + &changefilestatus($pid,$FILESTATUSTRANSCODEMP4BOX); + &writelog("ipodtranscode MP4Box $filenamebody"); + system ("cd $recfolderpath ; MP4Box -fps 29.97 -add $filenamebody.264 -new $filenamebody.base.mp4"); +#$exit_value = $? >> 8; +#$signal_num = $? & 127; +#$dumped_core = $? & 128; +#&writelog("ipodtranscode DEBUG MP4Box -fps 29.97 -add:$exit_value:$signal_num:$dumped_core"); + + if (-e "$filenamebody.base.mp4"){ + system ("cd $recfolderpath ; MP4Box -add $filenamebody.aac $filenamebody.base.mp4"); +#$exit_value = $? >> 8; +#$signal_num = $? & 127; +#$dumped_core = $? & 128; +#&writelog("ipodtranscode DEBUG MP4Box -add $filenamebody.aac:$exit_value:$signal_num:$dumped_core"); + }else{ + &writelog("ipodtranscode ERR File not exist.$filenamebody.base.mp4"); + } + +} + +if ($filestatus <= $FILESTATUSTRANSCODEATOM){ + unlink("${mp4outdir}MAQ${mp4filenamestring}.MP4"); + # iPodヘッダ付加 + &changefilestatus($pid,$FILESTATUSTRANSCODEATOM); + &writelog("ipodtranscode ATOM $filenamebody"); + #system ("/usr/local/bin/ffmpeg -y -i $filenamebody.base.mp4 -vcodec copy -acodec copy -f ipod ${mp4outdir}MAQ${mp4filenamestring}.MP4"); + system ("cd $recfolderpath ; MP4Box -ipod $filenamebody.base.mp4"); +$exit_value = $? >> 8; +$signal_num = $? & 127; +$dumped_core = $? & 128; +&writelog("ipodtranscode DEBUG MP4Box -ipod:$exit_value:$signal_num:$dumped_core"); + system("mv $filenamebody.base.mp4 ${mp4outdir}MAQ${mp4filenamestring}.MP4"); + &writelog("ipodtranscode mv $filenamebody.base.mp4 ${mp4outdir}MAQ${mp4filenamestring}.MP4"); +# ipodtranscode mv /home/foltia/php/tv/1329-21-20080829-0017.base.mp4 /home/foltia/php/tv/1329.localized/mp4/MAQ-/home/foltia/php/tv/1329-21-20080829-0017.MP4 + +} +if ($filestatus <= $FILESTATUSTRANSCODECOMPLETE){ + # 中間ファイル消す + &changefilestatus($pid,$FILESTATUSTRANSCODECOMPLETE); + unlink("${filenamebody}_HD.m2t"); + unlink("${filenamebody}_tss.m2t"); + unlink("$filenamebody.264"); + unlink("$filenamebody.wav"); + unlink("$filenamebody.aac"); + unlink("$filenamebody.base.mp4"); + + &updatemp4file(); + +} + +}else{ #デジタルかアナログか + #print "MPEG2\n"; + # アスペクト比 + if ($aspect == 16){ + $cropopt = " -croptop 70 -cropbottom 60 -cropleft 8 -cropright 14 -aspect 16:9 "; + }else{ + $cropopt = " -croptop 8 -cropbottom 8 -cropleft 8 -cropright 14 "; + } # クオリティごとに -if (($trconqty eq "")||($trconqty == 1)){#sample:src 106.6sec encode 82sec x0.77 382kbps @Celeron2.6GHz - -$encodeoption = "-y -i $inputmpeg2 -vcodec xvid $cropopt -s 320x240 -b 300 -bt 128 -r 14.985 -bufsize 192 -maxrate 512 -minrate 0 -deinterlace -acodec aac -ab 128 -ar 24000 -ac 2 $movietitle ${mp4outdir}M4V${mp4filenamestring}.MP4"; +if (($trconqty eq "")||($trconqty == 1)){ +#$encodeoption = "-y -i $inputmpeg2 -vcodec xvid $cropopt -s 320x240 -b 300 -bt 128 -r 14.985 -bufsize 192 -maxrate 512 -minrate 0 -deinterlace -acodec aac -ab 128 -ar 24000 -ac 2 $movietitle ${mp4outdir}M4V${mp4filenamestring}.MP4"; $mp4file = "${mp4outdir}M4V${mp4filenamestring}.MP4"; - -}elsif($trconqty == 2){ #sample:src 106.6sec encode 117sec x1.1 597kbps @Celeron2.6GHz - -$encodeoption = "-y -i $inputmpeg2 -target ipod -profile 51 -level 30 $cropopt -s 320x240 -b 300 -r 24 -acodec aac -ar 32000 -ac 2 $movietitle ${mp4outdir}MAQ${mp4filenamestring}.MP4"; +$encodeoption = "-y -i $inputmpeg2 vcodec libxvid $cropopt -s 320x240 -b 300 -bt 128 -r 14.985 -deinterlace -acodec libfaac -f ipod ${mp4outdir}M4V${mp4filenamestring}.MP4"; +#time ffmpeg -y -i /home/foltia/php/tv/trcntest/nanoha-As-op.mpg -vcodec libxvid -croptop 8 -cropbottom 8 -cropleft 8 -cropright 14 -s 320x240 -b 300 -bt 128 -r 14.985 -deinterlace -acodec libfaac -f ipod M4V-Nanoha-As-OP.MP4 +# 32sec +# 2.1MB +}elsif($trconqty == 2){ +#$encodeoption = "-y -i $inputmpeg2 -target ipod -profile 51 -level 30 $cropopt -s 320x240 -b 300 -r 24 -acodec aac -ar 32000 -ac 2 $movietitle ${mp4outdir}MAQ${mp4filenamestring}.MP4"; $mp4file = "${mp4outdir}MAQ${mp4filenamestring}.MP4"; - -}elsif($trconqty == 3){ #sample:src 106.6sec encode 364sec x3.4 528kbps @Celeron2.6GHz - -$encodeoption = "-y -i $inputmpeg2 -target ipod -profile 51 -level 30 $cropopt -acodec aac -ab 96 -vcodec h264 -maxrate 700 -minrate 0 -deinterlace -b 300 -ar 32000 -mbd 2 -coder 1 -cmp 2 -subcmp 2 -s 320x240 -r 30000/1001 -flags loop -trellis 2 -partitions parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 $movietitle ${mp4outdir}MAQ${mp4filenamestring}.MP4"; +$encodeoption = "-y -i $inputmpeg2 -vcodec libx264 -croptop 8 $cropopt -s 320x240 -b 300 -bt 128 -r 24 -deinterlace -acodec libfaac -f ipod ${mp4outdir}MAQ${mp4filenamestring}.MP4"; +#time ffmpeg -y -i /home/foltia/php/tv/trcntest/nanoha-As-op.mpg -vcodec libx264 -croptop 8 -cropbottom 8 -cropleft 8 -cropright 14 -s 320x240 -b 300 -bt 128 -r 24 -deinterlace -acodec libfaac -f ipod MAQ-Nanoha-As-OP.MP4 +# 2min22sec +# 6.4MB +}elsif($trconqty == 3){ +#$encodeoption = "-y -i $inputmpeg2 -target ipod -profile 51 -level 30 $cropopt -acodec aac -ab 96 -vcodec h264 -maxrate 700 -minrate 0 -deinterlace -b 300 -ar 32000 -mbd 2 -coder 1 -cmp 2 -subcmp 2 -s 320x240 -r 30000/1001 -flags loop -trellis 2 -partitions parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 $movietitle ${mp4outdir}MAQ${mp4filenamestring}.MP4"; $mp4file = "${mp4outdir}MAQ${mp4filenamestring}.MP4"; - -}elsif($trconqty == 4){ #sample:src 106.6sec encode 239sec x2.24 1036kbps @Celeron2.6GHz - -$encodeoption = "-y -i $inputmpeg2 -target ipod -profile 51 -level 30 $cropopt -s 480x360 -b 400 -r 24 -acodec aac -ar 32000 -ac 2 $movietitle ${mp4outdir}MAQ${mp4filenamestring}.MP4"; +$encodeoption = "-y -i $inputmpeg2 -vcodec libx264 $cropopt -s 320x240 -b 380 -bt 128 -r 29.97 -deinterlace -acodec libfaac -f ipod ${mp4outdir}MAQ${mp4filenamestring}.MP4"; +#time ffmpeg -y -i /home/foltia/php/tv/trcntest/nanoha-As-op.mpg -vcodec libx264 -croptop 8 -cropbottom 8 -cropleft 8 -cropright 14 -s 320x240 -b 380 -bt 128 -r 29.97 -deinterlace -acodec libfaac -f ipod MAQ-Nanoha-As-OP.MP4 +# 2m53.912s +# 7MB +}elsif($trconqty == 4){ +#$encodeoption = "-y -i $inputmpeg2 -target ipod -profile 51 -level 30 $cropopt -s 480x360 -b 400 -r 24 -acodec aac -ar 32000 -ac 2 $movietitle ${mp4outdir}MAQ${mp4filenamestring}.MP4"; $mp4file = "${mp4outdir}MAQ${mp4filenamestring}.MP4"; - -}elsif($trconqty == 5){ #sample:src 106.6sec encode 1012sec x9.49 727kbps @Celeron2.6GHz - -$encodeoption = "-y -i $inputmpeg2 -target ipod -profile 51 -level 30 $cropopt -acodec aac -ab 96 -vcodec h264 -maxrate 700 -minrate 0 -deinterlace -b 400 -ar 32000 -mbd 2 -coder 1 -cmp 2 -subcmp 2 -s 480x360 -r 30000/1001 -flags loop -trellis 2 -partitions parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 $movietitle ${mp4outdir}MAQ${mp4filenamestring}.MP4"; +$encodeoption = "-y -i $inputmpeg2 -vcodec libx264 $cropopt -s 640x480 -b 500 -maxrate 700 -bt 128 -r 29.97 -deinterlace -acodec libfaac -f ipod ${mp4outdir}MAQ${mp4filenamestring}.MP4"; +#time ffmpeg -y -i /home/foltia/php/tv/trcntest/nanoha-As-op.mpg -vcodec libx264 -croptop 8 -cropbottom 8 -cropleft 8 -cropright 14 -s 640x480 -b 500 -maxrate 700 -bt 128 -r 29.97 -deinterlace -acodec libfaac -f ipod MAQ-Nanoha-As-OP.MP4 +# 11m0.294s +# 20MB +}elsif($trconqty == 5){ +#$encodeoption = "-y -i $inputmpeg2 -target ipod -profile 51 -level 30 $cropopt -acodec aac -ab 96 -vcodec h264 -maxrate 700 -minrate 0 -deinterlace -b 400 -ar 32000 -mbd 2 -coder 1 -cmp 2 -subcmp 2 -s 480x360 -r 30000/1001 -flags loop -trellis 2 -partitions parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 $movietitle ${mp4outdir}MAQ${mp4filenamestring}.MP4"; $mp4file = "${mp4outdir}MAQ${mp4filenamestring}.MP4"; -} - - +$encodeoption = "-y -i $inputmpeg2 -vcodec libx264 -croptop 8 $cropopt -s 640x480 -b 500 -maxrate 700 -bt 128 -r 29.97 -deinterlace -flags loop -trellis 2 -partitions parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -acodec libfaac -f ipod ${mp4outdir}MAQ${mp4filenamestring}.MP4"; +#time ffmpeg -y -i /home/foltia/php/tv/trcntest/nanoha-As-op.mpg -vcodec libx264 -croptop 8 -cropbottom 8 -cropleft 8 -cropright 14 -s 640x480 -b 500 -maxrate 700 -bt 128 -r 29.97 -deinterlace -flags loop -trellis 2 -partitions parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -acodec libfaac -f ipod MAQ-Nanoha-As-OP.MP4 +# 14m14.033s +# 18MB +} $encodeoptionlog = $encodeoption; @@ -122,9 +347,92 @@ &writelog("ipodtranscode START QTY=$trconqty $encodeoptionlog"); #print "ffmpeg $encodeoptionlog \n"; -system ("/usr/local/bin/ffmpeg $encodeoption "); +&changefilestatus($pid,$FILESTATUSTRANSCODEFFMPEG); +system ("ffmpeg $encodeoption "); &writelog("ipodtranscode FFEND $inputmpeg2"); - -&writelog("ipodtranscode mp4psp -p $mp4file $movietitleeuc"); -system("/usr/local/bin/mp4psp -p $mp4file '$movietitleeuc' "); -&writelog("ipodtranscode mp4psp COMPLETE $mp4file "); - +&changefilestatus($pid,$FILESTATUSTRANSCODECOMPLETE); +#もう要らなくなった #2008/11/14 +#&writelog("ipodtranscode mp4psp -p $mp4file $movietitleeuc"); +#system("/usr/local/bin/mp4psp -p $mp4file '$movietitleeuc' "); +#&writelog("ipodtranscode mp4psp COMPLETE $mp4file "); + +&updatemp4file(); +}#endif #デジタルかアナログか + +$counttranscodefiles = &counttranscodefiles(); +############################ +#一回で終らせるように +#exit; +}# end while +#残りファイルがゼロなら +&writelog("ipodtranscode ALL COMPLETE"); +exit; + +#----------------------------------------------------------------------- +sub mp4filenamestringbuild(){ +#ファイル名決定 +#1329-19-20080814-2337.m2t +my @mpegfilename = split(/\./,$dbparam[2]) ; +my $pspfilname = "-".$mpegfilename[0] ; +return("$pspfilname"); +}#end sub mp4filenamestringbuild + + +sub makethumbnail(){ +#サムネール +my $outputfilename = $inputmpeg2 ;#フルパス +my $thmfilename = "MAQ${mp4filenamestring}.THM"; +&writelog("ipodtranscode DEBUG thmfilename $thmfilename"); + +system ("mplayer -ss 00:01:20 -vo jpeg:outdir=$pspdirname -ao null -sstep 1 -frames 3 -v 3 $outputfilename"); + +&writelog("ipodtranscode DEBUG mplayer -ss 00:01:20 -vo jpeg:outdir=$pspdirname -ao null -sstep 1 -frames 3 -v 3 $outputfilename"); + +if (-e "$pspdirname/$thmfilename"){ +$timestamp =`date "+%Y%m%d-%H%M%S"`; +chomp $timestamp; + system("convert -crop 160x120+1+3 -resize 165x126\! $pspdirname/00000002.jpg $pspdirname/$thmfilename".$timestamp.".THM"); +}else{ + system("convert -crop 160x120+1+3 -resize 165x126\! $pspdirname/00000002.jpg $pspdirname/$thmfilename"); +} +&writelog("ipodtranscode DEBUG convert -crop 160x120+1+3 -resize 165x126\! $pspdirname/00000002.jpg $pspdirname/$thmfilename"); + +system("rm -rf $pspdirname/0000000*.jpg "); +&writelog("ipodtranscode DEBUG rm -rf $pspdirname/0000000*.jpg"); + +}#endsub makethumbnail + +sub updatemp4file(){ +my $mp4filename = "MAQ${mp4filenamestring}.MP4"; + +if (-e "${mp4outdir}MAQ${mp4filenamestring}.MP4"){ +# MP4ファイル名をPIDレコードに書き込み + $DBQuery = "UPDATE foltia_subtitle SET PSPfilename = '$mp4filename' WHERE pid = '$pid' "; + $sth = $dbh->prepare($DBQuery); + $sth->execute(); +&writelog("ipodtranscode UPDATEsubtitleDB $DBQuery"); + +# MP4ファイル名をfoltia_mp4files挿入 + $DBQuery = "insert into foltia_mp4files values ('$tid','$mp4filename') "; + $sth = $dbh->prepare($DBQuery); + $sth->execute(); +&writelog("ipodtranscode UPDATEmp4DB $DBQuery"); + +&changefilestatus($pid,$FILESTATUSALLCOMPLETE); +}else{ +&writelog("ipodtranscode ERR MP4 NOT EXIST $pid/$mp4filename"); +} + + +}#updatemp4file + +sub counttranscodefiles(){ +my $DBQuery = "SELECT count(*) FROM foltia_subtitle, foltia_program, foltia_m2pfiles +WHERE filestatus >= $FILESTATUSRECEND AND filestatus < $FILESTATUSTRANSCODECOMPLETE AND foltia_program.tid = foltia_subtitle.TID AND foltia_program.PSP = 1 AND foltia_m2pfiles.m2pfilename = foltia_subtitle.m2pfilename "; +$sth = $dbh->prepare($DBQuery); +$sth->execute(); +my @titlecount= $sth->fetchrow_array; + +return ($titlecount[0]); + + +}