сдвиг ключевого кадра в расширенном тексте - PullRequest
0 голосов
/ 17 апреля 2020

Я хотел бы сдвинуть время некоторых ключевых кадров на слое на x секунд / кадров спустя. В документации Extendsript есть функция для установки значения ключевого кадра, но я не могу найти для установки времени ключевого кадра.

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

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020

В итоге я сделал именно это, потому что хотел выяснить, как переместить все выбранные ключевые кадры в точку воспроизведения с помощью сочетания клавиш. Я не мог выяснить, как симулировать щелчок мышью и перетаскивание (если кто-нибудь знает, потому что это может быть более тривиальным ...), но я закончил тем, что создал скрипт, который сначала записывает все ключевые кадры, затем удаляет их все, а затем заменяет их смещенное значение.

И да, это включает в себя создание объекта "ключевой кадр" и сохранение их в массиве. Порядок shiftKeyFrames предполагает, что вы записали ключевые кадры в массив в порядке слева направо.

var records = arrayOfkeyFrameObjects;

function shiftKeyFrames(records, dif){//shifts keyFrames by dif     

    for(i= records.length - 1; i >= 0 ; i--){ //Remove original keyframes.
        records[i].property.removeKey(records[i].index);
    }

    for(i=0; i < records.length;i++){ 
        records[i].replacementIndex = records[i].property.addKey(roundFrame(records[i].time+dif)); //Adds a keyframe with the time difference, rounded to the nearest frame, and stores the replacement index.
        records[i].property.setValueAtKey(records[i].replacementIndex,records[i].value); //Sets the value of the new keyFrame
    }

    for(i=0; i < records.length;i++){
        records[i].property.setSelectedAtKey(records[i].replacementIndex, true); //Re-selects all the created keyframes.
    }
}

function roundFrame(time){
    return Math.round(comp.frameRate*time)/comp.frameRate;
}

function keyFrame(property, index){
    this.property = property;
    this.index = index;
    this.time = property.keyTime(index);
    this.value = property.keyValue(index);
    this.replacementIndex;
}
}());
0 голосов
/ 17 апреля 2020

Фактического ключевого кадра в API After Effects нет. Есть только свойства и куча методов для получения информации о ключевых кадрах этих свойств. Для программы, в которой все ключевые кадры, это выглядит ... вроде как что-то вроде Adobe сделает .

Итак, вам нужно скопировать все атрибуты ключа, который вы хотите переместите, как временная простота, пространственные касательные и т. д., затем создайте новый ключ с этими свойствами, затем удалите исходный ключ (который также может быть ошибочным, потому что, если вы вставили новый ключ перед старым ключом, его индекс изменится. Это бесит). Я написал функцию для выполнения того, что вы можете найти здесь , не стесняйтесь раскошелиться и улучшить.

Я думаю, если бы я был лучше в JS Я бы сделал объект ключевого кадра.

...