チェンジセット 125: trunk

差分発生行の前後
無視リスト:
コミット日時:
2010/10/19 19:07:34 (14 年前)
コミッタ:
sorshi
ログメッセージ:

MP4変換時に、
・tss.pyでHDストリーム分離
・それに失敗したらWINE経由でTsSplitter?.exeで分離
という工程を踏むように変更。
HDストリームのみのTSは変換終了後破棄。

ファイル:

凡例:

変更無し
追加
削除
更新
コピー
移動
  • trunk/install/perl/ipodtranscode.pl

    r111 r125  
    7171$mp4filenamestring = &mp4filenamestringbuild($pid); 
    7272 
     73if (-e $inputmpeg2){#MPEG2ファイルが存在していれば 
     74 
    7375&writelog("ipodtranscode DEBUG mp4filenamestring $mp4filenamestring"); 
    7476#展開ディレクトリ作成 
     
    145147} 
    146148if ($filestatus <= $FILESTATUSTRANSCODEFFMPEG){ 
    147  
     149        unlink("$filenamebody.264"); 
    148150        # H.264出力 
    149151        $trcnmpegfile = $inputmpeg2 ; 
     
    158160        # クオリティごとに 
    159161        if (($trconqty eq "")||($trconqty == 1)){ 
    160         $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"; 
     162        $ffmpegencopt = " -threads 0 -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"; 
    161163        }elsif($trconqty == 2){ 
    162164#       $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"; 
    163165# for ffmpeg 0.5 or later 
    164         $ffmpegencopt = " -s 480x272 -deinterlace -r 29.97 -vcodec libx264 -vpre default   -g 300 -b 400000 -level 13 -sc_threshold 60 -rc_eq 'blurCplx^(1-qComp)' -refs 3 -maxrate 700000 -async 50 -f h264 $filenamebody.264"; 
     166        $ffmpegencopt = " -threads 0  -s 480x272 -deinterlace -r 29.97 -vcodec libx264 -vpre default   -g 300 -b 400000 -level 13 -sc_threshold 60 -rc_eq 'blurCplx^(1-qComp)' -refs 3 -maxrate 700000 -async 50 -f h264 $filenamebody.264"; 
    165167        }elsif($trconqty == 3){#640x352 
    166168#       $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"; 
    167169# for ffmpeg 0.5 or later 
    168         $ffmpegencopt = " -s 640x352 -deinterlace -r 29.97 -vcodec libx264 -vpre default   -g 100 -b 600000 -level 13 -sc_threshold 60 -rc_eq 'blurCplx^(1-qComp)' -refs 3 -maxrate 700000 -async 50 -f h264 $filenamebody.264"; 
     170        $ffmpegencopt = " -threads 0  -s 640x352 -deinterlace -r 29.97 -vcodec libx264 -vpre default   -g 100 -b 600000 -level 13 -sc_threshold 60 -rc_eq 'blurCplx^(1-qComp)' -refs 3 -maxrate 700000 -async 50 -f h264 $filenamebody.264"; 
    169171        } 
    170172        &changefilestatus($pid,$FILESTATUSTRANSCODEFFMPEG); 
    171         &writelog("ipodtranscode ffmpeg $filenamebody.264"); 
    172         system ("ffmpeg -y -i $trcnmpegfile $cropopt $ffmpegencopt"); 
    173          
    174         #もしエラーになったらTsSplitする 
     173#       &writelog("ipodtranscode ffmpeg $filenamebody.264"); 
     174#       system ("ffmpeg -y -i $trcnmpegfile $cropopt $ffmpegencopt"); 
     175#まずTsSplitする →ワンセグをソースにしてしまわないように 
    175176        if (! -e "$filenamebody.264"){ 
    176177                &changefilestatus($pid,$FILESTATUSTRANSCODETSSPLITTING); 
     
    180181                &writelog("ipodtranscode tss $inputmpeg2"); 
    181182                system("$toolpath/perl/tool/tss.py $inputmpeg2"); 
    182                  
    183183                }else{ 
    184184                # TsSplit 
    185               &writelog("ipodtranscode TsSplitter $inputmpeg2"); 
    186               system("wine $toolpath/perl/tool/TsSplitter.exe  -EIT -ECM  -EMM -SD -1SEG -WAIT2 $inputmpeg2"); 
     185#             &writelog("ipodtranscode TsSplitter $inputmpeg2"); 
     186#             system("wine $toolpath/perl/tool/TsSplitter.exe  -EIT -ECM  -EMM -SD -1SEG -WAIT2 $inputmpeg2"); 
    187187                } 
    188188                if(-e "${filenamebody}_tss.m2t"){ 
     
    192192                }else{ 
    193193                &writelog("ipodtranscode ERR NOT Exist ${filenamebody}_HD.m2t"); 
    194                 $trcnmpegfile = inputmpeg2 ; 
    195                 } 
     194                $trcnmpegfile = $inputmpeg2 ; 
     195                } 
     196                #Splitファイルの確認 
     197                $trcnmpegfile = &validationsplitfile($inputmpeg2,$trcnmpegfile); 
     198                #tss.pyに失敗してたなら強制的にWINEでTsSplit.exe 
     199                if($trcnmpegfile eq $inputmpeg2){ 
     200                 
     201                # TsSplit 
     202                &writelog("ipodtranscode WINE TsSplitter.exe $inputmpeg2"); 
     203                system("wine $toolpath/perl/tool/TsSplitter.exe -EIT -ECM  -EMM -SD -1SEG -WAIT2 $inputmpeg2"); 
     204                if (-e "${filenamebody}_HD.m2t"){ 
     205                        $trcnmpegfile = "${filenamebody}_HD.m2t"; 
     206                        #Splitファイルの確認 
     207                        $trcnmpegfile = &validationsplitfile($inputmpeg2,$trcnmpegfile); 
     208#                       if($trcnmpegfile ne $inputmpeg2){ 
     209#                       &changefilestatus($pid,$FILESTATUSTRANSCODEFFMPEG); 
     210#                       &writelog("ipodtranscode ffmpeg retry ; WINE TsSplitter.exe $trcnmpegfile"); 
     211#                       system ("ffmpeg -y -i $trcnmpegfile $cropopt $ffmpegencopt"); 
     212#                       }else{ 
     213#                       &writelog("ipodtranscode WINE TsSplit.exe fail"); 
     214#                       } 
     215                }else{ 
     216                &writelog("ipodtranscode WINE TsSplitter.exe ;Not exist ${filenamebody}_HD.m2t"); 
     217                }#endif -e ${filenamebody}_HD.m2t 
     218                 
     219                }#endif $trcnmpegfile eq $inputmpeg2 
     220                 
     221                 
    196222                #再ffmpeg 
    197223                &changefilestatus($pid,$FILESTATUSTRANSCODEFFMPEG); 
     
    205231                &writelog("ipodtranscode ffmpeg retry no crop $filenamebody.264"); 
    206232                system ("ffmpeg -y -i $trcnmpegfile $ffmpegencopt"); 
     233        } 
     234        #強制的にWINEでTsSplit.exe 
     235        if (! -e "$filenamebody.264"){ 
     236        } 
     237        #それでもエラーならsplitしてないファイルをターゲットに 
     238        if (! -e "$filenamebody.264"){ 
     239                #再ffmpeg 
     240                &changefilestatus($pid,$FILESTATUSTRANSCODEFFMPEG); 
     241                &writelog("ipodtranscode ffmpeg retry No splited originalTS file $filenamebody.264"); 
     242                system ("ffmpeg -y -i $inputmpeg2 $ffmpegencopt"); 
    207243        } 
    208244} 
     
    312348        } 
    313349        unlink("${filenamebody}_HD.m2t"); 
     350# ConfigによってTSファイルは常にsplitした状態にするかどうか選択 
     351# B25失敗したときにここが走るとファイルぶっ壊れるので検証を入れる 
     352# 
     353#       if (-e "${filenamebody}_tss.m2t"){ 
     354#               unlink("${filenamebody}.m2t"); 
     355#               unless (rename "${filenamebody}_tss.m2t", "${filenamebody}.m2t") { 
     356#               &writelog("ipodtranscode WARNING RENAME FAILED ${filenamebody}_tss.m2t ${filenamebody}.m2t"); 
     357#               }else{ 
     358#                
     359#               } 
     360#       } 
    314361        unlink("${filenamebody}_tss.m2t"); 
    315362        unlink("$filenamebody.264"); 
     
    386433#一回で終らせるように 
    387434#exit; 
     435 
     436 
     437}else{#ファイルがなければ 
     438&writelog("ipodtranscode NO $inputmpeg2 file.Skip."); 
     439}#end if 
     440 
    388441}# end while 
    389442#残りファイルがゼロなら 
    390443&writelog("ipodtranscode ALL COMPLETE"); 
    391444exit; 
     445 
    392446 
    393447#----------------------------------------------------------------------- 
     
    464518 
    465519 
    466 
     520}#end sub counttranscodefiles 
     521 
     522 
     523sub validationsplitfile{ 
     524my $inputmpeg2 = $_[0]; 
     525my $trcnmpegfile = $_[1]; 
     526 
     527                #Split結果確認 
     528                my $filesizeoriginal = -s $inputmpeg2 ; 
     529                my $filesizesplit = -s $trcnmpegfile; 
     530                my $validation = 0; 
     531                if ($filesizesplit  > 0){ 
     532                        $validation = $filesizeoriginal / $filesizesplit   ; 
     533                        if ($validation > 2 ){ 
     534                                #print "Fail split may be fail.\n"; 
     535                                &writelog("ipodtranscode ERR File split may be fail: $filesizeoriginal:$filesizesplit"); 
     536                                $trcnmpegfile = $inputmpeg2 ; 
     537                                unlink("${filenamebody}_tss.m2t"); 
     538                                unlink("${filenamebody}_HD.m2tt"); 
     539                                return ($trcnmpegfile); 
     540                        }else{ 
     541                                #print "Fail split may be good.\n"; 
     542                                return ($trcnmpegfile); 
     543                        } 
     544                }else{ 
     545                #Fail 
     546                &writelog("ipodtranscode ERR File split may be fail: $filesizeoriginal:$filesizesplit"); 
     547                $trcnmpegfile = $inputmpeg2 ; 
     548                unlink("${filenamebody}_tss.m2t"); 
     549                unlink("${filenamebody}_HD.m2tt"); 
     550                return ($trcnmpegfile); 
     551                } 
     552}#end sub validationsplitfile 
     553 
track feed