Перейти к содержимому


Перед регистрацией ознакомьтесь с темой про сертификат безопасности:
Фотография
* * * * * 1 Голосов

Секреты Премьер Про


  • Please log in to reply
558 ответов в этой теме

#551 Malcev

Malcev

    Сенсей для друзей по NLE

  • Участники
  • PipPipPipPipPipPipPipPipPipPip
  • 1079 Сообщений:

Отправлено 07 Nov 2018 - 06:13

Почитал документацию - набросал простой пример test:
Создаём файлы:
1) C:\Program Files (x86)\Common Files\Adobe\CEP\extensions\test\index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
<script src="./lib/CSInterface.js"></script>        
<script type="text/javascript">
var cs = new CSInterface();  
cs.registerKeyEventsInterest(JSON.stringify([
{"keyCode": 0x51},  //q
{"keyCode": 0x57}   //w
]));
function keyDownInBody(event)
{
   if (event.keyCode == 0x51)
   {
      cs.evalScript('$.runScript.Up()')
   }
   else if (event.keyCode == 0x57)
   {
      cs.evalScript('$.runScript.Down()')
   }
}
</script>
</head>
<body onkeydown="keyDownInBody(event)">
</body>
</html>

2) C:\Program Files (x86)\Common Files\Adobe\CEP\extensions\test\PProPanel.jsx

$.runScript = {

Up: function()
{
   var effect = app.project.activeSequence.videoTracks[0].clips[0].components;
   var value = effect[2].properties[0].getValue();
   effect[2].properties[0].setValue(value+1, true);
},

Down: function()
{
   var effect = app.project.activeSequence.videoTracks[0].clips[0].components;
   var value = effect[2].properties[0].getValue();
   effect[2].properties[0].setValue(value-1, true);
}

}

3) C:\Program Files (x86)\Common Files\Adobe\CEP\extensions\test\CSXS\manifest.xml

https://github.com/A...XS/manifest.xml

4) C:\Program Files (x86)\Common Files\Adobe\CEP\extensions\test\lib\CSInterface.js

В эависимости от версии премьера:

https://github.com/A.../CSInterface.js

https://github.com/A.../CSInterface.js

Прописываем в реестре ключи CSXS:

https://raw.githubus...ds/Registry.png

После чего запускаем премьер, кладем на секвенцию на 1 дорогу клип, ставим ему какой-нибудь эффект, запускаем нашу панель через windows->extensions и нажимаем "q" и "w".

При нажатии "q" первая настройка эффекта должна увеличиваться на 1, а при нажатии "w" уменьшаться.

Виртуальные коды лежат тут:

https://docs.microso...rtual-key-codes

Предполагаю, palettegear делали также, просто добавили анимации в index.html.

ЗЫ код, возможно, криво отформатирован, так как я на джаваскрипт ничего не пишу.


Сообщение отредактировано Malcev: 07 Nov 2018 - 06:19


#552 Muhin

Muhin

    не теряя ни секунды

  • Активные Участники
  • PipPipPipPipPipPipPipPipPipPip
  • 1789 Сообщений:

Отправлено 07 Nov 2018 - 17:27

Спасибо, работает пока нет так как ожидается) Вощем надо курить примерчики плюс https://premiereonscript.com/log-13/



#553 Gradov_Georg

Gradov_Georg

    штатный злобный буратино форума

  • Модераторы
  • PipPipPipPipPipPipPipPipPipPipPipPipPipPipPip
  • 7801 Сообщений:

Отправлено 07 Nov 2018 - 17:50

Без претензий к коду, но у них не так...

 

https://palette.zend...be-Integrations

 

 

 

Premiere Pro Plugin
  1. Open Premiere Pro CC (Compatible with CC 2015.3-2018).
     
  2. MacOS Users: Navigate to Premiere Pro CC > Preferences > Control Surface (shortcut Command+Comma)
    Windows Users: Navigate to Edit > Preferences > Control Surface (shortcut Control+Comma)
     
  3. Select "Add" to select a new control surface. Choose the Device Class drop-down, select "Palette Plugin (V2)", and select OK.
     
  4. Wait up to 20 seconds for PaletteApp to detect the Premiere Pro Plugin. The bottom right corner of your profile should now display "Connected" 

 

https://helpx.adobe....ce-support.html

 

https://www.adobe.co...sdk/cc2015.html

 

 

New Plug-in Type has been introduced for hardware Control Surfaces. This is the API that allows support for EUCON and Mackie devices to control audio mixing and basic transport controls.

The API supports two-way communication with Premiere Pro, so that hardware faders, VU meters, etc are in sync with the application.



#554 Malcev

Malcev

    Сенсей для друзей по NLE

  • Участники
  • PipPipPipPipPipPipPipPipPipPip
  • 1079 Сообщений:

Отправлено 08 Nov 2018 - 05:00

Gradov_Georg, спасибо за информацию. Не знал.

 

работает пока нет так как ожидается

А как ожидается-то?



#555 Muhin

Muhin

    не теряя ни секунды

  • Активные Участники
  • PipPipPipPipPipPipPipPipPipPip
  • 1789 Сообщений:

Отправлено 08 Nov 2018 - 16:25

Упс, вчера пробовал только люметри, там работало не так :),  там первым свойством очевидно не exposure или temp, при нажатии q или w он просто сбрасывал эффект на дефолт, да еще и ошибку выдавал при попытке покрутить бегунки на эффекте.

Возможно после правки реестра надо было перегрузиться.

 

А вот сегодня накинул procamp и оно таки действует! Вот она магия. ))) Спасибище!

Transform выдает: bad argument set  value, понятное дело надо смотреть:

https://premiereonsc...cumentation.pdf

Поправил Property и заработало.

Прикольно, можно одновременно крутить разные свойства.

Теперь надо копать как изменить свойство scale встроенного Motion

var value = effect[2 change to 0 не работает].properties[0 change 1].getValue();

 

Property: 0: Position,1: Scale, 2: Scale Width,3: пусто, 4: Rotation и т.д в пдф-е на стр 16


Сообщение отредактировано Muhin: 08 Nov 2018 - 17:07


#556 Malcev

Malcev

    Сенсей для друзей по NLE

  • Участники
  • PipPipPipPipPipPipPipPipPipPip
  • 1079 Сообщений:

Отправлено 08 Nov 2018 - 17:10

Ну вообще, чтобы было нечто похоже на palettegear надо окно панели сделать невидимым и если оно не сфокусировано, то при нажатии на горячую кнопку сначала c помощью автохотки кликнуть на него, чтобы оно могло отловить это событие.

После получения события html должен взять с input box индекс выделенного клипа и нужного эффекта, послать команду скрипту с этими параметрами и ждать ответа от скрипта о выделенном клипе, после чего записать их в input box.

Скрипт же получает параметры с индексом выделенного клипа, проверяет выделен ли он на самом деле, проверяет индекс эффекта, если всё ок, то увеличивает/уменьшает эффект на единицу, если же клип не выделен, то перебирает все клипы на линейке, находит выделенный, увеличивает значение эффекта на единицу и возвращает индекс выделенного клипа и нужного эффекта в html.

Потом, когда будет время, посмотрю, как это можно реализовать.

В целом апи на данный момент весьма куцый, чтобы сделать банальные вещи, например получить выделенный клип, придётся в цикле перебирать все клипы на всех треках.



#557 Malcev

Malcev

    Сенсей для друзей по NLE

  • Участники
  • PipPipPipPipPipPipPipPipPipPip
  • 1079 Сообщений:

Отправлено 08 Nov 2018 - 18:29

Теперь надо копать как изменить свойство scale встроенного Motion

var scale = app.project.activeSequence.videoTracks[0].clips[0].components[1].properties[1].getValue();
Чтобы лучше понимать о возможных методах и свойствах используй PropertyExplorer:
https://forums.adobe.../thread/2316515

Сообщение отредактировано Malcev: 08 Nov 2018 - 18:34


#558 Muhin

Muhin

    не теряя ни секунды

  • Активные Участники
  • PipPipPipPipPipPipPipPipPipPip
  • 1789 Сообщений:

Отправлено 08 Nov 2018 - 18:52

...апи на данный момент весьма куцый, чтобы сделать банальные вещи...

к сожалению, не сравнить с АЕ.

 

PropertyExplorer, ага поставил, начинаю понимать)

 

Т.е. весь процесс таков, сфокусировать окошко с нашей панелькой, скриптом перебрать/найти в текущей секвенции выделенный клип,

не вызывая окно фефектов спокойно крутить(удобными клавишами или колесиком мышки, которое временно меняет свое обычное поведение) нужное свойство, возможно?



#559 Malcev

Malcev

    Сенсей для друзей по NLE

  • Участники
  • PipPipPipPipPipPipPipPipPipPip
  • 1079 Сообщений:

Отправлено 12 Nov 2018 - 07:49

Вот так, вроде, получается.

Создаём файлы:
1) C:\Program Files (x86)\Common Files\Adobe\CEP\extensions\test\index.html

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<script src="./lib/CSInterface.js"></script>
<script type="text/javascript">
var csInterface = new CSInterface();
csInterface.registerKeyEventsInterest(JSON.stringify([
{"keyCode": 0x51},  //q
{"keyCode": 0x57}   //w
]));

function evalScriptCallback(result)
{
   if (result !== "undefined")
      document.getElementById("selected").value = result;
}

function keyDownInBody(event)
{
   if (event.keyCode == 0x51)   //q
   {
      var ControlledEffect = "AE.ADBE Motion";   //effect matchName
      var ControlledProperty = 1;   //effect property scale
      var step = 1;   //increase/decrease value
      csInterface.evalScript('var ControlledEffect = "' + ControlledEffect + '"; var ControlledProperty = ' + ControlledProperty + '; var step = ' + step + '; ' + document.getElementById("selected").value + '$._PPP_.ChangeEffectParameters()', evalScriptCallback);
   }
   else if (event.keyCode == 0x57)   //w
   {
      var ControlledEffect = "AE.ADBE Motion";   //effect matchName
      var ControlledProperty = 1;   //effect property scale
      var step = -1;   //increase/decrease value
      csInterface.evalScript('var ControlledEffect = "' + ControlledEffect + '"; var ControlledProperty = ' + ControlledProperty + '; var step = ' + step + '; ' + document.getElementById("selected").value + '$._PPP_.ChangeEffectParameters()', evalScriptCallback);
   }
}

</script>
</head>
<body onkeydown="keyDownInBody(event)">
<input type="text" id="selected" value="var SelectedTrack = 0; var SelectedClip = 0; var SelectedEffect = 0;">
</body>
</html>

2) C:\Program Files (x86)\Common Files\Adobe\CEP\extensions\test\PProPanel.jsx

$._PPP_={

ChangeEffectParameters: function()
{
   var NowSelectedTrack = SelectedTrack; var NowSelectedClip = SelectedClip; var NowSelectedEffect = SelectedEffect;
   try {
      var videoTracks = app.project.activeSequence.videoTracks;
   }
   catch(err) {
      alert("Error!\nNo active sequence!");
      return
   }
   try {
      if (videoTracks[SelectedTrack].clips[SelectedClip].isSelected())
         var clip = videoTracks[SelectedTrack].clips[SelectedClip];
   }
   catch(err) {
   }
   if (!clip)
   {
      exit_loops:
      for (var i=0 ; i< videoTracks.numTracks ; i++)
      {
         for (var k=0 ; k< videoTracks[i].clips.numItems ; k++)
         {
            if (videoTracks[i].clips[k].isSelected())
            {
               var NowSelectedTrack = i; var NowSelectedClip = k;
               var clip = videoTracks[i].clips[k];
               break exit_loops;
            }
         }
      }        
   }
   if (!clip)
   {
      alert("Error!\nNo clip selected!");
      return
   }
   
   var effects = clip.components;
   try {
      if (effects[SelectedEffect].matchName == ControlledEffect)
         var effect = effects[SelectedEffect];
   }
   catch(err) {
   }
   if (!effect)
   {
      for (var l=0 ; l< effects.numItems ; l++)
      {
         if (effects[l].matchName == ControlledEffect)
         {
            var NowSelectedEffect = l;
            var effect = effects[l];
            break;
         }
      }
   }
   if (!effect)
   {
      alert("Error!\nNo such effect!");
      return
   }

   var property = effect.properties[ControlledProperty];
   if (property.isTimeVarying())
   {
      alert("Error!\nParameter has keyframes!");
      return
   }
   var value = property.getValue();
   property.setValue(value + step, true);
   if (NowSelectedTrack == SelectedTrack && NowSelectedClip == SelectedClip && NowSelectedEffect == SelectedEffect)
      return
   else
      return ('var SelectedTrack = ' + NowSelectedTrack + '; var SelectedClip = ' + NowSelectedClip + '; var SelectedEffect = ' + NowSelectedEffect + ';');
}

}

C:\Program Files (x86)\Common Files\Adobe\CEP\extensions\test\CSXS\manifest.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--
/*************************************************************************
* ADOBE CONFIDENTIAL
* ___________________
*
* Copyright 2014 Adobe
* All Rights Reserved.
*
* NOTICE: Adobe permits you to use, modify, and distribute this file in
* accordance with the terms of the Adobe license agreement accompanying
* it. If you have received this file from a source other than Adobe,
* then your use, modification, or distribution of it requires the prior
* written permission of Adobe.
**************************************************************************/
-->    
<ExtensionManifest Version="5.0" ExtensionBundleId="com.adobe.PProPanel" ExtensionBundleVersion="11.1"
ExtensionBundleName="Premiere Pro sample panel"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <ExtensionList>
        <Extension Id="com.adobe.PProPanel" Version="10.3.0" />
    </ExtensionList>
    <ExecutionEnvironment>
        <HostList>
            <Host Name="PPRO" Version="9.0" />
        </HostList>
        <LocaleList>
            <Locale Code="All" />
        </LocaleList>
        <RequiredRuntimeList>
            <RequiredRuntime Name="CSXS" Version="6.0" />
        </RequiredRuntimeList>
    </ExecutionEnvironment>

    <DispatchInfoList>
        <Extension Id="com.adobe.PProPanel">
            <DispatchInfo >
                <Resources>
                    <MainPath>./index.html</MainPath>
                    <ScriptPath>./PProPanel.jsx</ScriptPath>
                    <CEFCommandLine>
                        <Parameter>--allow-file-access</Parameter>
                        <Parameter>--allow-file-access-from-files</Parameter>
                    </CEFCommandLine>
                </Resources>
                <Lifecycle>
                    <AutoVisible>false</AutoVisible>
                    <StartOn>
                        <!-- Premiere Pro dispatches this event on startup -->
                        <Event>com.adobe.csxs.events.ApplicationActivate</Event>
                    </StartOn>
                </Lifecycle>
                <UI>
                    <Type>Modeless</Type>
                    <Menu>PProPanel (SDK sample panel)</Menu>
                    <Geometry>
                        <Size>
                            <Height>300</Height>
                            <Width>180</Width>
                        </Size>
                    </Geometry>
                </UI>
            </DispatchInfo>
        </Extension>
    </DispatchInfoList>
</ExtensionManifest>

Скрипт автохотки:

SleepDuration := 5
FirstPressDelay := 0.15

#InstallKeybdHook
#InstallMouseHook
#UseHook
DetectHiddenWindows, On

#If WinActive("ahk_exe Adobe Premiere Pro.exe") and WinExist("Script Alert ahk_exe Adobe Premiere Pro.exe")
q::
w::
return

#If WinActive("ahk_exe Adobe Premiere Pro.exe")
q::
w::
SetBatchLines -1
SetKeyDelay, -1, -1
If (A_PriorKey != "q") and (A_PriorKey != "w")
{
   SetControlDelay -1
   ControlClick, Chrome_WidgetWin_01, ahk_exe Adobe Premiere Pro.exe, Chrome Legacy Window,,, NA
   loop
   {
      ControlGetFocus, Focus, ahk_exe Adobe Premiere Pro.exe, Chrome Legacy Window
      if (Focus = "Chrome_WidgetWin_01")
         break
   }
}
KeyWait, %A_ThisHotkey%, T%FirstPressDelay%
If ErrorLevel
{
   DllCall("Winmm\timeBeginPeriod", UInt, 3)
   loop
   {
      if !GetKeyState(A_ThisHotKey, "P")
         break
      SendInput {%A_ThisHotKey%}
      loop % SleepDuration
         DllCall("Sleep", UInt, 1)
   }
   DllCall("Winmm\timeEndPeriod", UInt, 3)
}
Else
   SendInput {%A_ThisHotKey%}

Теперь при нажатии q,e выделенный клип будет уменьшаться/увеличиваться.

В манифесте я прописал автозапуск в скрытом режиме.

Для изменения параметров эффекта с ключами нужно прописывать отдельно условия, можешь этим заняться - мне лень :).

Скорость уменьшения/увеличения значений эффекта при зажатии кнопки прописывается в автохотки.

SleepDuration - пауза между посыланием кнопок во время зажатия.

FirstPressDelay - время после нажатия кнопки за которое скрипт определяет, кнопка зажата или нет.

Так как я сижу на премьере 2017 года, то последнее их апи у меня не работает, а там есть, вроде, отлавливание событий изменения выделения на линейке:

https://github.com/A...anel/ext.js#L55

    csInterface.evalScript('$._PPP_.registerSequenceSelectionChangedFxn()'); // Selection within the active sequence changed

https://github.com/A...miere.jsx#L1973

registerSequenceSelectionChangedFxn : function() {
        var success = app.bind('onActiveSequenceSelectionChanged', $._PPP_.myActiveSequenceSelectionChangedFxn);
},

https://github.com/A...miere.jsx#L1958

 myActiveSequenceSelectionChangedFxn : function() {
        var sel = app.project.activeSequence.getSelection();
        $._PPP_.updateEventPanel('Current active sequence = ' + app.project.activeSequence.name + '.');
        $._PPP_.updateEventPanel( sel.length + ' track items selected.');
        for(var i = 0; i < sel.length; i++){
            if (sel[i].name !== 'anonymous'){
                $._PPP_.updateEventPanel('Selected item ' + (i+1) + ' == ' + sel[i].name + '.');
            }
        }    
}

Сообщение отредактировано Malcev: 12 Nov 2018 - 08:17





0 человек читают эту тему

0 пользователей, 0 гостей, 0 скрытых пользователей



Рейтинг@Mail.ru