FREEBOX IV

かりっちのブログ 《 超個人的メモブログ 》

【PHP】3gp映像ファイルから時間長を取得する方法

2007年03月01日 | Tips

QuickTime形式(moov)の映像から映像長を返却する方法を紹介します.
【参考URL】
MQVで学ぶQuickTime Atomフォーマット(その1)
MQVで学ぶQuickTime Atomフォーマット(その4)

実は,apple社が提供しているフリーソフト「dumpster」 を使用して、3gpファイルのAtom構造を表示・修正できます.Atom構造の勉強にもなります.
>>DL

一番簡単に実装する方法は,既存のgetID3ライブラリ(GPL)を使うのがよいのかも.
>>DL

下記のスクリプトは,3gpファイルから,Movie header atom構造における,映像の時間長の情報が格納されている,mvhd の部分を抽出し,直接バイナリデータとして時間長を取得しています.最終的には,バイナリデータから10進数情報に変改しています.

<?php
  $filename = "ファイル名";
  $handle = fopen($filename, "rb");
  // ファイル読み込み
  $contents = fread($handle, filesize($filename));
  
  // moov/mvhd (Movie header atom)の文字列を検索
  $findkey = 'mvhd';
  $pos1 = stripos($contents, $findkey);
  $pos2 = $pos1+strlen($findkey)+12;
  
  //バイナリ情報を16進数文字列に変化し10進数に変換(もっとスマートな方法ないかな?)
  $timeScale_bin = substr($contents, $pos2, 4);
  $timeScale  = hexdec(bin2hex($timeScale_bin));
  
  $duration_bin = substr($contents,($pos2+4),4);
  $duration = hexdec(bin2hex($duration_bin));
  
// タイムスケールがファイル毎に違うので,正規化した時間長を計算
  $normalizedDuration = $duration/$timeScale;
  
  fclose($handle);

?>