在實際 parsing 影片時碰到 width, height 的顯示格式問題
在預想的狀況下, 以 mediainfo 取出的 video width & height 會是下面的格式
width => 480 height => 272 frameRate => 29.970
但在某些影片會變成
width => 480 / 480 height => 272 / 272 frameRate => 29.970 / 29.970
這樣會因為格式不同造成後續 ffmpeg cmd 的錯誤;
這時可由 php 的 intval() / floatval() 來解決 (php 真是有夠好用)
完整的 code 如下
# mediainfo audio parse cmd $cmda = "/usr/bin/mediainfo --Inform='Audio;%Format%\n%Channel(s)%' $filePath"; # mediainfo video parse cmd $cmdv = "/usr/bin/mediainfo --Inform='Video;%Format%\n%Width%\n%Height%\n%Duration%\n%DisplayAspectRatio/String%\n%Rotation%\n%FrameRate%\n%ScanType%' $filePath"; exec($cmda, $outputa, $retvala); if ($retvala===0) { $result['AUDIO_STREAM'] = $outputa[0]!=null ? '1' : null; $result['AUDIO_CHANNELS'] = $outputa[1]; } exec($cmdv, $outputv, $retvalv); if ($retvalv===0) { # mediainfo parsing Video;Width,Height,FrameRate 時, 有些影音的值會是 # width:480 / 480, height:272 / 272, frameRate:29.970 / 29.970, 這樣會造成後續的判斷錯誤 # 故加上 intval()/floatval() 只取 int/float 的部份, 如此會改回 # width:480, height:272, frameRate:29.970, 以讓後續的處理正常 $result['VIDEO_STREAM'] = $outputv[0]!=null ? '1' : null; $result['VIDEO_WIDTH'] = intval($outputv[1]); $result['VIDEO_HEIGHT'] = intval($outputv[2]); $result['VIDEO_DURATION'] = $outputv[3]; $result['VIDEO_DAR'] = $outputv[4]; $result['VIDEO_ROTATION'] = $outputv[5]; $result['VIDEO_FRAMERATE'] = floatval($outputv[6]); $result['VIDEO_SCANTYPE'] = $outputv[7]; }
沒有留言:
張貼留言