終了

スクリプトで出力モジュールの出力情報を「1つのフレーム」に設定する方法

Community Beginner ,
Jun 13, 2023 Jun 13, 2023

リンクをクリップボードにコピー

コピー完了

スクリプトでレイダーキューへの追加及び設定を自動化しようそして躓いてしまいました。

満たすべき仕様は
・連番 or 単一のPNGファイルを出力する
・対象のコンポのdurationが1フレームの場合、ファイル名は「[コンポ名].png」
・対象のコンポのdurationが2フレーム以上の場合、ファイル名は「[コンポ名]_####.png」
・アルファの有無を選択可能にする
・アルファ有りの場合はストレートカラーで出力する

といったところなのですが、出力モジュールにてPNGシーケンスを設定するとどうしてもファイル名が「[コンポ名]_####.png」になってしまうようです。

手作業でこの処理を行うのであれば、対象のコンポを開いてメニューから「コンポジション/フレームを保存(S)/ファイル...」を呼び出せば「[コンポ名].png」で出力できることを確認できたのですが、このメニュー項目を呼び出す方法は無いようです。

同IDのメニューに意図通りアクセスする方法を知りたい 

また、類似の質問項目で以下があるようですがこちらの解決方法は「出力後にリネームする」ということのようでした。

Save frame as... Via scripting 

また、saveFrameToPng()メソッドでの出力も試みたのですがこちらアルファ有無の選択・ストレートカラーでの出力が出来ず仕様を断念しました。

 

 

以下本題なのですが
メニューから「コンポジション/フレームを保存(S)/ファイル...」にてレンダーキューを積んだ場合、出力モジュールには図のように「出力情報:1つのフレーム」と記載されているようです。
これをスクリプトから再現する方法をご存じの方はおられませんでしょうか。

image.png

キーワード
スクリプティング

表示

265

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines

correct answers 1 件の正解

Community Beginner , Jun 15, 2023 Jun 15, 2023

ありがとうございます!

早速試してみたところレンダーキュー上の表示は「[コンポ名].png」になったんですが

実際レンダリングしてみると「[コンポ名].png00000」というファイルになってました…

 

環境が最新でない(CC2020(17.7.0))のでそのせいかもしれませんね…

 

setSettingsで["Output File Info"]["File Template"]を上書きしてもダメでした…

om.setSettings({
    "Output File Info":{
    "Full Flat Path" : dname + fname,
    "Base Path"      : dname,
    "Subfolder Path" : "",
    "File Name"      : fname,
    "File Template"  : "[compName].[fileextension]"
  }
});

 

投票

翻訳

翻訳
Community Beginner ,
Jun 14, 2023 Jun 14, 2023

リンクをクリップボードにコピー

コピー完了

スクリプトから、出力情報:1つのフレームにするのはできなさそうでしたので、

ファイル名はcompからフレームを計算して以下のように名前を変えてあげればよいと思います。
アルファの選択はスクリプトからは変更できないようでしたので、出力モジュールテンプレートを
アルファなし、アルファありの2種類作って、テンプレートをスクリプトで変えるしかないかもです。
pngの場合ストレートになるので問題ないのですが、他の画像形式の場合は出力モジュールテンプレートで設定しておく必要があると思います。

saveFrameToPng()は合成チャンネルで出力されるみたいですね…

 

var rq = app.project.renderQueue;
var rqitem = rq.item(1);
var comp = rqitem.comp;

var fps = 1 / comp.frameDuration;
var frames = comp.duration * fps;

var name = (1 < frames) ? '[compName]_[####].[fileextension]' : '[compName].[fileextension]';

var om = rqitem.outputModule(1);

rqitem.om.file = new File(Folder.myDocuments.fsName + '/' + name);

 

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Beginner ,
Jun 15, 2023 Jun 15, 2023

リンクをクリップボードにコピー

コピー完了

ありがとうございます!

早速試してみたところレンダーキュー上の表示は「[コンポ名].png」になったんですが

実際レンダリングしてみると「[コンポ名].png00000」というファイルになってました…

 

環境が最新でない(CC2020(17.7.0))のでそのせいかもしれませんね…

 

setSettingsで["Output File Info"]["File Template"]を上書きしてもダメでした…

om.setSettings({
    "Output File Info":{
    "Full Flat Path" : dname + fname,
    "Base Path"      : dname,
    "Subfolder Path" : "",
    "File Name"      : fname,
    "File Template"  : "[compName].[fileextension]"
  }
});

 

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Beginner ,
Jun 15, 2023 Jun 15, 2023

リンクをクリップボードにコピー

コピー完了

レンダリングするとそうなってしまうんですね...すみませんそこは未検証でした。

出力情報を1つのフレームにしないといけなさそうなのですが、そこはスクリプトで設定できないようなので
以下の方法で出力モジュールテンプレートを作成するのがよさそうです。


1. コンポジションを開いて、コンポジション>フレームを保存>ファイル...を選択して適当なところに保存する

2. 表示されたレンダーキューに追加された出力モジュールがPhtoshopになってるのでその出力モジュールのプルダウンからカスタム...を選ぶ

3. 出力モジュール設定が開くので形式をPNGシーケンスにする(アルファなどは任意で)

4. 一度別のスクリプトで出力モジュールを保存すると出力情報が1つのフレームになっている出力モジュールテンプレートが出来る
例)

var rq = app.project.renderQueue;
var rqitem = rq.item(1);

var om = rqitem.outputModule(1);
om.saveAsTemplate('PNG still');

 

5. 運用するスクリプトで先の出力モジュールテンプレートををスクリプトで設定してから出力モジュールのファイル名を設定する
例)

var rq = app.project.renderQueue;
var rqitem = rq.item(1);
var comp = rqitem.comp;
var fps = 1 / comp.frameDuration;
var frames = comp.duration * fps;
var name = (1 < frames) ? "[compName]_[####].[fileextension]" : "[compName].[fileextension]";
var om = rqitem.outputModule(1);
om.applyTemplate('PNG still');
om.file = new File(Folder.myDocuments.fsName + '/' + name);

これで大丈夫かと思います。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Beginner ,
Jun 15, 2023 Jun 15, 2023

リンクをクリップボードにコピー

コピー完了

すみません、この出力モジュールテンプレートだと連番が書き出せないので、静止画用のテンプレートと、連番用のテンプレートを作って、1フレームの時と2フレーム以上の時は名前だけでなくテンプレートも切り替えないといけないです。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Beginner ,
Jun 20, 2023 Jun 20, 2023

リンクをクリップボードにコピー

コピー完了

最新

ありがとうございます、上手くいきました!

出力モジュールを運用するのでaomファイルで配布展開しやすいのもすごく助かります。

返答、御礼が遅くなりまして申し訳有りませんでした。

 

検証してみたところこの出力モジュールと組み合わせるレンダリング設定が

複数フレームになっている場合、毎フレーム出力先ファイルを上書きし、

最終的に最後のフレームが生き残るようです。

(そもそも1Fのコンポ専用にするので気にする必要ないのですが)

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines