中級プログラマの自宅でPHP ブログ

自宅用ポータルシステム「MyHome Portal」をオープンソースで公開。MyHome Portalの説明とエンハンス情報。

Ver.1.40:動画のサムネイル表示実現

MyHome Portal Ver.1.40を リリースしました。

http://ok2nd.web.fc2.com/download.html

アルバムで動画のサムネイル表示ができるようにしました。

サーバーPCのローカルディスクの任意のフォルダの動画のサムネイル表示ができます。サムネイル画像の拡大/縮小もできます。

Windows XPフォルダの縮小版表示でサムネイル表示されないflvなどもサムネイル表示できます。

140-1.jpg

140-2.jpg

動画のサムネイル画像生成には、ffmpegを使っています。

ffmpegは、「お気に入りの動画を携帯で見よう(http://blog.k-tai-douga.com/)」から、Windows用バイナリをダウンロードしてインストールしてください。

対象の動画は、拡張子「avi,flv,mpg,mov,swf,wmv」を設定しています。

サムネイルをダブルクリックまたはクリックで動画再生または動画ダウンロードできます。ただし、動画の種類によって、エラーになるなど、動画再生が出来ない場合もあります。とくにIEが再生できない場合が多いようです。

実現方法をソースの抜粋(?)で示します。

【index.php

.....

<a href="video-view.php?file=xxx.flv">

<img src="video-jpeg.php?file=xxx.flv">

</a>

.....

【video-jpeg.php

ffmpegJPEGを生成して標準出力に出したものをpassthruでブラウザに送っています。

.....

$cmd = 'ffmpeg -vframes 1 -i "'.$file_name.'" -f image2 -';

header("Content-Type: image/jpeg");

@passthru(mb_convert_encoding($cmd, 'SJIS-win', 'UTF-8'));

【video-view.php

IEはheaderで指定するファイル名をエンコードではなくShift-JISにした方が問題が少ないようです。

.....

$file_SJIS = mb_convert_encoding($file_name, 'SJIS-win', 'UTF-8');

$fp = fopen($file_SJIS, "rb");

if ($fp) {

if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) {

$filename = mb_convert_encoding(substr($file_name,strrpos($file_name,'/')+1), 'SJIS-win', 'UTF-8');

} else {

$filename = urlencode(substr($file_name,strrpos($file_name,'/')+1));

}

header('Content-type: '.$mime_type.'; name='.$filename);

header('Content-Disposition: inline; filename='.$filename);

fpassthru($fp);

}