在實際 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];
}
沒有留言:
張貼留言