いまさらQuickTimeのAtomの内容を収集する処理を書いてみる

metadataを取得したい。みたいな話があったのだけど、QuickTimeの場合はmetadataというかAtomの値を取得する感じでデータ取っていた記憶があるので、いまさらPythonで情報を取得する実験。

さすがに1から書くのも面倒なので、誰かコンテナ取得する処理書いてないかな~と検索したらいらっしゃいました
Mp4のファイルのコンテナを読み込む処理だけど、基本同じなので問題なし。

Python3.7で動かすと、そのままでは動かなかったのでちょっと手を入れつつ、必要なAtomの情報を取得できるようにAtomの情報を取り込んだり、対象のAtomを探しつつ読み込んだ情報を取得する簡単な処理を追加。

…で、一応FPSとか秒数を計算させてみた。
ざっくり、こんな感じで結果が出た。(’mvhd’, ‘stts’のAtomから、duration, TimeScale, SampleCountを取得)
※QuickTime7.7.9利用。エンコードはアニメーション、5秒(120フレーム)分を24FPSで出力。

以下、コード。
続きを読む いまさらQuickTimeのAtomの内容を収集する処理を書いてみる

Mayaのシーンが表示されるパネル

モデリングしたりレイアウトする時に使うパネル。Helpでは、まずビューと呼ばれている領域。
“modelPanel”というコマンドで用意出来るんですが、作る以前にデフォルトで存在しているこのビューの領域をスクリプトからどうやって弄るのか?というのは、結構疑問だったりする訳です。

まず「getPanel -wf」。
直前にフォーカスを持っていたパネルが取得できます。perspビューでオブジェクトを作成して、その後スクリプトエディタを開いて「getPanel -wf」を実行すると、perspビューのパネル名称を取得できます。(スクリプトエディタのパネルにフォーカスが移動するので、都合直前にフォーカスを持っているのはperspビューのパネル。という事になります。)

「getPanel -type “modelPanel”」を実行すると、下記のようになる。

 
4枚modelPanelが存在するという事です。実際、「top, front, side, persp」があるので4枚です。

modelPanel -q -l “modelPanel4″」を実行すると「// Result: Persp View //」が返ります。

逆に「getPanel -withLabel “Persp View”」を実行すると「// Result: modelPanel4 //」が返ります。

「modelPanel -q -cam “modelPanel4″」を実行すると「// Result: persp // 」が返ります。
※同様に「modelEditor -q -camera “modelPanel4″」でも「// Result: persp // 」が返ります。

予め「camera1」を作成しておいてから、「modelPanel -e -cam “camera1” “modelPanel4″」を実行すると、perspビューは「camera1」からの視点に変更されます。
同じことは「lookThru modelPanel4 camera1」でも可能です。(modelPanel4 –> perspView 置き換え可能。)

lookThruコマンドは、ビューへのカメラ設定専用コマンド。
ニア/ファー・クリップの値設定も可能。

 
先ほど少し触れた「modelEditor」コマンドを使うと、ビューの表示制御もできます。
予めシーンに「cube」を作成しておき、「modelEditor -e -displayAppearance “flatShaded” “modelPanel4″」を実行すると、画面表示がシェーディングモードに変更されますし、「modelEditor -e -displayTextures on “modelPanel4″」だと、テクスチャ表示がONになります。

「cube」を選択して「viewFit」コマンドを実行するとcubeが画面に収まるようにカメラ位置が調整されます。
viewFitは、アクティブなビューに対するコマンドなので、スクリプトで実行する場合には事前に対象のビューをアクティブに設定する必要があります。(例えば、perspビューならば「setFocus modelPanel4」を実行)

コマンドによって、オブジェクト名(modelPanel4)ではなくラベル名(“Persp View”)で指定できるが、コマンドにより異なるので留意。

Mayaをコマンドラインから立ち上げる

前回ちょっとしか書かなかったので、もうちょっと追加。

自動実行のmelを利用するには、

拡張子”.mel” のファイルを作成して、その中にmelで実行したい処理を列挙していけばOK。

もしバッチ実行ではない場合は、実行する処理の最後に quitコマンドを記述しておくことで、自動的に終了させることも可能。
但し、usersetup.melやusersetup.pyで起動時に独自に起動処理を設定している場合や、起動直後に新機能などを表示するダイアログを自動表示させる設定になっている場合には終了に失敗する場合があるので、まずはダイアログを自動表示させる設定はOFFにしておいて欲しい。
起動処理を設定している場合は使用しないように対処したり、evalDeferredコマンドを使用して、自動実行したい処理を遅延実行させるような対応が必要になる。

上記のように、バッチ実行ではない場合には自動終了時に面倒が起こる場合があるので、GUIや画面表示が存在しなくてはならない処理を実行する必要がない場合以外は、基本バッチモードでの実行が無難。(但し、playblastなど画面表示の機能が稼働していないと動作が得られないものもある点に留意。)

そういえば、参考サイトのサンプルのバッチファイルの記述では、Maya.exeを起動した場合にはスクリプトの自動実行を行わないような内容になっているが、MayaもMayaBatchもその辺りの設定項目は同じなので、通常のMaya起動からの自動実行もバッチファイルを少し変えてやれば可能になる。
一番最初のハードルは

環境設定群だと思う。
とても基本的な部分なのだが、通常は特に設定を変更する必要なく使えてしまう部分な上、変更すると使えていたものが使えなくなってしまい、元に戻せなくて焦る…といったことも起こりやすい。
この部分を試すにしても、冒頭の参考サイトにあるバッチファイルによる設定が活躍する。
バッチファイルで実行するぶんには、Windowsに直接設定されている内容を汚すことはないので、存分に設定を弄り倒すことができる。(但し、既にWindowsに設定された内容を引き継いでしまう部分があるので、逆に設定を消すようなバッチファイルの記述が必要になる場合がある点には留意。)

環境設定の学習が進めば、複数の環境を切り替えながら使うことも出来るようになるので、頑張って習得するのが良いと思う。

追記

maya.envにて、環境設定をカスタマイズできる事を知らなかったもので追記しておく。

Gitのコンフリクト解消の確認を、Windowsアプリで。

見つけたので、めも。
なるほど、gitの設定でこういうこと出来るのね…って感じ。(何年も前の記事だけど…)

【diffmerge】Gitのコンフリクト解消に便利なツール

記事と関係ないけど、diffツールというとWinMergeっていうのもあるけど、あれも使えるのだろうか?

12F509にpickit3で書き込み

めも。

基本の回路図が描かれてるページ(第12回 PICKIT3書き込み回路を設計する@ツールラボ)

抵抗値の参考に。(PICKIT3を使ってみよう)

MPLAB X IDEから直接PICに書き込み(PIC KIT 3でツボった話 「Target device was not found」)

マルツの書き込み用ボードの販促ページ。ツールの設定とかも書いてある(はじめてのPICマイコン第3回書き込み編@マルツオンライン)

ツールとかいろいろ列挙されてるページ…MPLAB Xは入ってないから、かなり古い情報?(PICにプログラムを書き込むには)

覚書

 たぶん 1~4pinに10kの抵抗を噛ましつつ、5V電源から同じく1pinに入れることで、プルアップの回路を組む辺りがキモっぽい。
 ※1~8pinにノイズ対策で0.1uコンデンサ入れるとこも。
 ※LEDは要るのかどうか不明。特に無くても書き込みは大丈夫そうな気がする…

会社で作成する書類(資料)について

 ふと「会社で作成する書類の書き方」みたいなものを、先日若い人に聞かれたことを思い出した。

 「どう、書くものなんでしょうか?」という、わりとフワっとした質問でした。
 既にある程度書いていたけど、なんかまとまりがない感じになってしまって長考…そんな流れで聞かれていたようだったので、まず最初に結論を書いてから、細かい話を書いたらどうかな…と答えた。最後に結論として締める書き方は、途中で発散した書き方をすると必ず締められない。
 大風呂敷は拡げ過ぎると畳めなくなる、の法則もあることだし。

 そもそもの話を考えてみると、会社でよく作成される書類というのは、基本的に「報告書」か「議案書(議題書)」になる。
 社会人になると最初に教わる「ほうれんそう」と同じ。「報告」「連絡」「相談」が求められている。

報告書とは

 「”X”は、”Y”である。」ということを纏めた書類。
 ”X”のことについて何も知らない人でも、「”Y”でしょ。」ってとりあえず基本的な答えを返せるようになる効果が得られるような書類。
 極端な話、タイトルで内容が100%判ればある意味で完璧。さらに細かいことを知りたければ、書類にじっくり目を通せばより詳しくなれる。というものが、報告書。

議題書とは

 例えば「”X”を、”Y”とするべきか?」という感じで、何かしらの問題”X”の解決策として”Y”を提案する…というように議題をまとめた書類。(もしくは、”Y”は駄目だから、”Z”にしましょう。みたいな場合も。)
 仕事時間は有限であるので、事前に相談の方向性を纏める形で議題を上げ、その書類に基づいて相談を進める。
 議題書の通りに話が進めば提案は通るだろうし、異論と共に難航すれば新しい議題にも繋がる。
 相談の経過自体も「議事録」の形で記録され、別途報告書として提出される。

従って—-

 報告書は…
 まず結論を書く。
 そして、その後に必要に応じて、詳細な情報を挙げて説明していく。
 最終的な纏めは、最初に書いているので、続く内容はひたすら掘り下げる(もしくは拡げる)為の情報になる。

 議題書は…
 まず提案を書く。
 その後に続けるのは、そもそも提案が発生した原因、具体的な対処例など、提案に繋がる道筋を示す情報を挙げる。
 その際は、単に「このようにすれば良いと思った。」というような事は避けて、可能な限り具体的な事例を挙げることが望ましい。

 というのが、結論的に言えそう。

With句の動作

参考:
with構文とは何なのか(@年中アイス)
Pythonのwithステートメントのまとめ(@$ cat /var/log/shin)
Pythonのwith構文で例外を補足する実例(@$ cat /var/log/shin)
Pythonのwith文(@まめりうむ )
with文(@PY習)

 結果から書くと、クラスを作って __enter__, __exit__メソッドの実装で、with
句開始行及びその後のブロックを抜ける際に其々実行される。
 ※__exit__の時に リソース開放処理(例えばcloseメソッド)を実行する。

 試しに、PySideのWidget.blockSignalを行う処理を自動開放してくれるクラスを書いてみたら、確かに自動開放された。

 こういうものをコンテキストマネジャと呼ぶらしい。
 Scipy lecture notesを読んでいて目にした。(コンテキストマネージャ)

Maya起動用バッチ

説明している人が居たので、メモしておく。

Maya起動バッチを作ろう@0303

コマンドラインからMaya起動する方法を知っていると、環境を複数用意することも可能になるので、特に開発を行っている人に必要になる知識。知っておくと、環境をキチンと分けられるので無用な問題も減って開発しやすいと思う。
※ただ、キチンと分けない人の環境で発生する問題に気付くことには疎くなる…という別のデメリットもあるけど。。

Maya終了時のスクリプトログを得るには。

そもそも、どうやって取るのか全然知らないので、ちょっと調べてみた。
方法はいろいろあるかもしれないが、環境変数”MAYA_CMD_FILE_OUTPUT”で指定したファイルにログを出すことができた。

予め上記のように環境変数に出力ファイルを指定しておくと、そのファイルにスクリプトログの結果が出力される。
Mayaが閉じる場合に実行されるスクリプトのログを取らないといけない場合には、こういう手段でもないと状況が判らない…

追記

上記はコマンドプロンプトからMayaを実行する場合の話なので、Mayaアイコンのダブルクリックで実行する場合にはWindowsのシステム設定の環境変数として”MAYA_CMD_FILE_OUTPUT”を登録する必要がある。

辿り方は2通り。
・コントロールパネル(アイコン表示時) > システム > システムの詳細設定 > 環境変数
・コントロールパネル(カテゴリ表示時) > システムとセキュリティ > システム > システムの詳細設定 > 環境変数

コントロールパネルには、表示方法が「カテゴリ」と「アイコン」の2通りがあるので、設定により辿る際のパスが違う点に留意。
※デフォルトでは、カテゴリ表示。
追記(その2)

掲題の目的とは別に、スクリプト実行時のログをファイルに残したい場合には「cmdFileOutput」というコマンドがあった。
こちらは自分でログファイルのopen/closeを指定する必要があるので終了時に使うようなコマンドではないが、特定のコマンドを実行する際にのみログを取りたい場合には、直前・直後にopen/close操作をすることで特定の処理のログだけをファイルに出力できる。

ファイル操作と同じくcloseを明示的に行う必要がある為、その点には注意が必要。(特に、例外発生でclose処理がskipされることがないように留意する事。)
その後

 MayaやMayaBatchの起動スイッチに -log というのがあって、これでもログをファイルに記録することが可能だった。

Substance Automation Tool

思い出したので、これもめも。

substanceの機能を自動化するツールキット。
内容的には、バッチファイル用のコマンドラインツール、およびPythonによる自動処理用のライブラリ・パッケージのセット。
Indie版だとDesignerかsubscriptionを持っていると使える。Pro/Enterpriseの場合は、別途ライセンス提供という形になる模様。(ライセンス価格は非公開なので、要問い合わせ)

Substance Automation Toolkitとは@BornDigital
質感自動適用パイプラインの参考動画

Maya Python Pluginのこと

 すっかり忘れていたけど、Maya PluginはPythonでも記述できる。
 Pythonはインタプリタなので、単純操作での処理速度は(特に制限なく並列処理も可能な)ネイティブコードを実行できるC++に敵う筈もないけど、何も考えなくても基本的な処理の流れがある程度最適化された形で実行されるPythonも状況によっては遜色なく使える。
 ※特にMayaはごく最近のバージョンまで並列処理をなかなか安定的に処理できなかったし。。

MayaはParallel Evaluation(並列評価)という仕組みが2015か2016で実装されて以来、いままで少しずつ機能が整えられてきていて、2019辺りではようやく使えるかな…という気配も見えてきた気がする。
並列処理が難しいのは順不同で評価が始まる部分。評価順序に優先度がある場合には意図しない結果に繋がるので、まず評価に順序があるのかないのかをよく考える必要がある。

 
 今更C++を思い出そうとしていたけど、新しいPCには光学ドライブすら付いてなくてVisualStudioのインストールにも骨を折らないといけない状況なので、Pythonでやってみようかと思い始めたり。

 これはMaya2017ヘルプでの記述だけど、ざっくり言ってC++で書いていたような記述をPython形式で記述してMayaのPluginフォルダに入れてやれば、PythonでMayaのPluginを用意できる。

 DFTalkに記事があったので、これも引用しておく。

MayaのPluginを書くには、オブジェクト指向についての知識が必要になる。
「オブジェクト指向とはなにか?」については、簡単に説明することがとても難しい概念だけど、(オブジェクト指向とレスポンシビリティで)以前触れたことがある。このあたりに関しては書籍などもあたってみて、正しい知識を仕入れて欲しい。

今更USD@PIXARの記事を読み返す

USD (ユニバーサルシーンディスクリプション)@takahito-tejima

 今読むと、最初の頃にUSDに見ていた物とは少し違う視点になったかも。
 特定のDCCツールに組み込みで利用するっていう面もあるけど、肝はそこではないんだよな…っていう部分も見えるというか。尤もHydraを使うってなると、既にpluginが用意されてるツール以外は1から組み込む必要があるし、その辺は既に組み込まれてるソフトの方が当然導入しやすい。

 肝のデータ構造と非破壊の性質を、どこまで利用できるかなーって考えてようやくスタート地点に立つ感じ。。