プログレスバー 2 | ストックオーディオコンバーター

FFprobe

ファイルの情報を取得するにはFFprobeを利用します。基本的な構文は、

ffprobe -hide_banner town.flac

以下のような出力が得られます。

$ ffprobe -hide_banner town.flac 
Input #0, flac, from 'town.flac':
  Metadata:
    ENCODER         : FL Studio
  Duration: 00:01:20.00, start: 0.000000, bitrate: 690 kb/s
    Stream #0:0: Audio: flac, 44100 Hz, stereo, s16

ここから必要な情報を抜き出します。

曲の長さを取得

FFprobeのコマンドより、

exec('ffprobe -hide_banner town.flac </dev/null 2>&1',$contentAry,$error);

出力が配列として$contentAryに格納されるので、これを1つの文字列として展開するためにimplode()を用います。

$content = implode($contentAry);

これにより、目的の文字列を取り出します。

preg_match('/Duration: (.*),/',$content,$duration);

取得した文字列を以下のように秒数に変換します。

function getSec($str){
    $sec = 0;
    foreach(explode(':',$str) as $key=>$value){
        if($key!==2) $value *= $key===1? 60:3600;
        $sec += $value;
    }
    return $sec;
}

explode()は第1引数で指定した文字列を区切りとして、第2引数の文字列を配列で返します。上記の例であれば、$str'00:01:20.00'とすると、

Array
(
    [0] => 00
    [1] => 01
    [2] => 20.00
)

この配列のインデックスを$key、それに対応する値を$valueとして順番に取り出し、時と分の単位を秒にし、その合計を返します。

$durTotalSec = getSec($duration); //80

最後に、これらとは別に、曲の長さを取得するのに、wikiで紹介されている方法もあるので、以下に引用します。

$ ffprobe -v error -select_streams v:0 -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 town.flac 
80.000000

URL: sac.ringil-music.com
環境: さくらのVPS・Centos7・Nginx・PHP-FPM

コメントを残す

メールアドレスが公開されることはありません。