AfterEffectsでエフェクト適用のショートカットを作ってみよう
2012/9/10
Tag: AfterEffects,javascript,script,tips
こんにちはー。開発室のひらく[@horonig]です。
今回はちょっと力を抜いて、AfterEffectsの簡単なtipsを紹介します。
手抜き記事ではないですよ!ちょっと時間が取れないだけで!
皆さんは『良く使うエフェクトをショートカットで簡単に適用したい』と思ったことはありませんか?僕はありません(ぁ
実は先日、某チーフデザイナーに似たような質問をされました。彼は某ページに載っていたやり方でそれを実現していたのですが、AECS5.5になってその方法が効かなくなった、という事で質問してきたのです。その内容がちょっとしたtipsになりそうだったので、彼がやっていたその方法と解決方法を以下で説明してみます。
今回は windows7, AfterEffects CS5.5(日本語版) という環境下でのお話です それ以外の環境ではパスなどが変わる可能性があります |
■スクリプト準備
app.executeCommand(app.findMenuCommandId("トーンカーブ"))
上のコードを以下の場所へUTF-8で保存します。
インストールドライブ:\Program Files\Adobe\Adobe After Effects CS5.5\Support Files\Scripts\01_curves.jsx
日本語のようなマルチバイト文字が入っている場合はUTF-8で保存しないと動きません |
■ショートカット設定
C:\Users\≪userName≫\AppData\Roaming\Adobe\After Effects\10.5\Adobe After Effects 10.5 ショートカット.txt
の中身をいじり、“ExecuteScriptMenuItem01” = “(1)” と設定して保存します。
これは数字キーの”1″をショートカットとして[スクリプトメニューの一番目に]割り当てる、という意味になります。
AEを起動し、こんな感じにメニューが表示されていればショートカットとして動くはずです
デフォルトでは “CompGotoMarker1” = “(1)” となっているため、CompGotoMarker1(マーカー番号①へのジャンプ)のショートカットは効かなくなりますが、その辺は自己責任でお願いします また、ショートカット設定がうまくされない場合は、もしかしたら “CompGotoMarker1” = “” に変更する必要があるかもしれません(重複してる場合はどちらかが優先になるっぽいので) |
■実行
レイヤを選択してキーボードの”1″を押します。(NumPadの方じゃないですよ)
すると、レイヤに「トーンカーブ」が適用される。。はずでしたがCS5.5ではうまく動きません。。
■コード変更
冒頭でも書いた通り、『AECS4まではうまく動いていたこの方法が、CS5.5になって動かなくなってしまったのは何故か』というのが某チーフからの質問だったのでちょっと調べてみたところ、app.findMenuCommandId(“トーンカーブ”) がマイナスの値を返してしまっているのが原因という事が分かりました。(相変わらずAEスクリプトはく○そですなぁ)
なので一からスクリプトを書けばうまくいくかもと思い、01_curves.jsx を以下のように変更してみました。
//effect name var effectName = "ADBE CurvesCustom" //main code var activeItem = app.project.activeItem if (activeItem != null && (activeItem instanceof CompItem)){ var selectedLayers = activeItem.selectedLayers for (var i=0; i<selectedLayers.length; i++) { selectedLayers[i].property("ADBE Effect Parade").addProperty(effectName) } }
そして今度こそ無事に動きました!いやー解決解決。
こんな感じでエフェクト適用をショートカット設定すると確かに楽できますね。僕も「レベル」とか良く使うので、これは便利かもと思いました。あとショートカットの女の子って良いですよね。ショートカットが似合う女の子はどんな髪型をしてもたいてい可愛い、というのが僕の自論です。
■matchName
そして書いてて思ったのですが、実はこちらの方が日本語版以外のAEにも対応できてるため、より良いコードになっています。なぜならmatchNameを使用しているからです。matchNameとは日本語版や英語版(もしくはそれ以外の全て)で通用する「共通のプロパティ名」です。上のコードで言うと、“ADBE CurvesCustom”というのがmatchNameになります。これは日本語で言うと「トーンカーブ」のことなのですが、「トーンカーブ」のままでは日本語版では問題なく認識されるものの英語版では認識されません(英語版では”Curves”になるため)。 なのでこういったエフェクト(プロパティ)名にはmatchNameを使うというのがAEスクリプトの基本です。
matchNameはスクリプトからしか取得出来ませんが、僕は以下のようなスクリプトを書いて対応しています。
function HF_getPropMatchName() { var text = "" var proj = app.project if (!proj) { text += "aepをsaveしてから実行してね" return text } var comp = proj.activeItem if (!comp || !(comp instanceof CompItem)) { text += "activeなcompがないね" return text } var selProps = comp.selectedProperties if (selProps.length == 0) { text += "propertyを少なくとも一つは選択してね" return text } for (var i=0; i<selProps.length; i++) { text += "[" + selProps[i].name + "] = " + selProps[i].matchName + "\n" } return text } alert(HF_getPropMatchName())
レイヤのプロパティ(エフェクトや位置など)を選択して実行するとmatchNameが表示されるので、それを利用する感じです。実際にはファイルにダンプしてコピーできるようにもしていますが、コードが長くなるので今回は割愛しました。(目コピでも十分でしょう)
つまり、「トーンカーブ」以外のショートカット用スクリプトを作りたければ、上記スクリプトを利用してmatchNameを取得し、effectNameだけ書きかえればOKという事ですね。
とまぁ今回はちょっと力を抜いてお送りしちゃいましたが、こんな感じでフィニッシュという事で宜しかったでしょうか。
日本語おかしいですかね。でも気にしません。
■告知
最後にちょっと告知など
開発室では現在(常にですが)、プログラマーを絶賛大募集中です!
プログラミングの経験があれば実務経験は問いませんので、気軽に応募してみて下さい。
https://www.dfx.co.jp/careers/engineer/software-developer.html
同様にTDも絶賛大募集中ですので、こちらも是非お願いします。
https://www.dfx.co.jp/careers/engineer/technical-director.html
https://www.dfx.co.jp/careers/engineer/crowd-td.html
皆様のご応募をお待ちしております!
それでは!ミ・アモーレ!
コメント
コメントフォーム