お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2009-04-02 10:08:48

quantum1
メンバ
登録日: 2009-03-26

[解決済み] nautilusなどでのwmvのタイトルの表示

皆さん、今日は、2回目の投稿になります。
今回は、題名にあるように、Nautilusなどのファイル表示で、Windows Media Player動画ファイル(WMV)のタイトルを一覧で表示できないものかと思い投稿しました。
Nautilusでファイル選択->右クリック->プロパティ->音声/動画タブでタイトルを見ることはできましたが、これを一覧で表示させたいです。KDEなどではできなさそうなので、 Nautilusで見ることができるだけありがたいとは思います。
自分ではWMVはできるだけ使わないようにしているのですが、家で購買している動画ファイルのフォーマットがWMVで、ファイル名は日にち以外はランダムで、タイトルに説明が記載されています。そのたくさんのファイルが家庭内にあるWindowsコンピューターにたまってしまいます。それを管理するのが私の家での仕事の一つなので、1つ1つの右クリックするのは結構な作業になってしまうのです。
もしこれができたら、1日に1度も家でWindowsを起動しなくてよい日が私にやってきます。可能であれば、ぜひ御享受のほど、よろしくお願いいたします。
今年にはいり、WinXPからUbuntuに移り、だいぶ環境が整ってきました。このフォーラムとアドバイスをしてくださっている皆様のおかげです。ありがとうございます。

最後の編集者: quantum1 (2009-04-05 11:27:05)

オフライン

 

#2 2009-04-02 22:35:30

hir0
メンバ
登録日: 2008-09-28

Re: [解決済み] nautilusなどでのwmvのタイトルの表示

それは単純にテキスト型式で一覧の表示で良いのでしょうか?
例えば一つのフォルダに複数のWMVファイルがありそれを
テキストファイルに出力する。

------------------------------------------
 name          Title
****      ******
****      ******   
****      ******  
****      ******
****      ******   
****      ******
****      ******   
****      ******
****      ******   
------------------------------------------
こんな感じでしょうか。

最後の編集者: hir0 (2009-04-02 22:36:40)

オフライン

 

#3 2009-04-03 00:32:25

STGSAGWAN
ゲスト

Re: [解決済み] nautilusなどでのwmvのタイトルの表示

quantum1 による投稿:

Nautilusでファイル選択->右クリック->プロパティ->音声/動画タブでタイトルを見ることはできましたが、これを一覧で表示させたいです。KDEなどではできなさそうなので、 Nautilusで見ることができるだけありがたいとは思います。

quantum1さん

面白そうだったので、Nautilusを機能拡張するpythonスクリプトを作りました。
以下の手順でセットアップし、ぜひ試してみてください。
いちおう、Ubuntu 8.10 で確認

[Pythonスクリプト]
追記: 2009/04/04
下記のはちょっと問題があるので、#7の修正版を使ってください
mov.py

コード:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import urllib
import nautilus

from hachoir_core.error import HachoirError
from hachoir_core.cmd_line import unicodeFilename
from hachoir_parser import createParser
from hachoir_metadata import extractMetadata

class ColumnExtension(nautilus.ColumnProvider, nautilus.InfoProvider):
    def __init__(self):
        pass

    def get_columns(self):
        return (nautilus.Column("NautilusPython::title_column",
                               "title",
                               "動画タイトル", # Movie Title
                               "Movie Title"),)

    def update_file_info(self, file):
        if file.get_uri_scheme() != 'file':
            return
        if file.is_mime_type('video/x-ms-asf'):
            filename = urllib.unquote(file.get_uri()[7:])
            filename, realname = unicodeFilename(filename), filename
            parser = createParser(filename, realname)
            if parser:
                try:
                    metadata = extractMetadata(parser)
                except HachoirError, err:
                    metadata = None
                if metadata:
                    for data in metadata:
                        if not data.values:
                            continue
                        description = data.description
                        for item in data.values:
                            if description == 'Title':
                                title = item.text
        file.add_string_attribute('title', title)
        self.get_columns()

[セットアップ手順]
端末での操作です。端末を使わない場合は括弧内の記述を参考に。

コード:

# ~/.nautilus配下に python-extensions というフォルダを作成
mkdir -p ~/.nautilus/python-extensions

# pythonスクリプトを作成したフォルダにコピー
# ファイル名は任意で。Movieなのでmovとしました。
cp -av mov.py ~/.nautilus/python-extensions

# 実行権を付与 (ファイルブラウザからは[ファイルの右クリック]->[アクセス権]->[プログラムとして実行できる]をON)
chmod +x ~/.nautilus/python-extensions/mov.py

# python-nautilus パッケージをインストール (Synapticパッケージマネージャーからインストール可)
# Nautilusを拡張するpythonを書くのに必要
sudo apt-get install python-nautilus

# python-hachoir-metadata  パッケージをインストール (Synapticパッケージマネージャーからインストール可) 
# wmv動画ファイルのメタデータ取得に必要
sudo apt-get install python-hachoir-metadata

# Nautilusのプロセス終了 (一旦ログアウトが一番確実)
killall nautilus

最後に、ファイルブラウザの[編集]->[設定]で、[一覧の項目]タブに新規の項目が出現するので、それをチェックONします。

手順は以上です。


[参考情報]
以下のURLを参考に作りました。
現在、日本語の情報は無さそうです。

# pythonは全くやったことないです。勉強がてら作ってみました。
# コードは無駄でアホな事してる可能性大。特に最後のあたりがかなりヤバく全然洗練されてない。

Nautilusのカスタマイズの概念
「Extending Nautilus with Scripts and Extensions」
http://www.linux.com/feature/114134?page=3
(今回のように詳細表示の列項目を追加するには、libnautilus-extensionsのnautilus-column-providerインタフェイスというのが要となる技術らしい)

Nautilusの詳細表示に音声ファイルの項目を追加するpythonスクリプト(原型として参考にした)
「Re: multimedia columns in list view」
http://www.nabble.com/Re%3A-multimedia-columns-in-list-view-p18350961.html

動画ファイルのメタデータ(タイトル、再生時間、etc)は、Hachoirというpythonライブラリ で取得
http://hachoir.org/
http://hachoir.org/wiki/hachoir-metadata/code
http://www.mail-archive.com/[email protected]/msg00393.html

テストに使ったWMVファイル
-http://support.microsoft.com/kb/316992/ja
-http://support.microsoft.com/support/mediaplayer/wmptest/samples/new/mediaexample.wmv

最後の編集者: STGSAGWAN (2009-04-04 05:20:57)

 

#4 2009-04-03 02:29:47

STGSAGWAN
ゲスト

Re: [解決済み] nautilusなどでのwmvのタイトルの表示

し、しまった。最後のネストしたforループで、titleを取得したらbreakするのを忘れてた・・・。
なので今のコードは、無駄なループが走っています。
誰かPythonerな人が直してくれると嬉しいけど、いずれ時間を作って直します。

 

#5 2009-04-03 10:11:40

quantum1
メンバ
登録日: 2009-03-26

Re: [解決済み] nautilusなどでのwmvのタイトルの表示

hir0さん、STGSAGWANさん、ご返事ありがとうございます。

hir0さん、このスレッドを投稿したときはNautilusの設定でどうにかならないものかと思っていましたが、hir0さんのご提示されている方法でも問題ないと言うことに気づきました。これだと、Kubuntuでも普通にできますね(KubuntuでもNautilusを使用する、または使用できるなら別ですが)。STGSAGWANさんにNautilusuようの設定を考えてはいただきましたが、同時にhir0さんの考えていらっしゃる方法も教えていただければうれしいです。

STGSAGWANさん、Nautilusのどこかをクリックできないものかと考えていたので、プログラムにコードを加えることを読んだときは驚きました。私はプログラムを書いたことはないので(大昔にautoexec.batに何か加えた記憶がある程度)、ビックリしました。ご提示していただいた方法は、正直自分で何をしているかはわかっていません。でもそのとおりにしまいした。端末ではミスタイプが怖いので(以前に`と'を内間違えて数日はまったことがありました)、そのままコピーペーストで端末をつづけたところ、見事にNautilusで動画タイトルのカラム(列)ができて、タイトルが表示されました。ありがとうございます。しかし、ホームネットワークごしのWMVが入っているフォルダを見ると、すべて”不明”になってしまいます。

同じ8.10でも、Ubuntu日本語ホームページから作成したCDでのインストールした直後と、アップデートした後では,ネットワークごしでは、方法が変わったと思っています。始めはSambaはインストールされていませんでした。カーネルが変わった段階でSambaが入ったと思います(Guiでのコントロールは自動では入っていない)。自分のコンピューターは、他のWindowsコンピューターからは不可視のままでいたいので、基本的にはSambaは無用と思っていたのですが、カーネルアップデートの後は、ホームネットワークのWindowsコンピュータを見るときはSambaになっていますよね(理解の仕方そのものが間違っていますか?)。

STGSAGWANさんの方法をしたあとでは、
smb://ホームネットワークのWindowsコンピュータ/共有フォルダ/
をNauitlusで開けると、動画タイトルのカラム(列)は”不明”の表示になっています。これがみれればなあと思っています。

ホームネットワーク越しのWindowsコンピュータのファイルを整理するときは、今までしたことがないリモートデスクトップでするとWidowsのExplorerを使えるのだろうかとも、今朝は考えていたのですが(今までリモートは使ったことがありません)、どちらサイドのリモート機能も使うことはしたくないので、それは断念したところでした。Wineもねんのためにインストールしましたが、付属のExploreではやはりタイトルは表示できませんでした。

改めて、お二人のお時間をさいていただき、ありがとうございます。よろしければ、引き続きご助言をください。

Quantum1

最後の編集者: quantum1 (2009-04-03 23:54:36)

オフライン

 

#6 2009-04-03 14:05:52

hir0
メンバ
登録日: 2008-09-28

Re: [解決済み] nautilusなどでのwmvのタイトルの表示

得に考えが有った分けではなくフォルダに有る*.wmvの数をカウンターにして配列に入れてfor分で
hachoir-metadata --level=1 *.wmv
で取得したタイトルを使おうと思っていたのですが、、、すこし恥ずかしいですね。

オフライン

 

#7 2009-04-04 04:25:05

STGSAGWAN
ゲスト

Re: [解決済み] nautilusなどでのwmvのタイトルの表示

STGSAGWAN による投稿:

し、しまった。最後のネストしたforループで、titleを取得したらbreakするのを忘れてた・・・。
なので今のコードは、無駄なループが走っています。
誰かPythonerな人が直してくれると嬉しいけど、いずれ時間を作って直します。

直しました。
# ちょっとやっつけ感はありますが・・・。

コード:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import urllib
import nautilus

from hachoir_core.error import HachoirError
from hachoir_core.cmd_line import unicodeFilename
from hachoir_parser import createParser
from hachoir_metadata import extractMetadata

class ColumnExtension(nautilus.ColumnProvider, nautilus.InfoProvider):
    def __init__(self):
        pass

    def get_columns(self):
        return (nautilus.Column("NautilusPython::title_column",
                               "title",
                               "動画タイトル", # Movie Title
                               "Movie Title"),)

    def update_file_info(self, file):
        if file.get_uri_scheme() != 'file':
            return
        if file.is_mime_type('video/x-ms-asf'):
            filename = urllib.unquote(file.get_uri()[7:])
            filename, realname = unicodeFilename(filename), filename
            parser = createParser(filename, realname)
            if parser:
                try:
                    metadata = extractMetadata(parser)
                except HachoirError, err:
                    metadata = None
                if metadata:
                    loopend = False
                    for data in metadata:
                        if loopend:
                            break;
                        if not data.values:
                            continue
                        description = data.description
                        for item in data.values:
                            if description == 'Title':
                                title = item.text
                                loopend = True
                                break
        file.add_string_attribute('title', title)
        self.get_columns()
 

#8 2009-04-04 04:40:13

STGSAGWAN
ゲスト

Re: [解決済み] nautilusなどでのwmvのタイトルの表示

quantum1 による投稿:

smb://ホームネットワークのWindowsコンピュータ/共有フォルダ/
をNauitlusで開けると、動画タイトルのカラム(列)は”不明”の表示になっています。これがみれればなあと思っています。

元々参考にしたスクリプトが、ローカルファイルを扱う事を前提として作られていて、私はそれをマネしただけなんです。
残念ながら、ネットワーク上のファイルを扱うように改造するのは、私にはちょっと無理っぽいです。

とはいえちゃんと代替策はあります。
$ sudo apt-get install smbfs
でsmbfsを入れて、
sudo mount -t cifs とかを使ってWindowsの共有フォルダをマウントし、「あたかも」ローカルファイルのように扱えるようにすれば、今回作成したスクリプトで動画ファイルのタイトルが取得できることは、いちおう確認できました。
例えば、\\WinServerA\\share1 を /mnt/win でマウントして、/mnt/win をNautilusで見ればちゃんと動画タイトルは見えます。
mountの細かいオプションは私には自信がないので、調べてみてください。

最後の編集者: STGSAGWAN (2009-04-04 04:40:57)

 

#9 2009-04-04 09:34:12

quantum1
メンバ
登録日: 2009-03-26

Re: [解決済み] nautilusなどでのwmvのタイトルの表示

hir0さん、STGSAGWANさん、ご追記ありがとうございます。

STGSAGWANさん、mov.pyを上書きしました。
smbfsをインストールしました。
sudo mkdir /mnt/smb/aaa
sudo mount -t cifs -o username=xxxx,password=xxxxxxxx=cp932,iocharset=utf8,defaults //wmvがあるコンピュータのIPアドレス/フォルダ名 /mnt/smb/フォルダ名
でマウントすることができました。意味は理解していないので、これからオプションについて勉強します。

その後、Nautilusで/mnt/smb/フォルダ名 を表示させたところ、ちゃんとタイトル名が表示されました。

hir0さん、端末でも/mnt/smb/フォルダ名 cdしてから
sudo hachoir-metadata --level=1 *.wmv
をしたら、タイトル名を含んだ結果がでました。ただこのように
xxxx.wmv: Common:
xxxx.wmv: - Title:タイトル名
xxxx.wmv: - Author: アーティスト名
1つのファイルで3つのラインが表示されます。1行目と3行目は私の場合はすべて同じなので、全体の出力結果がかなりの量になってしまいますが、smbfsでマウントした後は、しっかりとホームワーク越しのファイルもタイトルを表示させることができました。

私にとって、このことはネックになっている件でしたので、解決していただき、本当に感謝しております。ありがとうございます。これから活用させていただきます。

最後の編集者: quantum1 (2009-04-05 11:25:27)

オフライン

 

#10 2009-04-04 17:54:58

hir0
メンバ
登録日: 2008-09-28

Re: [解決済み] nautilusなどでのwmvのタイトルの表示

$ hachoir-metadata --level=1 *.wmv | sed -e '/Common:/d'

Common: を含む行が削除されます。

$ hachoir-metadata --level=1 *.wmv | sed -e '/Common:/d' -e '/Author:/d'

サンプルファイルが無いので確認は取れていませんがでどうでしょうか?

ファイル数などは
$ ls | grep wmv | wc -l

オフライン

 

#11 2009-04-05 11:11:12

quantum1
メンバ
登録日: 2009-03-26

Re: [解決済み] nautilusなどでのwmvのタイトルの表示

hir0さん、
教えていただいた、
$ hachoir-metadata --level=1 *.wmv | sed -e '/Common:/d' -e '/Author:/d'
xxxx.wmv: - Title:タイトル名
xxxx.wmv: - Title:タイトル名
...
と、うまくいきました!titlewmv.shとして活用しています。
ありがとうございました。

最後の編集者: quantum1 (2009-04-05 11:32:05)

オフライン

 

#12 2009-04-05 11:24:13

quantum1
メンバ
登録日: 2009-03-26

Re: [解決済み] nautilusなどでのwmvのタイトルの表示

STGSAGWANさん、

1日勉強した結果、
sudo smbmount //wmvがあるコンピュータ IPアドレス/フォルダ名 /mnt/smb/フォルダ名 -o username=xxxx,password=xxxx,iocharset=utf8
で落ち着きました。
smbmountをするとシャットダウン時自動アンマウントされないことに気づき、
sudo umount -l /mnt/smb/フォルダ名
(-lと-|の違いがわからず数時間悩みましたが)なんとかアンマウントできました。

Nautilusがすこぶる快適に動いています。
どうも、ありがとうございました。

最後の編集者: quantum1 (2009-04-05 11:30:07)

オフライン

 

#13 2009-04-05 16:24:25

einundzwanzighundertsechs
メンバ
登録日: 2008-12-28

Re: [解決済み] nautilusなどでのwmvのタイトルの表示

久しぶりにログインしたのでちょっとついでに...

コード:

$ hachoir-metadata --level=1 *.wmv | sed -e '/Common:/d' -e '/Author:/d'

となってますが,「Title: を含む行を取り出す」と考えるとコマンドは書き易くなります.

grep に慣れておいて損は無いのでまず grep を使います.

コード:

$ hachoir-metadata --level=1 *.wmv | grep Title:

sed では次のようにしてもOK

コード:

$ hachoir-metadata --level=1 *.wmv | sed -ne '/Title:/p'

また,Tilte: 行が 2,5,8,11,... 行目に現れるとして,

コード:

$ hachoir-metadata --level=1 *.wmv | sed -ne '2~3p'

sed は検索と同時に加工が重要なコマンドなので,タイトル名の前の「- Title:」を削除するには,例えば

コード:

$ hachoir-metadata --level=1 *.wmv | sed -ne 's/[^:]*Title://p'

wmv ファイルが無いので試してません.

修正:オプションを間違えてました.

最後の編集者: einundzwanzighundertsechs (2009-04-05 16:29:41)

オフライン

 

#14 2009-04-05 20:59:38

hir0
メンバ
登録日: 2008-09-28

Re: [解決済み] nautilusなどでのwmvのタイトルの表示

となってますが,「Title: を含む行を取り出す」と考えるとコマンドは書き易くなります.

数十秒考えた後に本当に「あ〜〜〜」と声を出してしまいました。

また,Tilte: 行が 2,5,8,11,... 行目に現れるとして,

これもコマンドで(どこまでがコマンドか分からないですけど)解決するのですね。

得に考えが有った分けではなくフォルダに有る*.wmvの数をカウンターにして配列に入れてfor分で
hachoir-metadata --level=1 *.wmv
で取得したタイトルを使おうと思っていたのですが、、、

これも*wmvはワイルドカードでは無く純粋に説明としての「ほにゃならwmv」(「*」は事故の元なので引用に注意するようにと指摘は何度か有りました)でhachoir-metadataの引数[--level=1][ファイル名]で表示されるので、じゃ配列に入れて一つずつ参照させればOK。
他に希望が有れば取り出した結果を加工して使いまわせば、、、と思って結構楽しそうだなと思っていたら既にライブラリが存在してしかもそれを使った回答が短時間で来るとは:o

で*wmv をワイルドカードとして使用されて幸か不幸かOK。
そうループさせなくても当てはまるものを全て表示させるんでしたねorz.
行の削除でも規則性が有るのでループ削除がまず思いついてしまいました、、、

今回も変数の宣言と代入で?文字と数値で?気がつくと(私の問題は)式を使わずコマンドで完結出来る事だったのですね。

まだ全然Linuxを理解していませんが頑張ります。




  

オフライン

 

#15 2009-04-06 03:07:20

quantum1
メンバ
登録日: 2009-03-26

Re: [解決済み] nautilusなどでのwmvのタイトルの表示

einundzwanzighundertsechsさん、教えてくださりありがとうございます。

wmvが100以上、他のファイルと一緒にあるフォルダで4つとも、うまくいきました。
おっしゃるとおり、4つめの
$ hachoir-metadata --level=1 *.wmv | sed -ne 's/[^:]*Title://p'
だと、「タイトル」という字が出ないので、端末上で繰り返しが少なくすっきり見えるので、これを使わせていただきます。

hachoir-metadata --level=1、grep, sedについても少し勉強しました。
sedで、-eはその後の指定を使わない、-enはそれだけ出力する、、と言うのでよいのでしょうか?その他のことは、わかりませんでした。ubuntuを使いながら、すこしづつでも理解が出きるようになればと思います。

最後の編集者: quantum1 (2009-04-06 03:22:02)

オフライン

 

Board footer

Powered by FluxBB