2012/06/01

wavecast録画ファイル名をどうにかする

epgrecならばファイル名カスタマイズ設定が出来るんでいいんですが、wavecastシステムのほうだと「UHF-channnel-date-time-s.mp4」って感じなのです。普通にブラウザベースで視聴するだけなら別にこれでもいいんだけれど、iTunesへ登録してAppleTVとかiPadで見たりしているとファイル名が重要なんです。AppleTVだとサムネイルが出るまですごく時間かかったり、出なかったり・・・なのでね。

と言うことで、録画ファイルをiTunesへコピーする段階でファイル名を番組名にしようと思います。

データベース(MySQL)から抜いてくる


ブラウザで録画した番組リストを出した時の番組名とかは、MySQLのデータベースに記録されているので、そこから引っこ抜いてくればいいやと。

で、調べまして、wavecastのデータベースには、vidrecとかv_vidrecっていう録画した番組のレコードがあると。その中にvid_fileがファイル名、vid_nameが番組名らしいと。

そして作成したファイル名変換スクリプト”v_rename.py”が、こちら。

#! /usr/bin/python
# -*- coding: utf-8 -*-
import sys
import os
import re
path = sys.argv[1]
fname = re.sub(r'^.*/','',path) #パスを消す。os.path使う?
fname = os.path.basename(path) #パスを消す。
vname = fname = re.sub(r'-s.mp4$','',fname) #-s以降を消す


import MySQLdb
from MySQLdb.cursors import DictCursor


try:
    con = MySQLdb.connect(host="127.0.0.1",charset="utf8",
                          db="XXX",user="XXX",passwd="XXX")
    cur = con.cursor();


    if cur.execute("select vid_name from vidrec where vid_file='"+fname+"'") > 0:
        row = cur.fetchone()
        vname = row[0] + fname.split('-')[2] # 日付追加


except:
    cur.close()
    con.close()


print vname
os.rename(path,path.replace(fname,vname))
(db,user,passwdは自分のに合わせて下さい。まあ皆同じだろうけれど)

ファイルパスを受け取って、UHF??っていう名前だけにして検索して、ヒットした番組名に変換です。
直接os.rename()でやってますが、シェル上でやろうとすると日本語コードがらみで面倒くさいので変換までやります。ヒットしなければ同名のまま。っていう処理です。

pythonで書いてありますが、/root/task内処理がpythonベースなので揃えたまでです。
このままでも動きますが、ちょっとでも効率良く動いてもらうために
$ python -m compileall v_rename.py
$ chmod +x v_rename.pyc
ってやって、pycの方を使うようにします。

cpとmvの間か

作ったスクリプトを、/root/taskに入れておいて、以前作ったitunesへのコピースクリプトが

cp $1 /media/nas1/iTunes/
mv /media/nas1/iTunes/*.m* '/media/nas1/iTunes/iTunes に自動的に追加'
な感じなので、

cp $1 /media/nas1/iTunes/
python /root/task/v_rename.pyc /media/nas1/iTunes/UHF*
mv /media/nas1/iTunes/*.m* '/media/nas1/iTunes/iTunes に自動的に追加'
でいいかなっと。
コピー後のファイルパスをちゃんと作って渡すのが面倒くさいのでUHF*ってことにして続きはOSに補完してもらうことにしました。

これで利用しやすくなるかな。


0 件のコメント:

コメントを投稿