http://blog.ishiro.com

2007/5/3 木曜日

動画ファイルからサムネイル作成ツール

Filed under: ツール, ビデオ, symfony — ishiro @ 4:59:42

PHPを使って.aviや.flvという動画ファイルからサムネイルを自動的に作成してくれるツールを作りました。.aviファイルを.flvファイルに変換してくれるようにもしてあります。

ffmpeg.class.tgz

PHPのサーバで動画からサムネイルを作ってくれるライブラリとしてはffmpeg-phpが有名だけどPHPのコンパイル作業から始めないとだめだし、連続キャプチャのサムネイルは作れないのです。

Symfonyのクラスとして作成していますが、普通にrequireすればほとんどどのプログラムからも使えると思います。システムにはffmpegコマンドをインストールしておいてください。サーバ側で次のように連続して一枚の動画サムネイルを作ってくれるソフトがなかったので自分で作りました。Windowsの対話型のプログラムならいくつかあるんですけどね。

mvi_0355.jpg

コードの中で次の値を変更すれば自由にお好みの動画サムネイルが作れると思います。オリジナルのサイズと異なる比率を指定してもちゃんと比率を正しく保ったまま中央部分を抜き出してくれるようにしてあります。

$thumb_count = 5; → サムネイル枚数
$thumb_width = 120; → サムネイル一枚の幅
$thumb_height = 100; → サムネイル一枚の高さ

こんな感じで呼び出すと/home/outputdir/test.jpgとしてサムネイルを作ってくれます。

getThumb(’/home/inputdir/test.flv’, ‘/home/outputdir/’);

.aviファイルを.flvに変換するにはこんな感じで呼び出します。これで/home/outputdir/test.flvが作成されます。

getFlv(’/home/inputdir/test.avi’, ‘/home/outputdir/’);

細かいところを言ったら修正が色々必要になったり、もっと使いやすくもできるけどとりあえずちゃんと動いてくれています(^-^;

2007/4/6 金曜日

Dreamhost上にSymfonyのインストール

Filed under: symfony — ishiro @ 8:34:05

Windows上で使っていたSymfonyをインターネット上でも使えるようにしてみました。DreamhostとSymfonyの組み合わせは大容量のストレージを必要とするサービスに利用するのにちょっと便利な組み合わせなので(遅いけど)インストール記録をメモ。

ちなみにPHPのフレームワークは数が多く出ているのでどれを選択すべきか最初困ってしまいましたがSymfonyを選びました。本当は全部使ってみて自分なりに区別して使いたいところだけどそんな余裕ないです。ここの記事を参考にしたというのもありますが、他にも色々とチェックしてみたところ

  • ドキュメントが豊富(英文しかないけど)
  • Symfony1系は向こう10年くらいエンタープライズ用にメンテナンスが継続されることを正式に発表
  • PHP5のみという潔さ!

という理由で即決でしたw でもSymfonyは他のフレームワークに比べて遅いようですね。HelloWorldを繰り返し表示させるだけのベンチマークなので鵜呑みにはできませんが、速度に主眼を置く場合考慮した方がいいかも。ただ、速度を気にするような大規模サービスならDBの速度の方が大事だと思います。O/Rマッパーの速度比較の方がうれしいかも。

上記のサイトで「CakePHPは良いものだが開発の速度が遅い」と評していると、コメント欄に「開発速度が遅いだと?一日にどれだけコードをコミットしているのかtracを見てみろ!一番開発速度の速いフレームワークだと言っておく」とCakePHPの開発者メンバからレスがついているところが面白いw 使う側からすると適材適所で使い分けていければ良いので、速度で競うよりも特色で競ってくれた方がうれしいなぁ。

さてインストールメモ。

Dreamhostのコントローラを使って使用するドメインのPHPバージョンを5に変更。

次に個人用pearのインストール。

$ /usr/local/php5/bin/pear config-create $HOME .pearrc
$ /usr/local/php5/bin/pear install –alldeps PEAR

ここで次のようにエラーがでる。

Notice: Undefined variable: php_errormsg in Downloader.php on line 1498
Could not download from “http://pear.php.net/get/PEAR-1.5.1.tgz”, cannot download “pear/PEAR”
Error: cannot download “pear/PEAR”

どうも色々と調べてみたところ /tmp 配下のアクセス権がないことによるエラーらしい。DHの設定ミスか?時間が経つと勝手に直ってました。なんだったんだろう…。

.bash_profileの設定は次の通り。

PEAR_LOCAL=/home/ishiro/pear
PHP_PEAR_PHP_BIN=/usr/local/php5/bin
PATH=$PEAR_LOCAL:$PHP_PEAR_PHP_BIN:$DEFAULT_DH_ACCOUNT_PATH

これでPHP5用のPEARが個人で使えるようになりました。次にsymfonyのインストール。

$ pear channel-discover pear.symfony-project.com
$ pear remote-list -c symfony
$ pear install symfony/symfony

次に実際に簡単なアプリケーションを作ってみる。アプリケーションをインストールするディレクトリに行って次のコマンドを実行。プロジェクト名をcmsとして、アプリケーション名をfrontendとする。frontendとは利用者に見せる部分を意味する名前。管理者用に後でbackendを作成する。

$ symfony init-project cms
$ symfony init-app frontend

この状態でhttp://自分のサイト/インストールしたディレクトリ/webでアクセス可能な状態になっている。はやっ。

サービスとするならエイリアスをかけてすっきりとさせたほうが良いでしょう。DHのコントロールパネルを使って、サブドメインにcmsを作成し/home/ishiro/cms.ishiro.com/webを直接そのサブドメインにエイリアスしました。

次に作成したドメインでsymfonyの基本リソースにアクセスできるようにします。ドキュメントを読むとapacheのaliasによって実現していましたが、ただのシンボリックリンクで試してみたところあっさり動いたのでこれでいきます。こっちの方が簡単。

# ln -s /home/ishiro/pear/data/symfony/web/sf /home/ishiro/cms.ishiro.com/web/

データベース接続用の設定(cofig/database.yml)

all:
 propel:
  class: sfPropelDatabase
   param:
    phptype: mysql
    host: mysql.ishiro.com
    database: cms
    username: *******
    password: *******

propel用にも設定(config/propel.ini)

propel.database = mysql
propel.database.createUrl = mysql://mysql.ishiro.com
propel.database.url = mysql://ユーザ名:パスワード@mysql.ishiro.com/cms

データベースの作成。先にスキーマを作ります。

propel:
 customer:
   _attributes: { phpName: Customer }
  id:
  name: varchar(50)
  address: varchar(30)
  sex: boolean
  tel: varchar(30)
  mail: varchar(50)
  url: varchar(50)
  course_id:
  branch_id:
  created_at:

 course:
   _attributes: { phpName: Course }
  id:
  name: varchar(50)
  summary: longvarchar
  created_at:

 branch:
  _attributes: { phpName: Branch }
  id:
  account: varchar(50)
  password: varchar(50)
  name: varchar(50)
  address: varchar(30)
  tel: varchar(30)
  mail: varchar(50)
  url: varchar(50)
  created_at:

次にこのスキーマからsqlを作ってやります。注意する点はデフォルトでは/home/ishiro/pear/php/symfony/vendor/propel-generator/build.propertiesがないのでbuild.properties-sampleをリネームすること。ベータ版の時はこんなことしなくても良かったのに正式リリースになるとこの作業が必要になってしまった。なんだろうな。

sqlの作成。

$ symfony propel-build-sql

sqlはdata/sql/lib.model.schema.sqlにできているのでMySQLにそのまま食べさせる。

データベースからモデル作成

$ symfony propel-build-model

クラスにデータベース操作用の基本メソッドを追加

$ symfony propel-generate-crud frontend customer Customer
$ symfony propel-generate-crud frontend branch Branch
$ symfony propel-generate-crud frontend course Course

これで基本的な足場となるアプリが完成。基本のレイアウト用HTMLとかちょっと修正すれば見た目も簡単に変更可能です。

http://cms.ishiro.com

管理者名とパスワードに共通の文字列”tokyo”,”osaka”,”hokkaido”と入力すればログイン可能です。ちょろっと作っただけなのでちょ~適当です(^-^;

こういうアプリケーションが数時間で手軽に作れるのだからフレームワークの威力絶大といった感じです。

デザイナさんと大量にHTMLファイルをやり取りしないで、自分で作っている限りsmartyの必要性は感じなかったです。